bugku welcome to bugkuctf


題目地址:http://123.206.87.240:8006/test1/

這道題主要用到了倆個知識點:php偽協議和序列化

點進題目看到:you are not the number of bugku !這句話,很來氣,啥都沒有,查看源碼。

看到三個get方式提交的參數。txt、file、password。第一眼看到還是沒什么思路,先完成if條件,看第八行代碼,我們要使user這個文件里面的內容完全等於"welcome to the bugkuctf"。這里我們用到了第一個知識點,php偽協議里面的PHP://input,寫入txt,構造payload如下。  //這里不明白為什么不可以直接令txt=welcome to bugkuctf。

我們就得到了右邊這個頁面。然后注意到hint.php這個東西,嘗試訪問一下,什么也沒有。這里,我們傳入第二個參數file,並利用偽協議的PHP://fifter讀取一下hint.php的源碼,結果是base64加密的,讀完之后解密一下就行了。

解密右邊的密文,得到下圖代碼,這里有一個FLAG類,注意一下,后面有用。

然后我們用同樣的方法讀取index.php,解密后得到如下代碼。//關於為什么可以直接讀index.php,網上找了很久也沒有到合適的答案,應該是經驗之談吧。

御劍掃描后台時,發現有flag.php頁面,我們試着讀取一下。把index.php改為flag.php,結果如下:

 

 為什么會這樣呢?我們觀察第八行代碼,這一句的作用是,利用正則匹配,是file里面不能含有flag。只能想其它的辦法獲得flag。我們往下看else里面的語句。它表示如果file不含flag,就會把file包含進去,然后$password進行反序列化,再輸出$password的值。我們回到FLAG類那塊,看到里面有一個$file屬性,並且有一個魔術方法_tostring(),這個方法的作用就是當調用實例化對象時就會自動執行_tostring()這個方法。簡單來說創造一個這個類的對象就會調用這個方法。而在_tostring()中,會輸出以字符串的形式輸出file,根據上面的這些條件,我們可以讓$password為FLAG類型,並且讓FLAG中的$file就等於flag.php,這樣我們就可以得到flag.php的內容了,不過要記得,前面$password進行了反序列化的操作,所以我們要先把它序列化。寫一個php腳本吧!如下:

左邊是flag.php序列化之后,這個腳本大家可以先在自己電腦室試一下,用phpstudy就行,放在根目錄下,具體的用法可以百度,然后我們傳入txt、file、password的值

這里的%22是雙引號。

 

然后再查看器里找到flag:

 

(ps:本人太菜,若有錯誤的地方歡迎大佬隨時責罵。。。。xixixii)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM