libc高版本劫持程序流思路学习

发布者:Seclusion
发布于:2020-11-05 17:14

libc高版本劫持程序流思路学习

学习https://kirin-say.top/2020/06/29/0CTF-TCTF-2020-Quals-PWN/ 、 https://fmyy.pro/2020/10/26/Competition/ByteCTF-2020/#gun师傅博客思路

 

针对2.29及以上版本libc

 

劫持_IO_2_1stderr 的 _chain字段,即劫持原本是_IO_2_1_stdout的值到可控区域,伪造一个_IO_2_1stdout结构

 


伪造的stdout结构中的要注意过check,结构如下

 

程序在退出时会调用exit函数(return退出时也会调用exit函数),这样在_IO_cleanup的时候就会劫持程序流,原理如下:结合高版本的libc中setcontext控制参数为rdx,而之后过程中调用malloc前rdx=[rdi+0x28],所以我们将malloc_hook劫持为setcontext+61就可以利用setcontext劫持程序流,效果如下:

    #伪造的_IO_2_1_stdout_结构
    IO = '\0'*0x28
    IO += p64(heap_base+0x360+0xe0)  ----->后面调用setcontext时的rdx值
    IO = IO.ljust(0xd8,'\0')
    IO += p64(IO_str_jumps)          ----->过check

声明:该文观点仅代表作者本人,转载请注明来自看雪