安全研究

安全漏洞
PHP session_save_path()绕过safe_mode和open_basedir限制漏洞

发布日期:2010-02-11
更新日期:2010-03-01

受影响系统:
PHP PHP 5.3.x
PHP PHP 5.2.x
不受影响系统:
PHP PHP 5.2.13
描述:
BUGTRAQ  ID: 38182

PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。

用户可通过ini_set()和session_save_path()函数来设置session.save_path。在session.save_path中应存在一个用户保存用户tmp文件的路径,但session.save_path的句法为:

[/PATH]



[N;/PATH]

N可以为字符串(应为数字)

例如:

1. session_save_path("/DIR/WHERE/YOU/HAVE/ACCESS")
2. session_save_path("5;/DIR/WHERE/YOU/HAVE/ACCESS")

如果用户使用了多个“;”字符,就可以创建伪造目录结构减少“../”,绕过safe_mode和open_basedir限制访问其他目录。

<*来源:Grzegorz Stachowiak
  
  链接:http://secunia.com/advisories/38708/
        http://securityreason.com/achievement_securityalert/82
*>

测试方法:

警 告

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

{

session_save_path(";;/byp/;a/../../humhum");
session_start();

}

建议:
厂商补丁:

PHP
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/ext/session/session.c?view=log
http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/ext/session/session.c?view=log

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