Bugku web 備份是個好習慣

2021-09-26 15:36:18 字數 1965 閱讀 8986

開啟題目鏈結,沒有發現什麼線索,想到題目名稱「備份」,考慮到一般備份的字尾為.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'], '?');

$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)

?>

接下來是閱讀php**,我們需要了解幾個其中的函式來讓我們更好的理解題目

strstr(string,search,before_search):

查詢 "search" 在 "string" 中的第一次出現,並返回字串的剩餘部分:

before_search為可選,預設值為 "false" 的布林值,如果設定為 "true",它將返回 search 引數第一次出現之前的字串部分

substr(string,start,length):

返回字串的一部分

start 規定在字串的何處開始返回

length 可選。規定被返回字串的長度,預設是直到字串的結尾

str_replace(find,replace,string,count):

以其他字元替換字串中的一些字元

find 規定要查詢的值

replace 規定替換 find 中的值的值

string 規定被搜尋的字串

count 可選,對替換數進行計數的變數

parse_str(string,array):

把查詢字串解析到變數中

string 規定要解析的字串

array 可選,規定儲存變數的陣列的名稱。該引數指示變數將被儲存到陣列中

**的含義是需要我們給key1和key2賦值,並使key1與key2值不相等,且其md5值相等,既key1和key2為md5碰撞。

唯一的問題是$str = str_replace('key','',$str);,不過也可以通過輸入』kekeyy』簡單繞過

因此只需要構造url為:

其中a,b為乙個md5碰撞

不過在php中如果md5值是0e開頭的,php會做隱式轉換,當做int型別計算,得到的結果是 0,最後導致0==0,判定為true,因此只需要給key1和key2賦兩個md5值為0e開頭的字串即可

下面提供一些md5開頭為0e的字串

qnkcdzo

s878926199a

s155964671a

s214587387a

s214587387a

取其中兩個構造url即可

除此之外此題還有乙個解法,用下面url也可獲得flag

可能原因是』!=='是強型別比價,而key1被賦值為空字串,而key2未被賦值為null,導致其md5值相同而在比較時由於型別不同而得到結果為true,滿足了判斷條件。

Bugku web 備份是個好習慣

點開後原始碼 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...

Bugku web 備份是個好習慣wireUp

備份是個好習慣 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 subst...

新bugku web16 備份是個好習慣

1.備份是關鍵字,我們可以用御劍掃掃 得到 開啟之後由於題設備份檔案,故加上.bak swp錯誤 之後得到乙個檔案,開啟之後發現 科學計數法是 e 要使兩個數的值相等,以0e開頭的md5值可以繞過限制。構造payload kkeyey1 qnkcdzo kkeyey2 240610708 法二 漏洞...