DIR-645远程命令执行漏洞

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DIR-645远程命令执行漏洞相关的知识,希望对你有一定的参考价值。

首先我们分析网上公开的exp确定漏洞相关组件及payload,之后通过IDA分析研究漏洞是如何触发的,最后在attifyos中进行模拟,验证漏洞。

本次实验的漏洞是某品牌路由器service.cgi远程命令执行漏洞。
Packet storm有exp:https://packetstormsecurity.com/files/145859/dlinkroutersservice-exec.txt

看看exp中的关键信息
在这里插入图片描述

大概知道需要访问service.cgi,post请求,payload中有event=checkfw%26
我们先试试看自己能否分析

解压压缩文件
在这里插入图片描述

提取得到固件根目录
在这里插入图片描述

进入提取的文件夹
在这里插入图片描述

看看引发漏洞的cgi文件,其位于htdocs下
在这里插入图片描述

是32位mips小端可执行文件

接下来使用IDA分析
在这里插入图片描述

在main函数中看到
在这里插入图片描述

如果main函数判断访问的时候service.cgi就调用servicecgi_main
跟进servicecgi_main
先看一下其交叉引用的图
在这里插入图片描述

大概知道漏洞产生的地方了,servicecgi_main-》lxmldbc_system->system
接着跟下去看看
在这里插入图片描述

看到其会先判断request method请求方法,处理get和post
但是可以看到其实都是走一样的路径
在这里插入图片描述

调用cgibin_parse_request
跟进cgibin_parse_request
在这里插入图片描述

会解析content_type,content_length,然后就是解析参数的工作,回到servicecgi_main
在这里插入图片描述

我们需要找到调用lxmldbc_system的,而上图中我们发现EVENT,SERVICE会调用
在前面xref from图中看到lxmldbc_sytem会调用system,跟进去看看调用system时有没有一些过滤等防护措施
在这里插入图片描述

注意到,lxmldbc_system调用system执行command时没有任何过滤,此处就是引发命令注入的漏洞所在
这样我们就知道如何利用了,在访问时加上EVENT,或者利用SERVICE(加上ACTION字段),然后使用一些常见的方法截断再加上我们的要执行的命令就可以了。注入命令后需要是“&”符号的urlencode编码(%26),因为&在http请求中是请求域分隔符,所以必须做编码转换。在其他分隔符使用时也可以进行urlencode编码

接下来进行复现

fat.py启动
在这里插入图片描述
在这里插入图片描述

一共会提示3次firmadyne的密码和1次oit的密码,遇到输入firmadyne的密码时候,我们输入firmadyne,遇到输入oit的密码时,我们输入attify123
在这里插入图片描述

看一下网卡,待会儿我们抓包时需要用到

在这里插入图片描述

接下来启动burp
java -jar /home/oit/tools/burpsuite_free_v1.7.23.jar
火狐访问fat.pyt给出的ip
在这里插入图片描述

默认命令为空,点击login即可进入
然后开始设置代理
来到burp
打开后先恢复初始设置,如图所示
在这里插入图片描述

在火狐处访问192.168.0.1/service.cgi?EVENT=test
此时burp抓到包后修改如图,下图是采用|进行截断
在这里插入图片描述

可以看到repeater返回了路径
再试试使用;截断,来执行ls命令
在这里插入图片描述

repeater返回了命令执行的结果
下图是使用urldencode编码来截断,%26为&
在这里插入图片描述

同样成功了
再试试换行符,其编码为%0a
在这里插入图片描述

同样是可以的
前面试的是event,而在ida分析中我们知道serivce也是可以的,接下来看看service的
在这里插入图片描述

也是同样的截断思路
在这里插入图片描述

在ida分析时我们说过get,post走的路径是一样的,所以这里尝试使用post
现在burp这里把get改为post
在这里插入图片描述

可以看到已经成为post了
在这里插入图片描述

然后使用event来利用
在这里插入图片描述

同样成功了

还可以尝试自己抓包看看,attifyos自带了wireshark
我这里直接给出一个已经抓好的
在这里插入图片描述

跟踪tcp流
可以看到返回的相应就是命令执行后的结果
在这里插入图片描述


参考:
https://www.cnvd.org.cn/flaw/show/CNVD-2018-01084
1.https://packetstormsecurity.com/files/145859/dlinkroutersservice-exec.txt

以上是关于DIR-645远程命令执行漏洞的主要内容,如果未能解决你的问题,请参考以下文章

bash远程命令执行漏洞 怎么修复

远程漏洞远程代码执行漏洞的二三事

远程代码执行漏洞是啥意思

struts2远程命令执行漏洞S2-045

openssh 远程代码执行漏洞 怎么解决

华为路由器远程命令执行漏洞复现(CVE-2017-17215)