WP_OVERFLOW2
拿到程序,首先放到我们的kali里面看看是多少位的程序,然后在看看有没有什么安全属性
64位程序,并且开启了RELRO,NX
也就是说,这道题我们需要使用ROP绕过
使用ida64打开这个程序,对这个程序的伪代码进行分析
首先看看main函数
发现最开始定义的buf是32个字节
然后在memset中讲buf给清空了,然后read函数讲100字节的数据丢给了buf,这里可以产生栈溢出漏洞
我们在函数列表中可以发现我们无法找到/bin/sh这个函数,这里有两个方法可以找到bin/sh
- shift+F12,可以找到一些关键词
- 使用ROPgadget进行过滤
我们看第一种方法的效果
然后我们在看到第二种方法的效果
知道了/bin/sh的地址以后
我们还需要找system的地址
现在我们有了system的地址,/bin/sh的地址也有的,我们要将/bin/sh的地址传递给system需要知道RDI寄存器的地址
这里是这样解释的
system()
函数的第一个参数需要通过RDI寄存器传递。如果没有使用pop rdi; ret
的ROP gadget,就无法将/bin/sh字符串的地址加载到RDI寄存器中,也就无法调用system()
函数。
这里我们需要继续使用到ROPgadget了
为什么是POP rdi而不是直接rdi
原因:pop rdi
是一条汇编指令,它的作用是将栈顶的值弹出并存储到寄存器 RDI 中。而 rdi
是 RDI 寄存器本身。
Exp构造:
标签:bin,BUGKU,RDI,OVERFLOW2,system,地址,sh,PWN,rdi From: https://www.cnblogs.com/AnimeBucket/p/17471781.html