PHP 函数漏洞总结

本文总结了PHP中常见的函数漏洞,包括MD5 compare漏洞、ereg函数00截断、变量覆盖、strcmp行为、is_numeric判断、preg_match正则匹配、parse_str解析、switch类型转换、serialize与unserialize漏洞及session反序列化等,详细阐述了这些漏洞的原理和可能的利用方式。
摘要由CSDN通过智能技术生成

1.MD5 compare漏洞

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。 
常见的payload有

0x01 md5(str)
    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s214587387a
    s214587387a     sha1(str)
    sha1('aaroZmOk')  
    sha1('aaK1STfY')
    sha1('aaO8zKZF')
    sha1('aa3OFF9m')0x02 md5(md5(str)."SALT")
    2123456789101112131415

同时MD5不能处理数组,若有以下判断则可用数组绕过

if(@md5($_GET['a']) == @md5($_GET['b']))
{    echo "yes";
}//http://127.0.0.1/1.php?a[]=1&b[]=212345

2.ereg函数漏洞:00截断

ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE1

字符串对比解析 
在这里如果 $_GET[‘password’]为数组,则返回值为NULL 
如果为123 || asd || 12as || 123%00&&&**,则返回值为true 
其余为false

3.变量本身的key

说到变量的提交很多人只是看到了GET/POST/COOKIE等提交的变量的值,但是忘记了有的程序把变量本身的key也当变量提取给函数处理。

    <?php

    //key.php?aaaa'aaa=1&bb'b=2 

    //print_R($_GET); 

     foreach ($_GET AS $key => $value)

    {            print $key."\n";

    }    ?>123456789101112131415

4.变量覆盖

extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指定函数可以导致变量覆盖

<?php  
    $auth = '0';  
    // 这里可以覆盖$auth的变量值
    extract($_GET); 
    if($auth == 1){  
        echo "private!";  
    } else{  
        echo "public!";  
    }  
?>12345678910
<?php  $a='hi';foreach($_GET as $key => $value) {        echo $key;        $$key = $value;
}print $a;?>123456789

5.strcmp

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 
5.2 中是将两个参数先转换成string类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值