当 N-Day 变成 0day(一)

2025-02-14 28 0

背景

2022年6月23日,Exodus Intelligence公开了一个影响TP-Link制造的WR940N V5和WR941ND V6路由器的漏洞。这个漏洞被标记为“未初始化指针漏洞”,但由于手头只有WR940N V6型号,我决定先分析WR940N V5的固件,然后再看V6型号。但是在分析过程中,我注意到了一些空白点。

发现漏洞

有多种方式可以发现这个漏洞,且没有哪一种方式是错误的,因为最终结果都是一样的。我将展示两种使用非常原始技术发现这个漏洞的方法。

原始技术 #1

Exodus Intelligence的通报详细说明了该漏洞在“处理UPnP/SOAP SUBSCRIBE请求”时被触发,这一点在UPnP设备架构2.0 PDF中有详细描述。通报中列出的HTTP方法SUBSCRIBE与UPnP的GENA(通用事件通知架构)部分相关,负责处理事件通知,外部设备可以对其进行订阅(SUBSCRIBE)和取消订阅(UNSUBSCRIBE)。

在提取的固件中进行简单的grep搜索,查找“SUBSCRIBE”会返回三个二进制文件:

$ grep -r "SUBSCRIBE" .
Binary file ./sbin/hostapd matches
Binary file ./lib/libwpa_common.so matches
Binary file ./usr/bin/httpd matches

在进入bindiff之前,决定先比较这些二进制文件的哈希值,以查看是否可以立即排除某些二进制文件。尽管使用的哈希方法(MD5)被称为“不安全”,但在本发布时,尚无已知的路由器厂商在其生成的二进制文件中使用MD5哈希碰撞。

未打补丁的固件(v.211111):

ef7abcd4f5a2289c24a50c9fa9fda8a1  ./sbin/hostapd
45725cdfe9ad7d8323c50167908acc23  ./lib/libwpa_common.so 
4dac0ec14e36001092cc2560f297a715  ./usr/bin/httpd

已打补丁的固件(v.220610):

8aa55621c7277b7cc998ecc80fd9d6a4  ./sbin/hostapd
45725cdfe9ad7d8323c50167908acc23  ./lib/libwpa_common.so
4feb70561feb0391404ee29712b0144e  ./usr/bin/httpd

哈希二进制文件并进行比较可能是浪费时间,但在这种情况下,它帮助排除了文件./lib/libwpa_common.so,因为两个MD5哈希值相同。这只剩下两个文件./sbin/hostapd./usr/bin/httpd。接下来,我们需要使用Bindiff来找出哪个二进制文件包含漏洞。


代码解析:

  1. grep命令
    grep -r "SUBSCRIBE" .是一个递归搜索命令,用来在当前目录及其子目录中查找包含“SUBSCRIBE”字样的文件。在这段代码中,返回了三个二进制文件,分别是./sbin/hostapd./lib/libwpa_common.so./usr/bin/httpd

  2. 哈希比较
    为了缩小调查范围,作者对提取的二进制文件进行了MD5哈希比较。哈希值是一种通过算法生成的文件的唯一标识符,通常用于验证文件是否被修改。通过对未打补丁和打补丁后的固件进行哈希值比较,发现./lib/libwpa_common.so的MD5哈希值在两个固件版本中相同,因此排除了该文件,认为它与漏洞无关。

  3. Bindiff
    使用Bindiff(一个二进制差异分析工具)来进一步对比./sbin/hostapd./usr/bin/httpd这两个文件,找出哪个文件包含漏洞。Bindiff通常用于比较两个二进制文件的差异,帮助研究人员确定新旧版本的代码或功能差异,从而定位漏洞。

原始技术 #2

让我们回到之前的假设,假设通报中删除了关于UPnP / GENA的参考信息。这种假设的情况在漏洞通报中经常发生。例如,CVE-2014-4126包含以下信息:“Microsoft Internet Explorer 10和11允许远程攻击者通过精心构造的网站执行任意代码或导致拒绝服务(内存损坏),即“Internet Explorer内存损坏漏洞”。

由于漏洞存在于某个服务中,因此一个不错的策略是首先列出提取的固件中的可执行文件。通过使用find命令,我们可以查看固件中有多少个文件被标记为可执行文件。

$ find . -executable -type f | wc -l
170

哇!一开始看似固件镜像中有很多可执行文件,但如果在binwalk提取固件时发生了某些事情呢?通过查看find命令的手册页,发现可以使用-exec动作对每个找到的文件执行附加任务。通过利用file命令,可以打印出每个文件名旁边的文件类型信息。查看前几个条目后,显然返回的某些文件不是ELF文件。

$ find . -executable -type f -exec file '{}' \;
./etc/ath/wsc_config.txt: ASCII text
./etc/ath/default/default_wsc_cfg.txt: ASCII text
[removed]
./web/login/input-box1.png: PNG image data, 250 x 32, 8-bit/color RGBA, non-interlaced
[removed]
./web/help/WanSlaacCfgHelpRpm.htm: HTML document, ASCII text, with very long lines, with CRLF line terminators

为了减少文件的数量,find的输出被管道传递给grep,搜索输出中的“ELF 32-bit”。

$ find . -executable -type f -exec file '{}' \; | grep "ELF 32-bit" -c
72

可执行文件(包括库)的列表减少了58%。接下来的步骤是创建一个小的bash命令来哈希文件并进行比较。这可能是一个延伸的操作,但它可能有助于进一步减少文件列表。

为了生成列表,以下命令在每个提取的squashfs目录中执行。

$ find . -executable -type f -exec file '{}' \; | grep "ELF 32-bit" | cut -d ":" -f 1 | while read -r string; do md5sum $string; done
50a9bc41ebc4db4bcdf526b64e8b9ae2  ./bin/busybox
0781d8cd42137165f4b38eb67b41e07c  ./sbin/wifitool
e5d4b3d6d5ce16592b23c82a7872b97e  ./sbin/iwpriv
dd22c3d54c059547fabc4ce7d9c92adf  ./sbin/iwlist
9a71298edacef371a920509249373d06  ./sbin/iptables-multi
17dbb88ae25c0323984e754aa0628ed8  ./sbin/tc
4a9af1c3a57b36ef4e31542c9a1228aa  ./sbin/iwconfig
02dbb91d7fd6401158aea9021de72cf5  ./sbin/wpa_supplicant
ef7abcd4f5a2289c24a50c9fa9fda8a1  ./sbin/hostapd
c1efb3e78c002b7a82d2d28739bfcb1d  ./sbin/wlanconfig
e1aef559e8ccf27b79b83e05f577bd59  ./lib/ld-uClibc-0.9.30.so
45725cdfe9ad7d8323c50167908acc23  ./lib/libwpa_common.so
7c34616b9c965c7dd4f8e1b1f2d18d6f  ./lib/libip6tc.so.0.0.0
3d5625439ce9cd389bd3b7ebcc3eb6e1  ./lib/libxtables.so.2.1.0
368cd21ea41bcece3ecd41335fcbba97  ./lib/libwolfssl.so.14.0.0
452a4826c92c8a51284af5007d9a6db8  ./lib/libiptc.so.0.0.0
b3a33a68a1ef0cfa2a5bd6878d2e3310  ./lib/libwpa_ctrl.so
[...等]

运行diff命令对比两个文件的差异:

$ diff unpatched_executables_md5.txt patched_executables_md5.txt 
< 9060164431357066c3607ebc476761c6  ./bin/busybox
---
> 50a9bc41ebc4db4bcdf526b64e8b9ae2  ./bin/busybox
9c9
< 8aa55621c7277b7cc998ecc80fd9d6a4  ./sbin/hostapd
---
> ef7abcd4f5a2289c24a50c9fa9fda8a1  ./sbin/hostapd
60c60
< 4feb70561feb0391404ee29712b0144e  ./usr/bin/httpd
---
> 4dac0ec14e36001092cc2560f297a715  ./usr/bin/httpd

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

甲方安全何时需要自研安全产品?安全平台工程团队的价值与落地策略
Burpsuite基础使用教程
Kali linux hping3基础使用方法
DouCo DouPHP 安全漏洞(CVE-2024-57599)
9万个WordPress站点面临本地文件包含漏洞攻击
从中国视角看 NSA(方程式组织)的 TTP(攻击套路)

发布评论