CVE-2022-37810

首发于 IOTsec-Zone物联网安全社区

0x00 简介

固件下载地址:https://down.tenda.com.cn/uploadfile/AC1206/US_AC1206V1.0RTL_V15.03.06.23_multi_TD01.zip

Binwalk 可以提取出其文件系统。

0x01 固件模拟

Tenda 控制 WEB 相关流程的程序一般是 bin 目录下的 httpd 程序:

通过 sudo qemu-mipsel -L ./ ./bin/httpd 进行模拟:

关键词搜索在main函数处:

22行有关于 apmib_init 的判断,若失败会输出“Initialize AP MIB failed !”。

通过 IDA 判断找到关键判断为 0x33A68 处,通过 010editor 将 bnez 改为 beqz:

保存替换后发现卡在 check_network处,同样的方式进行修改,执行:

继续修改 check_cfm 的判断,执行:

listen ip = 255.255.255.255,加一张 br0 网卡:

1
2
3
4
apt install uml-utilities bridge-utils
brctl addbr br0
ifconfig br0 192.168.142.100/24
brctl addif br0 ens33

再执行发现又进入了 check_network 的判断循环,应该是通过增加网卡使得 check_network 返回正常,这里通过010editor修改回去,再执行:

模拟成功。

0x02 分析

根据漏洞描述,IDA打开后定位到关键函数 formWriteFacMac:

控制参数 mac 就可以利用 doSystemCmd 实现命令注入。

一直向上追溯可以追溯出这样的调用链:

1
2
3
4
5
6
main --> initWebs --> formDefineTendDa 
--> 
websFormDefine(
"WriteFacMac", (void (*)(webs_t, char_t *, char_t *))formWriteFacMac
)
--> formWriteFacMac

很明显这是 GoAhead 结构,通过字符串查询得到版本为2.1.8。

formDefineTendDa 是一个包含路由器接口和其对应处理函数的总函数,通过 websFormDefine 注册后,WriteFacMac 会与 formWriteFacMac 形成绑定,在 goform 下产生一个接口 WriteFacMac 调用 formWriteFacMac。

固件已经模拟成功,直接访问该接口:

访问成功,查看 websGetVar:

其流程为判断 wp中的mac参数是否存在,若不存在则返回默认值 00:01:02:11:22:33,若存在则返回对应值,这里并未做其他过滤,因此可以直接构造mac=00:01:02:11:22:33 || touch /tmp/x.txt

利用成功。