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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM