-
-
[原创]pwnable.kr uaf
-
2018-11-30 17:36 8065
-
Pwnable.kr之uaf
UAF漏洞的利用:
(1) 先制造一个迷途指针
(2) 利用我们构造的数据去填充被释放的内存
(3)再次使用该指针Human中有两个虚函数,然后human就会有一个虚表,虚表会记录类中所有虚函数的函数指针,可以看到human里面有一个system(“/bin/sh”);这就是我们利用的最终目的,但现在我们还没办法利用,我们接着往下看
接着我们看到man类,他会继承父类的vtable(虚表),同时子类的introduce()的函数的地址会替换父类在introduce()在虚表中的位置.
在分析之前,我们需要有一定的基础知识如下图
把编译好的可执行文件拖入IDA中分析, F5后我们看伪代码,看到v11,我们输入1时执行的是下面的语句,因此可以猜到v11就是vptr,然后转换为指针,取其中的内容就是vtable的第一个值,再加8就是第二个值,真好是introduce的函数指针
一共申请了30h大小的内存,所以我们的长度参数应该传48, V11的值就是rbp-60h处的值
因此我们在此处下断点
b *main+101
V11的值也就是rbx的值为0x555555768e70;
查看0x555555768e70,虚表的地址为0x555555755c88;
查看0x555555755c88就是虚函数的地址;我们就要想办法把利用此处
看到这里引用的是虚表处偏移8处的函数指针
本来虚表处偏移8是 introduce()的指针,我们把虚表前移8个字节,虚表偏移8处就是 give_shell()的函数指针了
因此我们构造如下数据写入内存
成功执行system(“/bin/sh”)接下来我们cat flag就可以看到flag了,注意服务器上的和本地有略微别,但是方法是不变的.
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。