Sapido RB-1732 远程命令执行漏洞

漏洞介绍

sapido 是SAPIDO公司开发的一款家用路由器,其RB-1732系列v2.0.43之前的固件版本存在一处命令执行漏洞。该漏洞的产生原因是。服务器的syscmd.asp 页面没有对传递过来的参数进行过滤,这使得用户以参数的形式将系统命令发送给服务器,并在服务器上执行

漏洞影响

1
2
3
4
BR270n-v2.1.03
BRC76n-v2.1.03
GR297-v2.1.3
RB1732-v2.0.43

网络测绘

1
app="Sapido-路由器"

环境搭建

首先下载固件然后binwalk解包

![image-20240814110220059](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814110220059-17236045405711.png)

发现是Squashfs文件系统的,然后使用FirmAE搭建环境,或者使用Firmware Analysis Toolkit,但是我的这个环境老是搭建不起,于是使用的是FirmAE

1
2
3
sudo ./run.sh -c RB-1732   ~/Desktop/SAPIDO/RB-1732_TC_v2.0.43.bin 
sudo ./run.sh -r RB-1732 ~/Desktop/SAPIDO/RB-1732_TC_v2.0.43.bin

稍微等一会就启动成功了

![image-20240814110421768](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814110421768.png)

![image-20240814110450439](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814110450439.png)

漏洞分析

前面提到了我们的漏洞点在syscmd.asp 页面上于是找到这个syscmd.asp文件的位置

1
2
3
4
earch:~/Desktop/SAPIDO/_RB-1732_TC_v2.0.43.bin.extracted/squashfs-root$ ls
bin dev etc home init lib mnt proc sys tmp usr var web
iot@research:~/Desktop/SAPIDO/_RB-1732_TC_v2.0.43.bin.extracted/squashfs-root$ find . -name syscmd.asp
./web/syscmd.asp

打开这个文件,查看其源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<html>
<! Copyright (c) Realtek Semiconductor Corp., 2003. All Rights Reserved. ->
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>System Command</title>
<script>
function saveClick(){
field = document.formSysCmd.sysCmd ;
if(field.value.indexOf("ping")==0 && field.value.indexOf("-c") < 0){
alert('please add "-c num" to ping command');
return false;
}
if(field.value == ""){
alert("Command can't be empty");
field.value = field.defaultValue;
field.focus();
return false ;
}
return true;
}
</script>
</head>

<body>
<blockquote>
<h2><font color="#0000FF">System Command</font></h2>


<form action=/goform/formSysCmd method=POST name="formSysCmd">
<table border=0 width="500" cellspacing=0 cellpadding=0>
<tr><font size=2>
This page can be used to run target system command.
</tr>
<tr><hr size=1 noshade align=top></tr>
<tr>
<td>System Command: </td>
<td><input type="text" name="sysCmd" value="" size="20" maxlength="50"></td>
<td> <input type="submit" value="Apply" name="apply" onClick='return saveClick()'></td>

</tr>
</table>
<input type="hidden" value="/syscmd.asp" name="submit-url">
</form>
<script language="JavaScript">

</script>

<textarea rows="15" name="msg" cols="80" wrap="virtual"><% sysCmdLog(); %></textarea>

<p>
<input type="button" value="Refresh" name="refresh" onClick="javascript: window.location.reload()">
<input type="button" value="Close" name="close" onClick="javascript: window.close()"></p>
</blockquote>
</font>
</body>

</html>

可以看到form表单的action,于是数据会移交给/goform/formSysCmd

1
<form action=/goform/formSysCmd method=POST name="formSysCmd">

![image-20240814112335585](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814112335585.png)

于是查看formSysCmd,发现存在一个二进制程序,可能就是在这里实现了对formSysCmd的调用,于是用ida打开webs

找到字符串formSysCmd,然后发现对应的函数为formSysCmd,于是去查看一下

![image-20240814112501978](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814112501978.png)

发现关键的参数是syscmd

![image-20240814113019678](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814113019678.png)

抓包分析一下sysCmd是哪个参数,发现就是system command命令

![image-20240814113100990](/picture/Sapido RB-1732 远程命令执行漏洞/image-20240814113100990.png)

漏洞利用

访问目标:

1
2
http://xxx.xxx.xxx.xxx/syscmd.asp
http://xxx.xxx.xxx.xxx/syscmd.htm

[img](https://github.com/Apibug/SecPost/blob/main/images/202202162237444.png)

直接输入就可以命令执行了