PHP弱类型记录

本文探讨了PHP中MD5的弱类型特性如何导致0e开头字符串的意外匹配,以及strcmp、json_decode和array_search等函数的漏洞利用技巧。通过实例展示了如何利用这些漏洞进行字符串比较和数组操作的绕过,适合理解类型安全在PHP中的重要性。
摘要由CSDN通过智能技术生成

记录

PHP弱类型 md5为0e开头的字符串

QNKCDZO
0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020
  
s155964671a
0e342768416822451524974117254469
  
s214587387a
0e848240448830537924465865611904
  
s214587387a
0e848240448830537924465865611904
  
s878926199a
0e545993274517709034328855841020
  
s1091221200a
0e940624217856561557816327384675
  
s1885207154a
0e509367213418206700842008763514

strcmp漏洞绕过 php -v <5.3

<?php
    $password="***************"
     if(isset($_POST['password'])){

        if (strcmp($_POST['password'], $password) == 0) {
            echo "Right!!!login success";n
            exit();
        } else {
            echo "Wrong password..";
        }
?>

strcmp是比较两个字符串,如果str1<str2 则返回<0 如果str1大于str2返回>0 如果两者相等 返回0。
我们是不知道 p a s s w o r d 的 值 的 , 题 目 要 求 s t r c m p 判 断 的 接 受 的 值 和 password的值的,题目要求strcmp判断的接受的值和 passwordstrcmppassword必需相等,strcmp传入的期望类型是字符串类型,如果传入的是个数组会怎么样呢
我们传入 password[]=xxx 可以绕过 是因为函数接受到了不符合的类型,将发生错误,但是还是判断其相等
payload: password[]=xxx

json绕过

<?php
if (isset($_POST['message'])) {
    $message = json_decode($_POST['message']);
    $key ="*********";
    if ($message->key == $key) {
        echo "flag";
    } 
    else {
        echo "fail";
    }
 }
 else{
     echo "~~~~";
 }
?>

输入一个json类型的字符串,json_decode函数解密成一个数组,判断数组中key的值是否等于 k e y 的 值 , 但 是 key的值,但是 keykey的值我们不知道,但是可以利用0=="admin"这种形式绕过

最终payload message={“key”:0}

array_search is_array绕过

<?php
if(!is_array($_GET['test'])){exit();}
$test=$_GET['test'];
for($i=0;$i<count($test);$i++){
    if($test[$i]==="admin"){
        echo "error";
        exit();
    }
    $test[$i]=intval($test[$i]);
}
if(array_search("admin",$test)===0){
    echo "flag";
}
else{
    echo "false";
}
?>

上面是自己写的一个,先判断传入的是不是数组,然后循环遍历数组中的每个值,并且数组中的每个值不能和admin相等,并且将每个值转化为int类型,再判断传入的数组是否有admin,有则返回flag

payload test[]=0可以绕过

下面是官方手册对array_search的介绍

mixed array_search ( mixed $needle , array $haystack [, bool $strict =
false ] ) n e e d l e , needle, needlehaystack必需, s t r i c t 可 选 函 数 判 断 strict可选 函数判断 stricthaystack中的值是存在$needle,存在则返回该值的键值 第三个参数默认为false,如果设置为true则会进行严格过滤

 <?php
 $a=array(0,1);
 var_dump(array_search("admin",$a)); // int(0) => 返回键值0
 var_dump(array_seach("1admin",$a));  // int(1) ==>返回键值1
 ?>

array_search函数 类似于== 也就是 a = = " a d m i n " 当 然 是 a=="admin" 当然是 a=="admin"a=0 当然如果第三个参数为true则就不能绕过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值