PHP PEAR Mail包任意文件读写漏洞
添加时间:
2009-05-08
系统编号:
WAVDB-01402
影响版本:
PHP PEAR Mail
程序介绍:
可以看到 $from 变量的过滤并不完全,由于escapeShellCmd会将\等字符替换为空,即可绕过对空格的检查,而escapeshellcmd本身并不检查对于参数的调用,所以导致安全漏洞的发生。
漏洞利用:
解决方案:
厂商补丁:
PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.php.net
信息来源:
<* 来源:鬼仔'S Blog
连接:http://huaidan.org/archives/3064.html *>
2009-05-08
系统编号:
WAVDB-01402
影响版本:
PHP PEAR Mail
程序介绍:
PEAR是PHP的官方开源类库, PHP Extension and Application Repository的缩写。PEAR将PHP程序开发过程中常用的功能编写成类库,涵盖了页面呈面、数据库访问、文件操作、数据结构、缓存操作、网络协 议等许多方面,用户可以很方便地使用。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR就是PHP的cpan。
漏洞分析:
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 . (!emptyempty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w');
- if (!$mail) {
- return PEAR::raiseError('Failed to open sendmail [' . $this->sendmail_path . '] for execution.’);
- }
- ……
漏洞利用:
- <?php
- ini_set('include_path',ini_get('include_path').':/usr/local/lib/php/PEAR:');
- require_once("Mail.php");
- $from = "From: " . $_REQUEST['email'] . “\r\n”;
- $to = “xxxxxxx@zzzz.com”;
- $subj = “subscription request”;
- $body = “subscribe me”;
- $hdrs = array(
- “To” => $to,
- “Cc” => $cc,
- “Bcc” => $bcc,
- “From” => $from,
- “Subject” => $subject,
- );
- $body=”test”;
- $mail =& Mail::factory(’sendmail’);
- $mail->send($to, $hdrs, $body);
- ?>
解决方案:
厂商补丁:
PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.php.net
信息来源:
<* 来源:鬼仔'S Blog
连接:http://huaidan.org/archives/3064.html *>