PHP-Nuke帐号可劫持漏洞
发布日期:2002-03-18
更新日期:2002-03-22
受影响系统:Francisco Burzi PHP-Nuke 5.4
Francisco Burzi PHP-Nuke 5.3.1
Francisco Burzi PHP-Nuke 5.2a
Francisco Burzi PHP-Nuke 5.2
Francisco Burzi PHP-Nuke 5.1
Francisco Burzi PHP-Nuke 5.0.1
Francisco Burzi PHP-Nuke 5.0
Francisco Burzi PostNuke 0.70
Francisco Burzi PostNuke 0.64
Francisco Burzi PostNuke 0.63
Francisco Burzi PostNuke 0.62
不受影响系统:Francisco Burzi PostNuke 0.71
描述:
BUGTRAQ ID:
4302
PHP-Nuke是一款基于WEB的系统构建程序,可以运行在Unix和Linux操作系统下,也可运行在Microsoft Windows操作系统平台下。
PHP-Nuke存在设计漏洞,可导致远程攻击者通过构建伪造的Cookie来访问其他帐户的信息。
漏洞存在于如下代码中:
modules/News/article.php:
if ($save AND is_user($user)) {
cookiedecode($user);
sql_query("update ".$user_prefix."_users set umode='$mode', uorder='$order', thold='$thold' where uid='$cookie[0]'", $dbi);
getusrinfo($user);
$info = base64_encode("$userinfo[uid]:$userinfo[uname]:$userinfo[pass]:$userinfo[storynum]:$userinfo[umode]:$userinfo[uorder]:$userinfo[thold]:$userinfo[noscore]");
setcookie("user","$info",time()+$cookieusrtime);
}
此代码检查用户是否登陆和允许用户改变他的mode、order、thold等操作,然后代码把修改数据返回。
由于代码通过is_user来检查是否用户登陆,但是它使用getusrinfo来发送数据返回,is_user函数通过UID和密码匹配来检查cookie,而getusrinfo通过使用USERNAME和密码来获得数据,而且getusrinfo使用了不安全的SQL调用。
因此通过指定合法UID和PASSWORD组合来通过is_user检查和他的用户名可以不需要任何验证传递给不安全SQL调用,通过指定特殊构造的用户名可以欺骗SQL调用并返回其他用户的数据。
<*来源:Handle Nopman (
nopman@hackermail.com)
链接:
http://archives.neohapsis.com/archives/bugtraq/2002-03/0199.html
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
Handle Nopman (
nopman@hackermail.com)提供了如下测试方法:
要利用这个漏洞,需要在目标系统上建立一个帐户,使用base64方式解码cookie,在COOKIE中修改用户名插入到SQL中,再以base64编码方式编码COOKIE并以save=1传递给article.php.
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
暂时没有合适的临时解决方法。
厂商补丁:
Francisco Burzi
---------------
PostNuke 0.71已经修复了此安全问题,请到如下地址下载:
PostNuke Upgrade PostNuke 0.71
http://www.postnuke.com/modules.php?op=modload&name=Downloads&file=index&req=getit&lid=169浏览次数:3981
严重程度:0(网友投票)