0x00 背景
Httpd服務中的緩沖區溢出漏洞
複現參考文章[https://www.4hou.com/posts/gQG9](對 TP-Link TL-WR841N v14 CVE-2019-17147 緩沖區溢出漏洞的分析)
Binwalk -Me 解壓縮
File ./bin/busybox檔案類型
MIPS 32位,小端
0x01 固件仿真環境搭建
在TPlink官網上直接找到了TP-Link TL-WR841N v14 2018-3月的固件版本,是漏洞修複前的,下載下傳後想着既然沒有實物,何不仿真運作呢?
在網上尋找資料過程中,在這篇文章【物聯網裝置固件模拟入門
】中找到了相應工具,固件分析工具包(https://github.com/attify/firmware-analysis-toolkit)
遵照教程一步步操作,能夠在最後運作Netgear WNAP320 固件,在浏覽器這個輸入IP位址可以直接通路。
但是在對TP-Link TL-WR841N v14進行同樣操作時,固件仿真運作失敗
0x02 仿真失敗原因探尋
首先搭建qemu仿真環境,下載下傳https://people.debian.org/~aurel32/qemu/mipsel/ 網站上編譯好的mips32el環境,通過wget指令下載下傳 vmlinux-2.6.32-5-4kc-malta和debian_squeeze_mipsel_standard.qcow2到固件所在檔案夾,然後輸入:
sudo qemu-system-mipsel -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic,macaddr=00:16:3e:00:00:01 -net tap
運作qemu-system,使用者名和密碼都是root
之後通過scp -r ./squashfs-root root@虛拟機ip:/root/
完成固件環境的搭建
Chroot /root/squashfs-root/ bin/sh
将檔案系統切換到路由器檔案系統,注意squashfs-root/ 和bin之間有空格
運作初始化檔案:sh /etc/init.d/rcS
init.d/rcS: line 30: can't create /proc/sys/net/netfilter/nf_conntrack_icmp_timeout: nonexistent directory
init.d/rcS: line 35: can't create /proc/sys/net/netfilter/nf_conntrack_expect_max: nonexistent directory
init.d/rcS: line 37: can't create /proc/sys/net/netfilter/nf_conntrack_max: nonexistent directory
insmod: can't insert '/lib/modules/kmdir/kernel/drivers/net/rt_rdm/rt_rdm.ko': invalid module format
insmod: can't insert '/lib/modules/kmdir/kernel/drivers/net/raeth/raeth.ko': invalid module format
insmod: can't insert '/lib/modules/kmdir/kernel/net/netfilter/nf_conntrack_proto_gre.ko': invalid module format
insmod: can't insert '/lib/modules/kmdir/kernel/net/netfilter/nf_conntrack_pptp.ko': invalid module format
insmod: can't insert '/lib/modules/kmdir/kernel/net/shortcut-fe/shortcut-fe.ko': invalid module format
insmod: can't insert '/lib/modules/kmdir/kernel/net/shortcut-fe/shortcut-fe-cm.ko': invalid module format
init.d/rcS: line 56: can't create /sys/sfe_ipv4/max_connections: nonexistent directory
insmod: can't insert '/lib/modules/ipt_STAT.ko': invalid module format
insmod: can't insert '/lib/modules/tp_domain.ko': invalid module format
insmod: can't insert '/lib/modules/pppol2tp.ko': invalid module format
insmod: can't insert '/lib/modules/l2tp_ppp.ko': invalid module format
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
mii_mgr: ioctl error
/etc # init.d/rcS: line 74: can't open '/dev/null'
和用firmadyne工具運作結果相同,檢視固件包中的proc檔案夾,
是空的
運作httpd服務,也未成功
/etc # httpd
/etc # [ dm_shmInit ] 086: shmget to exitst shared memory failed. Could not create shared memory.
[ dm_acquireLock ] 252: lock failed, errno=22 rc=-1
固件仿真啟動和httpd服務啟動失敗的原因估計是因為路由器在啟動中,部分調用資源在其他硬體flash中,缺少服務支援導緻固件運作失敗。
0x03 解決方案
現在想到的有兩個方案:
1. 在虛拟機中補充必要的支援檔案
2. 在完整硬體真機環境進行調試