bugku——備份是個好習慣
這道題擱置了快一個月了……今天終於把它給做了,心情還是很舒暢的>-<
首先開啟題目,只有一串字串,百度了一下發現是個md5加密,關鍵……原字串還是個空字串……(懵逼……)開啟網頁原始碼也一樣,沒有任何提示,這時候,我們可以想到提示肯定是在題目裡!備份是個好習慣~咦,是不是有一個備份檔案呢?在題目的url裡輸入:http://120.24.86.145:8002/web16/index.php.bak
,即可下載備份檔案;
**小知識:**備份檔案的副檔名一般為*.swp,*.bak
有點靈性做題2333,其實還有另外的兩種比較靠譜的方法:①用御劍掃描;②用原始碼洩露工具(具體不再詳述,之後可能會補上)
接下來,我們用notepad++開啟這個備份檔案,可以看到裡面的程式碼:
<?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"; } <php>
閱讀程式碼,這裡有幾個函式:
strstr(string,search,before_search):
找到search字串在string中第一次出現的位置,並把後面的字串輸出;before_search如果為true,則返回位置之前的字串;預設為false;
substr(string,start,length):
看引數很容易理解,返回字串的一部分;
str_replace(find,replace,string,count):
在字串sting中找到字串find,並把它替換成replace;
parse_str(string,array):
把查詢字串解析到變數中;
然後我們可以知道這段程式碼的意思:程式碼從?後開始擷取到str中,也就是變數後開始擷取字串;然後從位置1開始截到字串結束;之後把字串中的kay欄位全用‘ ’替代,這個我們可以通過構造"kekeyy"來繞過;最後把key1和key2解析成變數;
敲重點程式碼要求我們構造出key1和key2的md5值相等,而它們本身卻不相等,這時候用到一個小知識點:md5無法對陣列進行構造,構造的結果都為NULL,這樣我們只要讓key1和key2是兩個陣列就好
構造url:
http://120.24.86.145:8002/web16/?kekeyy1[]=1&kekeyy2[]=2
出現flag。