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

  • 相关阅读:
    小吴破产了。。。。
    面试专场之「计算机网络」知识
    硬核!社招校招面试「计算机网络」知识点大集合!
    41 二分查找 (20分)
    我是一个 4 年的 iOSer
    开源者访谈录第 1 期:如何在 3 个月内斩获 14000 个 GitHub Star!
    荐号 | 高质量的 Python 类公众号
    一道看完答案你会觉得很沙雕的「动态规划算法题」
    几道和散列(哈希)表有关的面试题
    面试专场之「Git」知识
  • 原文地址:https://www.cnblogs.com/deerCode/p/12153236.html
Copyright © 2020-2023  润新知