Tenda 路由器 CVE-2022-37810分析

安全入门
2022-09-15 19:15
77105

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 网卡:

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 实现命令注入。

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

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

利用成功。

分享到

参与评论

0 / 200

全部评论 7

zebra的头像
学习大佬思路
2023-03-19 12:15
Hacking_Hui的头像
学习了
2023-02-01 14:20
iotstudy的头像
试了一下,一致卡在“websOpenListen 253: Couldn't open a socket on ports 80 main -> initWebs failed” patch了“Initialize AP MIB failed”、“connect cfm failed”;添加了br0并激活;patch了“initwebs failed”,最后还是在websOpenListen报错
2022-09-27 22:25
a666666的头像
思路清晰,感觉棒棒的。
2022-09-27 20:52
iotstudy的头像
思路清晰,感觉棒棒的。
2022-09-17 09:51
tracert的头像
111
2022-09-17 01:24
tracert的头像
前排学习
2022-09-17 01:23
投稿
签到
联系我们
关于我们