CNVD-2018-01084-Dlink远程命令执行漏洞
本文最后更新于:2023年7月4日 下午
CNVD-2018-01084-Dlink远程命令执行漏洞
CNVD-2018-01084是D-Link DIR 615/645/815路由器1.03及之前的固件版本存在远程命令执行漏洞。该漏洞是由于service.cgi中拼接了HTTP POST请求中的数据,造成后台命令拼接,导致可执行任意命令。
漏洞分析
固件分析
由CNVD可知,漏洞点在service.cgi
中,我们直接分析servicecgi_main
即可。
servicecgi_main
首先,获取环境变量REQUEST_METHOD
的值,若为post请求,则顺序执行;若为get请求,则跳转到LABEL_10,会直接越过了漏洞点,所以我们需要执行post请求。
接着,调用cgibin_parse_request
函数,该函数已经在笔者上一篇文章中分析过了,就不再赘述了。
这里,我们主要看看sub_40A63C
这个函数。当URI参数被解析后,调用该函数对off_42c120
进行初始化。
我们再看看sub_403b10
函数。
这个函数也很简单,判断**application/**类型,若是匹配上了调用sub_203ffc
函数。
sub_203ffc
函数应该是获取post请求的内容,同时调用sub_402b40
对输入的内容进行划分。需要注意的是这里也会对off_42c120
进行初始化。
让我们回到主函数里面。接着,会调用sess_ispoweruser
进行用户判断。
这个函数仅仅是对sess_validate
函数的简单封装。
sess_validate
函数会打开sesscfg,session%d等大量session文件,直到匹配为止。
这里模拟的固件一般不具备seesion,我们把这个函数判断patch掉即可。
之后会调用sub_40A1C0
匹配EVENT、ACTION与SERVICE。
这个函数也比较简单,就是对我们输入内容与EVENT等进行匹配。若匹配上,则返回输入的内容。
最后,执行lxmldbc_system
函数,也就是可以命令注入的函数。
该函数就是将我们的输入复制到acStack_40c变量中,然后执行。
这里并未对输入进行过滤,也就是存在任意命令执行漏洞。
至此,分析完毕。
漏洞复现
根据上面分析,可知这里存在两条执行路径。
第一条,利用URI进行任意命令执行
1 |
|
第二条,通过post请求输入内容进行任意命令执行
1 |
|
同时,也可以看到,我们post输入的内容是可以覆盖URI的。与上面的分析也不谋而合。
这里,我们使用调试查看命令执行过程。
至此,漏洞复现完毕。
参考文章: