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中的正规表达式(二)
Oct 09 PHP
珊瑚虫IP库浅析
Feb 15 PHP
Dedecms常用函数解析
Feb 01 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
php重定向的三种方法分享
Feb 22 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
PHP empty函数报错解决办法
Mar 06 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
php操作redis数据库常见方法实例总结
Feb 20 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
javascript定时变换图片实例代码
2013/03/17 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python学习数据结构实例代码
2015/05/11 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
python中pivot()函数基础知识点
2021/01/03 Python
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
酒店管理专业学生求职信
2013/09/27 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers