md5比较绕过

MD5绕过

一位大佬写的非常好的文章md5绕过 - Yolololololo - 博客园

一、弱比较

双md5碰撞绕过

if($a != KaTeX parse error: Expected 'EOF', got '&' at position 3: b &̲& md5(a) == md5($b))的绕过
  • 在PHP中 0e开头表示为科学计数法 0e后面的字母 会被当作零处理
    
  • 字符串的MD5值为0e开头

    QLTHNDT
    QNKCDZO
    PJNPDWY
    NWWKITQ
    NOOPCJF 
    MMHUWUV
    MAUXXQC
    240610708
    s878926199a
    s155964671a
    s214587387a
    0e215962017
    0e1284838308
    
  • 使md5($a)==md5(md5($b))的值为0e,只要使md5($b)的值也为0e,就绕过

  • 找一个 值为0e开头,md5值也为0e开头的

if (md5( G E T [ ′ a ′ ] ) = = m d 5 ( _GET['a']) == md5( GET[a])==md5(__GET[‘b’]))
  • 同理0e绕过

二、强比较

if(md5((string) G E T [ ′ a ′ ] ) = = = m d 5 ( ( s t r i n g ) _GET['a'])===md5((string) GET[a])===md5((string)__GET[‘b’]))
  • 可以利用数组绕过
var_dump(md5([1,2,3])==md5([4,5,6]));


var_dump(md5($_GET['a'])==md5($_GET['b']));


?a[]=1&b[]



  • md5中需要的是一个string参数,但是当你传入一个array(数组)是,md5()是不会报错的,只是无法求出array的md5的值,这样就会导致任意的2个array的md5的值都会相等

  • 具体代码

    md51[]=1&md52[]=a
    h
    $a = array(1,2,3);
    $b = array(4,5,6);
    

    PHP8 不允许在 md5() 函数中使用数组。

你可能感兴趣的:(linux,运维,服务器,网络安全)