PWN入门-UAF
PWN入门-UAF
[NISACTF 2022]UAF
UAF(Use After Free)。当堆上的一块空间被释放后没有赋值为NULL
时,下一次分配还会分配到这一块堆,且数据依然保留。
思路如下:
利用create
创建“note 0”,并malloc
给.bss段上的page。*(_DWORD *)page
处为字符串地址,*((_DWORD *)page+1)
处为函数指针。
利用del
将page[0]
给free
掉,但并未赋值为NULL
。道理类似于栈,堆顶下移但free
掉的数据仍然保留。
漏洞点在show
中,但不接受参数0,所以要将序号推到1再进行shellcode写入。
再次create
“note 1”,并edit
时注入shellcode,这时。在+0偏移处写入4字节(i386架构)“sh\x00\x00”,偏移+4处写入后门NICO
地址。
最后show
“note 0”时,page[0]
依然指向create
“note 1”时分配的堆,并在(*((void (__cdecl **)(char *))page + 1))(page);
处执行shellcode。
1 | from pwn import * |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Blog of Monoceros406!