php教程 substr_replace替換指定位置字符與內存破壞漏洞
提示和注釋
注釋:如果 start 是負數且 length 小於等於 start,則 length 為 0。
$username = "zongzi";
echo substr_replace($username,'**','1','2');
定義和用法
substr_replace() 函數把字符串的一部分替換為另一個字符串。
語法
substr_replace(string,replacement,start,length)參數 描述
string 必需。規定要檢查的字符串。
replacement 必需。規定要插入的字符串。
start 必需。規定在字符串的何處開始替換。
正數 - 在第 start 個偏移量開始替換
負數 - 在從字符串結尾的第 start 個偏移量開始替換
0 - 在字符串中的第一個字符處開始替換
charlist 可選。規定要替換多少個字符。
正數 - 被替換的字符串長度
負數 - 從字符串末端開始的被替換字符數
0 - 插入而非替換
功能同 php的substr_replace()
'參數:被替換的內容,替換內容,起始位,替換長度
function substr_replace(sourcecon,repcon,startx,lenx)
dim reped
reped = mid(sourcecon,startx,lenx) '取出原內容同樣長度
dim scleftx,scleft
scleftx = startx-1
if scleftx<1 then
scleft = ""
else
scleft = left(sourcecon,scleftx)
end if
substr_replace = replace(sourcecon,reped,repcon,startx,1)
substr_replace = scleft&substr_replace
end function
()中斷內存破壞漏洞
bugraq id:
cve id:cve-2010-2190
cncve id:cncve-20102190
漏洞發布時間:2010-05-31
漏洞更新時間:2010-06-28
漏洞起因
設計錯誤
危險等級
低
影響系統
php 5.2 <= 5.2.13
php 5.3 <= 5.3.2
不受影響系統
危害
遠程攻擊者可以利用漏洞洩漏敏感信息。
攻擊所需條件
攻擊者必須訪問使用substr_replace()函數的應用程序。
漏洞信息
php是一款流行的網絡編程語言。
php的substr_replace()函數存在信息洩漏問題:
php_function(substr_replace)
{
...
if (zend_parse_parameters(zend_num_args() tsrmls_cc, "zzz|z", &str, &repl, &from, &len) == failure) {
return;
}
if (z_type_pp(str) != is_array) {
convert_to_string_ex(str);
}
if (z_type_pp(repl) != is_array) {
convert_to_string_ex(repl);
}
if (z_type_pp(from) != is_array) {
convert_to_long_ex(from);
}
if (argc > 3) {
separate_zval(len);
if (z_type_pp(len) != is_array) {
convert_to_long_ex(len);
l = z_lval_pp(len);
}
} else {
if (z_type_pp(str) != is_array) {
l = z_strlen_pp(str);
}
}
if (z_type_pp(str) == is_string) {
if (
(argc == 3 && z_type_pp(from) == is_array) ||
(argc == 4 && z_type_pp(from) != z_type_pp(len))
) {
php_error_docref(null tsrmls_cc, e_warning, "'from' and 'len' should be of same type - numerical or array ");
return_stringl(z_strval_pp(str), z_strlen_pp(str), 1);
}
使用不同類型的‘from’和'len'參數調用substr_replace()函數,會觸發e_warning錯誤。如果php沒有刪除調用時通過引用傳遞功能,用戶空間錯誤處理器會使用這個中斷更改'str'參數類型。如果'str'類型更改為整數類型可導致洩漏任意內存,如果'str'更改為數組,允許洩漏使用重要內存偏移的哈希表。