實驗吧題目之忘記密碼

題目鏈接:忘記了密碼 http://ctf5.shiyanbar.com/10/upload/
1、進入題目,首先查看源代碼
實驗吧題目之忘記密碼
得到有用信息,郵箱地址[email protected]和代碼編寫工具vim

2、這些線索肯定不夠的,不如輸入一個字符串測試一下
實驗吧題目之忘記密碼

3、裏面提到個step2.php的文件,我們訪問一下這個文件內容
實驗吧題目之忘記密碼
發現當我們在訪問step2.php的時候,url自動跳轉到原來的頁面,我們想看看step2.php給的迴應。

4、用BP抓包
實驗吧題目之忘記密碼
這頁源碼是獲取數據的一個表單,將獲取的數據傳遞給submit.php,獲取的內容是email和token。或許我們這裏可以猜到email是我們先前在網頁源碼中的郵箱地址,但是我們不知道token的值應該是多少。
我們知道在http請求的時候,先將數據讀取,應該就是step1.php界面,然後就是處理數據,而step2.php將get獲取到的值轉交到了submit.php,所以這個文件中指定有判斷token值的方法。

5、我們先來訪問一下submit.php。
實驗吧題目之忘記密碼
提是不是管理員,但是線索應該就在這個文件中,但又沒有權限訪問。
我們知道這個文件使用vim編輯的,這裏有一個特性,在編輯的過程中都會產生一個後綴爲.swp的隱藏文件我們訪問一下有沒有這個文件

6、訪問.swp的隱藏文件
實驗吧題目之忘記密碼
果然存在,並顯示出了處理數據的源代碼

7、我們分析源代碼,
Empty()函數判斷一個變量是否被認爲空值
Strlen()函數計算字符串的長度
Mysql_fetch_assoc()函數從結果集中取得一行作爲關聯數組
這串代碼首先判斷token的長度是不是等於10,並且token的值也必須等於0,否則都會輸出錯誤,這也給了我們構造token的線索。
然後,通過sql count()語法指定列的數目,count(*)返回表中所有的記錄數,如,有三條記錄返回3,as num,將返回的值給一個新建的列名num。
實驗吧題目之忘記密碼
我們從step2.php中得知需要傳遞兩個參數,emailAddress和token,已經有了郵箱地址,只需要算出token就可以。
這裏也給出了token的判斷條件,值必須等於0,並且長度是10,常規是沒有這樣的數的,但是我們可以構造,十個零0000000000,這樣不就長度是10啦。
最後構造出參數[email protected]&token=0000000000

8、將參數傳遞給submit.php便可得到flag
實驗吧題目之忘記密碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章