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//開源軟件:Vevb.com
- 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'更改為數組,允許泄漏使用重要內存偏移的哈希表.
新聞熱點
疑難解答