開啟頁面之後發現是這個樣子,檢視原始碼也沒啥好東西。
檢視檔案原始碼
<?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)
?>
這段**大概意思是:首先獲取當前的uri,接著把uri中「?」以及「?」之後的字串賦值給變數,然後再刪掉「?」再賦值給變數,如果字串中含有「key」,將key替換為空.再將字串解析到變數中,再比較key1.key2的md5值。
解析流程:
url:?key1=***&key2=***
獲取uri,也就是獲取網域名稱後面的東西/web16/?key1=***&key2=***
獲取?key1=***&key2=***
獲取key1=***&key2=***
再通過parse_str函式,url引數key1,key2變為變數$ key1,$key2
$str = str_replace(『key』,』』, $str) 【正常傳參的話,key會被置換為空,通過構造kkeyey來繞過】
想要獲得flag,需同時滿足key1.key2的md5值相等且key1的值等於key2的值。
繞過方式:
1.md5無法對陣列進行構造,傳參為陣列返回null,滿足條件。
?kkeyey1=***&kkeyey2=ccc
2.利用php弱型別getflag
?kkeyey1=240610708&kkeyey2=qnkcdzo
240610708 md5加密:0e462097431906509019562988736854
qnkcdzo md5加密:0e830400451993494058024219903391
0e在比較的時候會將其視作為科學計數法,所以無論0e後面是什麼,0的多少次方還是0
php弱型別詳解參考部落格:
BUGKU 備份是個好習慣
這兩天放鬆了兩天,感覺有點玩的攤下來了,還是要堅持刷題啊!首先開啟題目,根據題目意思肯定是要找備份檔案,用御劍掃瞄,結果沒有自己想要的結果 嘗試在index.php後加上bak 備份檔案的副檔名一般為 swp,bak 開啟後發現是乙個檔案,直接用記事本開啟是一段 審計 可以知道key1,key2都被...
bugku 備份是個好習慣
開啟是一段神秘 我也不知道是什麼 直接解密試試 嘗試各種,發現是md5,解開是。可能需要我們傳什麼東西進去,抓包看看,無果。看看題目是備份,可能這道題就和備份檔案有關 我就直接點了,直接開啟御劍,新增幾個php和檔案的掃瞄 原來是備份的bak檔案 直接開啟網頁看看 發現是一段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 取得當前url的路徑位址查詢...