BugkuCTF WEB writeup-備份是個好習慣(80)
阿新 • • 發佈:2020-10-16
備份是個好習慣(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