bluecms
BlueCMS是一款專注於地方門戶網站建設解決方案,基於PHP+MySQL的技術開發,全部源碼開放。
復現版本爲bluecmsv1.6版本,各位可自行下載。
代碼審計
先使用Seay工具審計一波,根據關鍵代碼回溯。
工具顯示comment.php獲取ip地址可僞造,我們打開代碼所在php文件進一步查看。
關鍵代碼:
$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check)
VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";
$db->query($sql);
我們可以看到ip值通過getip()函數直接獲取,帶入sql語句執行。
去到getip()函數處,沒有過濾,可進行僞造。
function getip()
{
if (getenv('HTTP_CLIENT_IP'))
{
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR'))
{
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED'))
{
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR'))
{
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED'))
{
$ip = getenv('HTTP_FORWARDED');
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
漏洞復現
漏洞出現在新聞的評論處,後臺發表一個新聞,註冊一個用戶去評論。
使用burp抓包,發送到repeater模塊。
修改一下源代碼,讓sql語句顯示出來,我們好分析。
$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check)
VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";
$db->query($sql);
echo $sql;
exit();
正常go一下,查看返回的sql語句。
嘗試僞造一下ip,查看返回的sql語句。
CLIENT-IP: 8.8.8.8
不出所料的僞造成功了,放入sqlmap去跑就完事了。