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 获得汉字拼音首字母的函数
Aug 01 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
PHP include_path设置技巧分享
Jul 03 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 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
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP实现倒计时功能
2020/11/16 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
js实现飞入星星特效代码
2014/10/17 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
scrapy爬虫实例分享
2017/12/28 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
python3中数组逆序输出方法
2020/12/01 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
教师个人自我鉴定
2014/02/08 职场文书
预备党员表决心书
2014/03/11 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
见习报告格式要求
2014/11/04 职场文书
与死神共舞观后感
2015/06/15 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技