[Pwnable.kr] uaf

24. 2 月 2016 pwnable writeup 0

通过UAF漏洞控制vtable,调用指定虚函数(其实还可以干更多事情的……

 

由glibc会对linux内存管理进行一层封装(类似一个内存池),小块内存的分配从内存池中分配,而释放也不会“真正”释放回去。所以当刚释放了一块大小为x的内存,又申请同样大小的内存时,刚被释放的那块内存会被优先分配。

 

本题中有m、w两个对象都有一个虚函数表,两个表项分别是base::give_shell和derived::introduce.

F5一下

可以看出new的参数是0x18,也就是说每个对象的大小是24字节(vptr, name, age),而v13即是m对象的地址,*(_QWORD *)v13 + 8LL对应的是derive::introduce。如果要想在这里执行give_shell,则*v13的地址必须要减去8才行。

 

恩地址怎么找。在IDA按Ctrl+E可以指定ep,上面就有vtable for Man这个东西,直接可以定位过去

]1G4HOZQCJ@OIG$9XEDK)RR

然后在gdb main上下一个断点,来查看0x401570的内容

_KOTPF7(JFU4@~OK2[V21XV

确实是vtbl,那么我们只需要把0x401570往前推8个字节就可以了。

 


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.