PHP Session_Regenerate_ID函數(shù)雙釋放內(nèi)存破壞漏洞
更新時(shí)間:2011年01月27日 21:52:48 作者:
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問(wèn)題,遠(yuǎn)程攻擊者可利用此漏洞對(duì)應(yīng)用程序進(jìn)行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
SEBUG-ID:1491
SEBUG-Appdir:PHP
發(fā)布時(shí)間: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開發(fā)腳本語(yǔ)言。
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問(wèn)題,遠(yuǎn)程攻擊者可利用此漏洞對(duì)應(yīng)用程序進(jìn)行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
session_regenerate_id()函數(shù)最先會(huì)釋放舊的會(huì)話識(shí)別器,然后馬上分配由會(huì)話識(shí)別生成器生成的新值:
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;
}
但是此分配操作不是一個(gè)原子操作。因此可被如內(nèi)存限制沖突操作來(lái)中斷,另外,根據(jù)PHP配置,生成器可觸發(fā)PHP錯(cuò)誤也可導(dǎo)致一個(gè)中斷。
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...");
}
...
通過(guò)注冊(cè)一個(gè)惡意用戶空間錯(cuò)誤處理器可比較容易的利用此問(wèn)題。當(dāng)此處理器調(diào)用一個(gè)HASH表分配到前會(huì)話識(shí)別器相同的地方,然后惡意錯(cuò)誤處理器可以通過(guò)調(diào)用session_id()函數(shù)和分配包含偽造HASH表到HASH表相同地方,這樣來(lái)觸發(fā)另一個(gè)之前的會(huì)話識(shí)別器的釋放操作。當(dāng)用戶錯(cuò)誤處理器完成后會(huì)解構(gòu)覆蓋的HASH表而調(diào)用攻擊者提供的代碼。
http://www.php-security.org/MOPB/MOPB-22-2007.html
測(cè)試方法:
[www.sebug.net]
本站提供程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用,風(fēng)險(xiǎn)自負(fù)!
http://www.php-security.org/MOPB/code/MOPB-22-2007.php
SEBUG安全建議:
目前沒(méi)有解決方案提供:
發(fā)布時(shí)間: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開發(fā)腳本語(yǔ)言。
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問(wèn)題,遠(yuǎn)程攻擊者可利用此漏洞對(duì)應(yīng)用程序進(jìn)行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
session_regenerate_id()函數(shù)最先會(huì)釋放舊的會(huì)話識(shí)別器,然后馬上分配由會(huì)話識(shí)別生成器生成的新值:
復(fù)制代碼 代碼如下:
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;
}
但是此分配操作不是一個(gè)原子操作。因此可被如內(nèi)存限制沖突操作來(lái)中斷,另外,根據(jù)PHP配置,生成器可觸發(fā)PHP錯(cuò)誤也可導(dǎo)致一個(gè)中斷。
復(fù)制代碼 代碼如下:
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...");
}
...
通過(guò)注冊(cè)一個(gè)惡意用戶空間錯(cuò)誤處理器可比較容易的利用此問(wèn)題。當(dāng)此處理器調(diào)用一個(gè)HASH表分配到前會(huì)話識(shí)別器相同的地方,然后惡意錯(cuò)誤處理器可以通過(guò)調(diào)用session_id()函數(shù)和分配包含偽造HASH表到HASH表相同地方,這樣來(lái)觸發(fā)另一個(gè)之前的會(huì)話識(shí)別器的釋放操作。當(dāng)用戶錯(cuò)誤處理器完成后會(huì)解構(gòu)覆蓋的HASH表而調(diào)用攻擊者提供的代碼。
http://www.php-security.org/MOPB/MOPB-22-2007.html
測(cè)試方法:
[www.sebug.net]
本站提供程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用,風(fēng)險(xiǎn)自負(fù)!
http://www.php-security.org/MOPB/code/MOPB-22-2007.php
SEBUG安全建議:
目前沒(méi)有解決方案提供:
您可能感興趣的文章:
相關(guān)文章
PHP把空格、換行符、中文逗號(hào)等替換成英文逗號(hào)的正則表達(dá)式
這篇文章主要介紹了PHP把空格、換行符、中文逗號(hào)等替換成英文逗號(hào)的正則表達(dá)式,需要的朋友可以參考下2014-05-05php網(wǎng)頁(yè)標(biāo)題中文亂碼的有效解決方法
測(cè)試了php的網(wǎng)頁(yè)發(fā)現(xiàn)標(biāo)題中文亂碼,在網(wǎng)上搜索了下面的解決方法,需要的朋友可以參考下2014-03-03修改php.ini不生效問(wèn)題解決方法(上傳大于8M的文件)
上傳大于8M的文件需要修改php的配置才可以生效,搜索好多的參考資料,結(jié)果修改還是沒(méi)有生效,經(jīng)過(guò)一番折騰終于找到了解決方法,下面與大家分享了2013-06-06php數(shù)組函數(shù)array_key_exists()小結(jié)
本文給大家匯總介紹了php數(shù)組函數(shù)array_key_exists()的相關(guān)知識(shí)以及與in_array的性能對(duì)比,與isset的區(qū)別分析,非常的詳細(xì),有需要的小伙伴可以參考下。2015-12-12php提交post數(shù)組參數(shù)實(shí)例分析
這篇文章主要介紹了php提交post數(shù)組參數(shù)的用法,結(jié)合實(shí)例分析了php使用post進(jìn)行參數(shù)提交的相關(guān)技巧,需要的朋友可以參考下2015-12-12PHP編程實(shí)現(xiàn)的TCP服務(wù)端和客戶端功能示例
這篇文章主要介紹了PHP編程實(shí)現(xiàn)的TCP服務(wù)端和客戶端功能,結(jié)合實(shí)例形式分析了php基于socket實(shí)現(xiàn)TCP服務(wù)器端與客戶端通信功能的相關(guān)配置、定義與使用技巧,需要的朋友可以參考下2018-04-04