1. 程式人生 > 實用技巧 >BugkuCTF WEB writeup-備份是個好習慣(80)

BugkuCTF WEB writeup-備份是個好習慣(80)

備份是個好習慣(80):http://123.206.87.240:8002/web16/

開啟就一串編碼。

原始碼什麼都沒有,嘗試各種解碼都沒用。

遂谷歌。知道了index.php.bak是備份檔案,下載開啟後。原始碼出來了

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);  //ini_set用來設定php.ini的值,在函式執行的時候生效,指令碼結束後,設定失效  ‘display_errors':設定錯誤資訊的類別。
$str = strstr($_SERVER['REQUEST_URI'], '?');//返回 "?" 及以後的字串
$str = substr($str,1);  //返回第2個及以後的字串
$str = str_replace('key','',$str);//把$str裡的key換成空
parse_str($str);  //查詢字串解析到變數中
echo md5($key1);  //

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

最後的if語句表示 md5加密後相等,未加密之前不相等。

但是我想不到有什麼值,看別人的:

1,md5()函式無法處理陣列,如果傳入的為陣列,會返回NULL,所以兩個陣列經過加密後得到的都是NULL,也就是相等的。

2,利用==比較漏洞

如果兩個字元經MD5加密後的值為 0exxxxx形式,就會被認為是科學計數法,且表示的是0*10的xxxx次方,還是零,都是相等的。

下列的字串的MD5值都是0e開頭的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

而且需要注意的是,連續的key會被 空 替換,所以

http://123.206.87.240:8002/web16/index.php?kkeyey1=240610708&kekeyy2=s878926199a