PHP Session_Regenerate_ID函数双释放内存破坏漏洞


Posted in PHP onJanuary 27, 2011
SEBUG-ID:1491
SEBUG-Appdir:PHP
发布时间:2007-03-17
影响版本:
PHP PHP 5.2.1
PHP PHP 5.1.6
PHP PHP 5.1.5
PHP PHP 5.1.4
PHP PHP 5.1.3
PHP PHP 5.1.3
PHP PHP 5.1.2
PHP PHP 5.1.1
PHP PHP 5.1
PHP PHP 5.0.5
PHP PHP 5.0.4
PHP PHP 5.0.3
+ Trustix Secure Linux 2.2
PHP PHP 5.0.2
PHP PHP 5.0.1
PHP PHP 5.0 candidate 3
PHP PHP 5.0 candidate 2
PHP PHP 5.0 candidate 1
PHP PHP 5.0 .0
PHP PHP 5.2
漏洞描述:
PHP是一款广泛使用的WEB开发脚本语言。
PHP Session_Regenerate_ID函数存在双释放内容破坏问题,远程攻击者可利用此漏洞对应用程序进行拒绝服务攻击,可能导致任意指令执行。
session_regenerate_id()函数最先会释放旧的会话识别器,然后马上分配由会话识别生成器生成的新值:
PHP_FUNCTION(session_regenerate_id) 
{ 
... 
if (PS(id)) { 
... 
efree(PS(id)); 
} 
PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC); 
PS(send_cookie) = 1; 
php_session_reset_id(TSRMLS_C); 
RETURN_TRUE; 
} 
RETURN_FALSE; 
}

但是此分配操作不是一个原子操作。因此可被如内存限制冲突操作来中断,另外,根据PHP配置,生成器可触发PHP错误也可导致一个中断。
PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS) 
{ 
... 
switch (PS(hash_func)) { 
... 
default: 
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function"); 
efree(buf); 
return NULL; 
} 
... 
if (PS(hash_bits_per_character) < 4 
|| PS(hash_bits_per_character) > 6) { 
PS(hash_bits_per_character) = 4; 
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ini setting hash_bits_per_character..."); 
} 
...

通过注册一个恶意用户空间错误处理器可比较容易的利用此问题。当此处理器调用一个HASH表分配到前会话识别器相同的地方,然后恶意错误处理器可以通过调用session_id()函数和分配包含伪造HASH表到HASH表相同地方,这样来触发另一个之前的会话识别器的释放操作。当用户错误处理器完成后会解构覆盖的HASH表而调用攻击者提供的代码。
http://www.php-security.org/MOPB/MOPB-22-2007.html
测试方法:
[www.sebug.net]
本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
http://www.php-security.org/MOPB/code/MOPB-22-2007.php
SEBUG安全建议:
目前没有解决方案提供:
PHP 相关文章推荐
php实现jQuery扩展函数
Oct 30 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php实现字符串反转输出的方法
Mar 14 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
PHP实现动态web服务器方法
Jul 29 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
php进行md5加密简单实例方法
Sep 19 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 #PHP
PHP中删除变量时unset()和null的区别分析
Jan 27 #PHP
PHP企业级应用之常见缓存技术篇
Jan 27 #PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 #PHP
discuz的php防止sql注入函数
Jan 17 #PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 #PHP
php短域名转换为实际域名函数
Jan 17 #PHP
You might like
PHP实现加密的几种方式介绍
2015/02/22 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
用python写asp详细讲解
2013/12/16 Python
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python多线程编程简单介绍
2015/04/13 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
学python安装的软件总结
2019/10/12 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
演讲比赛获奖感言
2014/02/02 职场文书
党课培训心得体会
2014/09/02 职场文书
2014年仓库工作总结
2014/11/20 职场文书
实习介绍信范文
2015/05/05 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS