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. 在完整硬件真机环境进行调试

posted @ 2020-01-05 18:52  大史42  阅读(314)  评论(0编辑  收藏