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 相关文章推荐
一个简单的自动发送邮件系统(二)
Oct 09 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
php递归实现无限分类的方法
Jul 28 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 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
eAccelerator的安装与使用详解
2013/06/13 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
播音主持专业个人自我评价
2014/01/09 职场文书
办理护照介绍信
2014/01/16 职场文书
优秀干部获奖感言
2014/01/31 职场文书
政风行风评议工作总结
2014/10/21 职场文书
综合实践活动报告
2015/02/05 职场文书
中标通知书格式
2015/04/17 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
什么是css原子化,有什么用?
2022/04/24 HTML / CSS
python区块链实现简版工作量证明
2022/05/25 Python