php substr_replace替换指定位置字符与内存破坏漏洞

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'更改为数组,允许泄漏使用重要内存偏移的哈希表。

时间: 2024-09-24 01:59:36

php substr_replace替换指定位置字符与内存破坏漏洞的相关文章

c#-C#字符串中替换指定位置指定长度的子字符串

问题描述 C#字符串中替换指定位置指定长度的子字符串 例如字符串"1abc23abc2abc"要求替换第6位开始长度为3的子字符串"abc"替换为"def"求大神解答,感谢 解决方案 s = "1abc23abc2abc"; s = s.SubString(0, 3) + "def" + s.SubString(6); 解决方案二: public static string Replace(string s

JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)_基础知识

JavaScript charCodeAt 方法 charCodeAt 方法用于从字符串中取得指定位置字符的 Unicode 编码.其语法如下: 复制代码 代码如下: str_object.charCodeAt( x ) 参数说明: 参数 说明 str_object 要操作的字符串(对象) x 必需.表示位置的数字 提示:字符串是从 0 开始计数的. charCodeAt 方法实例 复制代码 代码如下: <script language="JavaScript"> docu

DHCPv6协议中的Dibbler多个内存破坏漏洞

发布日期:2007-09-19 更新日期:2007-09-19 受影响系统: Dibbler Dibbler 0.6 不受影响系统: Dibbler Dibbler 0.6.1 描述: BUGTRAQ ID: 25726 Dibbler是一种可移植的DHCPv6协议实现. Dibbler在处理带有畸形数据的报文时存在多个内存破坏漏洞,远程攻击者可能利用这些漏洞导致服务崩溃或控制服务器. Dibbler在处理带有超长长度值的选项.无效长度或畸形IA_NA选项的报文请求时存在内存破坏问题,可以导致堆

绿盟科技互联网安全威胁周报2016.22 Office内存破坏漏洞危害范围广泛

绿盟科技发布了本周安全通告,周报编号NSFOCUS-16-22,本次周报建议大家关注Office内存破坏漏洞,该漏洞危及大多数Offcie版本,将可能导致攻击者远程执行代码.绿盟科技漏洞库本周新增52条,其中高危34条. 焦点漏洞 漏洞描述:Microsoft Office内存破坏漏洞(CVE-2016-3313) NSFOCUS ID:34524 CVE ID:CVE-2016-3313 漏洞点评 在Microsoft Office 2007 SP3, 2010 SP2, 2013SP1, 2

PHP substr_replace 替换字符串指定位置字符

/* int mb_strlen ( string $str [, string $encoding ] )  代码如下 复制代码 <?php教程 echo substr_replace("Hello world","earth",6); Hello earth ?> 值得一提的,当开始和长度都是负和,长度小于或等于开始,长度将有被设置为0的效果.  代码如下 复制代码 <?php substr_replace('eggs','x',-1,-1);

请用charAt获取javascript获取字符串指定位置字符

问题比较简单,直接上代码: var str = "abc"; alert(str[0]); alert(str.charAt(0));   测试结果: firefox:a,a chrome:a,a ie9:a,a ie8:a,a ie7:undefined,a ie6:undefined,a   总结:获取字符串指定位置的字符,需用charAt,除非不考虑兼容ie6.ie7

js替换字符串中所有指定的字符(实现代码)_javascript技巧

第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志). replace() The replace() method returns the string that results when you replace text matching its first argumen

利用内存破坏实现python沙盒逃逸

几周之前心痒难耐的我参与了一段时间的漏洞赏金计划.业余这个漏洞赏金游戏最艰巨的任务就是挑选一个能够获得最高回报的程序.不久我就找到一个存在于Python沙盒中执行的用户提交代码的Web应用程序的bug,这看起来很有趣,所以我决定继续研究它. 进过一段时间的敲打之后,我发现了在Python层实现沙盒逃逸的方法.报告归档了,漏洞几天内及时被修复,得到了一笔不错的赏金.完美!这是一个我的漏洞赏金征程的完美开端.但这篇博文不是关于这篇报告的.总之,从技术的角度来说我发现这个漏洞的过程并不有趣.事实证明回

绿盟科技互联网安全威胁周报2016.30 需要尽快修补OpenSSH内存耗尽漏洞

绿盟科技发布了本周安全通告,周报编号NSFOCUS-16-29,绿盟科技漏洞库本周新增75条,其中高危41条.本次周报建议大家关注持续关注 OpenSSH内存耗尽漏洞 CVE-2016-8858,目前目前官方已经给出修复方案,强烈建议用户检查自己使用的OpenSSH是否受影响,如果是,尽快修复. 焦点漏洞 OpenSSH内存耗尽漏洞 NSFOCUS ID: 35262 CVE ID: CVE-2016-8858 受影响版本 OpenSSH 6.8-7.3 漏洞点评 OpenSSH是SSH(Sec