找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 812|回复: 0

PHP pear mail包文件读写漏洞

[复制链接]

34

主题

43

回帖

119

牛毛

一级牛人

积分
119
发表于 2009-6-18 10:09:05 | 显示全部楼层 |阅读模式 来自 黑龙江省哈尔滨市
漏洞介绍:PEAR是PHP的官方开源类库, PHP Extension and Application
Repository的缩写。PEAR将PHP程序开发过程中常用的功能编写成类库,涵盖了
页面呈面、数据库访问、文件操作、数据结构、缓存操作、网络协 议等许多方
面,用户可以很方便地使用。它是一个PHP扩展及应用的一个代码仓库,简单地
说,PEAR就是PHP的cpan。但是80sec发现,Pear 的Mail模块存在安全漏洞,某
些情况下将导致用户以webserver权限在主机上读写操作系统任意文件,继而控
制主机执行php代码等。
漏洞分析:PEAR的Mail包错误地使用escapeShellCmd来过滤传入到sendmail命令
的用户参数,用户提交精心构造的参数即可调用sendmail的其他参数,即可在操
作系统上读写任意文件。

Sendmail.php
......
if (!isset($from)) {
return PEAR::raiseError('No from address given.');
} elseif (strpos($from, ' ') !== false ||
strpos($from, ';') !== false ||
strpos($from, '&') !== false ||
strpos($from, '`') !== false) {
return PEAR::raiseError('From address specified with dangerous
characters.');
}
$from = escapeShellCmd($from);
$mail = @popen($this->sendmail_path . (!empty($this->sendmail_args) ?
' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w');
if (!$mail) {
return PEAR::raiseError('Failed to open sendmail [' . $this-
>sendmail_path . '] for execution.’);
}
……可以看到 $from 变量的过滤并不完全,由于escapeShellCmd会将\等字符替
换为空,即可绕过对空格的检查,而escapeshellcmd本身并不检查对于参数的调
用,所以导致安全漏洞的发生。
漏洞测试:
<?php
ini_set('include_path',ini_get
('include_path').':/usr/local/lib/php/PEAR:');
require_once("Mail.php");
$from = "From: " .
此贴转载http://www.bugba.com
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-26 16:50 , Processed in 0.182433 second(s), 33 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表