首页 -> 安全研究

安全研究

安全漏洞
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(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障