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

雨落亭博客链接

原文地址:https://www.cnblogs.com/yuluoluo/p/9782327.html