漏洞介绍:
Sapido是一款家用路由器,其RB-1732系列v2.0.43之前的固件版本存在一处命令执行漏洞。该漏洞产生的原因是,服务器的syscmd.asp页面没有对传递过来的参数进行过滤,这使得用户的输入没有任何过滤,可以直接将系统命令发送给服务器并在服务器上执行。
Fofa特征
app="Sapido-路由器"
固件提取
固件下载:
https://pan.baidu.com/s/1Gj9RDlAQdCDiaLdLzQ2Aag?pwd=8381
使用binwalk Me参数提取固件
我们已经知道漏洞点在syscmd.asp中,我们直接用find命令找到syscmd.asp的位置
syscmd.asp位于当前目录也就是解压出来的squashfs-root的web目录下,我们直接打开syscmd.asp文件查看它的源代码。
看到form表单指向了/goform/formSysCmd,接下来我们继续去找formSysCmd文件,find搜索无果后用grep搜索formSysCmd字符串,可以发现大部分都是引用在asp文件中,只有一个结果显示字符串包含在webs二进制文件中
漏洞分析
接下来我们用ida pro打开这个webs这个二进制文件进行分析
在ida pro加载webs后按ctrl+f进行搜索,我们的目标是formSysCmd,所以这里搜索“formSysCmd”,找到与之相关的函数。
这里分别找到地址为004044DB和00471A44两处地址,我们先双击004044DB进入到反汇编窗口
这里ELF32_Sym是ELF的一个结构体,formSysCmd对应的就是formSysCmd函数的实际地址。
用同样的方法再去查看00471A44地址处的formSysCmd函数,可以看到这里formSysCmd被解析为ascii字符,在右边注释处可以看到函数偏移量为AA4,单击AA4右边的箭头可以跳转到该函数位置
接着双击formSysCmd字符串跳转到formSysCmd函数所在的位置,查看其反汇编代码
为了方便阅读代码,我们可以按f5切换到伪代码窗口
我们可以看到system函数执行处没有任何过滤,v20的值则是snprintf函数拼接v3的值来复制,而v3是通过websGetVar函数获取sysCmd传递过来的,因此,如果传递给v20参数的值内容是系统命令,则将导致命令执行漏洞。
漏洞复现
漏洞复现需要将固件模拟出真实环境,这里使用firmware-analysis-plus进行模拟
github地址:
https://github.com/liyansong2018/firmware-analysis-plus
运行如下命令可直接一键模拟:
python3 ./fap.py -q ./qemu-builds/2.5.0/ ./RB-1732_TC_v2.0.43.bin
fap在模拟成功后会给出访问地址:192.168.1.1,在浏览器访问http://192.168.1.1,看到如下界面则表示固件模拟成功。
输入默认账号密码:admin/admin登入后台
直接访问http://192.168.1.1/syscmd.asp,可以看到一个命令执行的窗口,我们直接输入ls命令,成功执行命令。
原文始发于微信公众号(有限的思考):Sapido RB- 1732 路由器命令执行漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论