zoukankan      html  css  js  c++  java
  • CTF经典题型 md5()函数数组绕过

    下面是php源码

    <?

    include_once “flag.php”;
    ini_set(“display_errors”, 0);
    $str = strstr($_SERVER[‘REQUEST_URI’], ‘?’);
    $str = substr($str,1);
    $str = str_replace(‘key’,”,$str);
    parse_str($str);
    echo md5($key1);

    echo md5($key2);
    if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag.”取得flag”;
    }
    ?>

    //意思是将get的两个参数中的key替换为空(这里可以用kekeyy绕过),然后对key1,key2的值进行md5加密,并进行比较,

    //如果md5加密的值一样而未加密的值不同,就输出flag.

    有两种方法绕过:

    1,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

    2,利用==比较漏洞

    如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

    下列的字符串的MD5值都是0e开头的:

    QNKCDZO

    240610708

    s878926199a

    s155964671a

    s214587387a

    s214587387a

    参考https://blog.csdn.net/zpy1998zpy/article/details/80582974

  • 相关阅读:
    msp430入门编程25
    msp430入门编程24
    msp430入门编程23
    msp430入门编程22
    msp430入门编程21
    msp430入门编程20
    msp430入门编程16
    msp430入门编程15
    msp430入门编程14
    msp430入门编程13
  • 原文地址:https://www.cnblogs.com/threesoil/p/11153063.html
Copyright © 2011-2022 走看看