天天看點

TP-Link TL-WR841N v14 CVE-2019-17147 緩沖區溢出漏洞分析筆記v2018.12.31

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. 在完整硬體真機環境進行調試