Writeup Blinded by the lighter

題目提示:

    1. Again your mission is to extract an md5 password hash out of the database.

    需要獲取數據庫中的密碼信息,而密碼是經過MD5加密的。

    2. This time your limit for this blind sql injection are 33 queries.

    最多可以注入33次。

    3. Also you have to accomplish this task 3 times consecutively, to prove you have solved the challenge.

    居然要連做三次纔算成功,爲什麼。。。爲什麼。。。爲什麼。。。

    4. 可以查看部分關鍵源代碼,注入點居然還是這一句:

$query = "SELECT 1 FROM (SELECT password FROM blight WHERE sessid=$sessid) b WHERE password='$password'";

    居然還有時間限制:

/** * Check if you were too slow. 
    * @return true|false 
    */
function blightTimeout(){
        if (false === ($start = GWF_Session::getOrDefault('BLIGHT2_TIME_START', false))){                
            return true;
         }
         else{
             return (time() - $start) > BLIGHT2_TIME;
         }
}

    實際做起來確實如此,時間稍微長一點就提示說太慢了,只好重來。。。


解題:

    看別人的writeup提到可以通過sleep函數然後根據響應時間來判斷

' or sleep(ord(substr(password,1,1)))

    經過試驗取ascii碼來判斷影響時間太長,由於本次字符限定在0-9,A-F之間因此將上面的判斷語句改爲如下,後面發現時間還是不夠用於是除了個2,至於這裏爲什麼減的是46各位自己思考吧,哈哈,個人感覺46最合適:

' or sleep((ord(substr(password,1,1))-46)/2)  #

    OK,注入成功,那怎麼判斷延時的時間呢,這時候就需要通過firefox的firebug插件了,F12打開furebug,選擇網絡選項卡,選中HTML和保持兩個選項,選擇保持是爲了把歷史記錄保存下來後統一查看,這樣可以提高速度,清除選項就是清除歷史記錄。

    好,現在開始了:

    1. 重置題目execute a reset

    2. 清除firebug歷史記錄

    3. 從第一個字符開始注入直到第三十二個

    4. 依次查看firebug中每次注入後響應時間,注意要把鼠標移動到時間線上在彈出的小窗上看最後一項接受數據的時間,時間小數位怎麼取捨呢?以0.5爲單位,超過部分捨去,比如0.76則認爲是0.5

    5. 提前準備好excel表格,計算char(x*2+46),x即爲響應時間

    6. OK,整理好數據提交吧,是不是提示成功了,再重複兩次步驟這題就搞定了。

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