PHP Session_Regenerate_ID函數(shù)雙釋放內(nèi)存破壞漏洞
更新時間:2011年01月27日 21:52:48 作者:
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問題,遠(yuǎn)程攻擊者可利用此漏洞對應(yīng)用程序進行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
SEBUG-ID:1491
SEBUG-Appdir:PHP
發(fā)布時間: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ā)腳本語言。
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問題,遠(yuǎn)程攻擊者可利用此漏洞對應(yīng)用程序進行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
session_regenerate_id()函數(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;
}
但是此分配操作不是一個原子操作。因此可被如內(nèi)存限制沖突操作來中斷,另外,根據(jù)PHP配置,生成器可觸發(fā)PHP錯誤也可導(dǎo)致一個中斷。
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...");
}
...
通過注冊一個惡意用戶空間錯誤處理器可比較容易的利用此問題。當(dāng)此處理器調(diào)用一個HASH表分配到前會話識別器相同的地方,然后惡意錯誤處理器可以通過調(diào)用session_id()函數(shù)和分配包含偽造HASH表到HASH表相同地方,這樣來觸發(fā)另一個之前的會話識別器的釋放操作。當(dāng)用戶錯誤處理器完成后會解構(gòu)覆蓋的HASH表而調(diào)用攻擊者提供的代碼。
http://www.php-security.org/MOPB/MOPB-22-2007.html
測試方法:
[www.sebug.net]
本站提供程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用,風(fēng)險自負(fù)!
http://www.php-security.org/MOPB/code/MOPB-22-2007.php
SEBUG安全建議:
目前沒有解決方案提供:
發(fā)布時間: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ā)腳本語言。
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問題,遠(yuǎn)程攻擊者可利用此漏洞對應(yīng)用程序進行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
session_regenerate_id()函數(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;
}
但是此分配操作不是一個原子操作。因此可被如內(nèi)存限制沖突操作來中斷,另外,根據(jù)PHP配置,生成器可觸發(fā)PHP錯誤也可導(dǎo)致一個中斷。
復(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...");
}
...
通過注冊一個惡意用戶空間錯誤處理器可比較容易的利用此問題。當(dāng)此處理器調(diào)用一個HASH表分配到前會話識別器相同的地方,然后惡意錯誤處理器可以通過調(diào)用session_id()函數(shù)和分配包含偽造HASH表到HASH表相同地方,這樣來觸發(fā)另一個之前的會話識別器的釋放操作。當(dāng)用戶錯誤處理器完成后會解構(gòu)覆蓋的HASH表而調(diào)用攻擊者提供的代碼。
http://www.php-security.org/MOPB/MOPB-22-2007.html
測試方法:
[www.sebug.net]
本站提供程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用,風(fēng)險自負(fù)!
http://www.php-security.org/MOPB/code/MOPB-22-2007.php
SEBUG安全建議:
目前沒有解決方案提供:
相關(guān)文章
php頁面跳轉(zhuǎn)代碼 輸入網(wǎng)址跳轉(zhuǎn)到你定義的頁面
我先判斷一下你是否開啟了https,如果是就正常的https頁面,如果沒有開始則跳轉(zhuǎn)到項目的目錄下面,感興趣的朋友可以參考下哈,希望對你有所幫助2013-03-03
PHP中explode函數(shù)和split函數(shù)的區(qū)別小結(jié)
相信大家都知道,explode和split在php中都是可以通過特定字符把字符串轉(zhuǎn)換成數(shù)組的,那么explode和split既然是一樣的為什么會有兩個函數(shù)呢,那么explode和split的區(qū)別在哪里呢,下面跟著小編我們一起來看看。2016-08-08
PHP實現(xiàn)查詢兩個數(shù)組中不同元素的方法
這篇文章主要介紹了PHP實現(xiàn)查詢兩個數(shù)組中不同元素的方法,涉及PHP數(shù)組差集運算與數(shù)組合并的相關(guān)技巧,需要的朋友可以參考下2016-02-02

