
2013年,D-Link DIR-645無(wú)線(xiàn)路由器被爆出存在緩沖區(qū)溢出漏洞,遠(yuǎn)程攻擊者通過(guò)向該無(wú)線(xiàn)路由器的"post_login.xml"、"hedwig.cgi"、"authentication.cgi"等接口接口提交特制請(qǐng)求即可觸發(fā)緩沖區(qū)溢出,可使應(yīng)用程序停止響應(yīng),造成拒絕服務(wù)攻擊,漏洞編號(hào)為CNVD-2013-11625。后經(jīng)安全研究員分析發(fā)現(xiàn),該漏洞同時(shí)影響D-LINK的DIR-815/300/600/645型號(hào)路由器設(shè)備。本文基于D-LINK DIR-815路由器的存在漏洞版本的固件進(jìn)行相關(guān)分析
首先下載路由器固件文件
https://pmdap.dlink.com.tw/PMD/GetAgileFile?itemNumber=FIR1000487&fileName=DIR-815A1_FW101SSB03.bin&fileSize=3784844.0
首先使用binwalk解壓固件
binwalk -Me DIR-815A1_FW101SSB03.bin --run-as=root

解壓后在/squashfs-root得到固件的文件系統(tǒng)

接下來(lái)使用qemu-system-mipsel系統(tǒng)模擬,模擬前需要先下載mips架構(gòu)的內(nèi)核鏡像和文件系統(tǒng)
https://people.debian.org/~aurel32/qemu/mipsel/

下載完成后執(zhí)行下面的命令進(jìn)行模擬
sudo qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap -nographic
輸入root/root即可進(jìn)入qemu模擬系統(tǒng)
接下來(lái)需要在宿主機(jī)進(jìn)行網(wǎng)卡配置
若沒(méi)有安裝依賴(lài)需要先執(zhí)行如下命令安裝依賴(lài)庫(kù)
sudo apt-get install bridge-utils uml-utilities
然后依次執(zhí)行下面的命令配置網(wǎng)卡
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -Fsudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tap0 -j ACCEPT
sudo iptables -I FORWARD 1 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPTsudo ifconfig tap0 172.16.20.254 netmask 255.255.255.0

此時(shí)通過(guò)ifconfig命令即可看到配置好的tap0網(wǎng)卡

接下來(lái)進(jìn)入到qemu虛擬機(jī)中進(jìn)行網(wǎng)絡(luò)配置
依次執(zhí)行下面的命令
ifconfig eth0 172.16.20.2 netmask 255.255.255.0route add default gw 172.16.20.254ifconfig
可以看到qemu虛擬機(jī)的eth0網(wǎng)卡ip地址已經(jīng)配置為172.16.20.2
此時(shí)若上述配置沒(méi)有問(wèn)題,宿主機(jī)和qemu虛擬機(jī)之間已經(jīng)可以相互連通
通過(guò)下面的命令從宿主機(jī)將解壓固件后的得到的文件系統(tǒng)傳到qemu虛擬機(jī)上
scp -r squashfs-root/ root@172.16.20.2:/root
傳輸完成后,進(jìn)入到qemu虛擬機(jī)的squashfs-root/目錄,新建一個(gè)http_conf文件,該文件是http服務(wù)的配置文件
文件內(nèi)容如下





然后在qemu虛擬機(jī)的squashfs-root/下編寫(xiě)一個(gè)init.sh腳本,通過(guò)這個(gè)腳本進(jìn)行初始化并啟動(dòng)路由器h固件http服務(wù)
init.sh腳本內(nèi)容如下


通過(guò)瀏覽器訪(fǎng)問(wèn)
http://172.16.20.2:4321/hedwig.cgi
可以看到成功啟動(dòng)了http服務(wù)
打開(kāi)burpsuite,抓取瀏覽器訪(fǎng)問(wèn)http://172.16.20.2:4321/hedwig.cgi的請(qǐng)求包
由于直接瀏覽器訪(fǎng)問(wèn)提示不支持GET請(qǐng)求方法,所以將請(qǐng)求方法改為POST
會(huì)返回411錯(cuò)誤,根據(jù)報(bào)錯(cuò)應(yīng)該是缺少Length字段
在請(qǐng)求頭中加入Content-Length字段后再次請(qǐng)求,返回200,提示“no xml data”

創(chuàng)建一個(gè)exp.py腳本,腳本內(nèi)容如下,該腳本的功能是利用漏洞執(zhí)行“touch /tmp/havebeenpwn”命令



在宿主機(jī)執(zhí)行python exp.py
可以看到qemu虛擬機(jī)的/tmp目錄下成功創(chuàng)建了一個(gè)名為havebeenpwn的文件
