2017第二屆廣東省強網杯線上賽:WEB phone number (SQL注入)


解題思路

拿到題目的時候,只有一個登錄界面
image
拿到登錄界面,而且還伴隨着有注冊界面,聯想到SQL的二次注入漏洞

嘗試注冊admin'#,並使用admin登錄,發現登錄失敗,說明可能不存在SQL二次注入

注冊之后,登錄進去,在check.php頁面查看源代碼的時候發現有一個關於admin的注釋:
image
可能是編碼不一致的問題,打開Notepad++,先選擇使用ANSI編碼,粘貼之后,再使用UTF-8編碼,得到內容:
image
可能關鍵的信息在admin的電話,看來必須要知道admin的電話才行。

當前頁面很少,想着如果可以看源代碼是不是有解題思路,於是使用dirsearch掃描了一下,希望能有個源代碼文件:
image
在訪問了所有的文件后,事與願違,並沒有源代碼文件,但是db.php仍然暗示了需要使用SQL注入

通過一番尋找,由於頁面暗示了電話問題,所以我們猜想可能注入點在電話中
為什么?且看圖
image

空色框內的變量2顯然就是查詢數據庫之后的結果,所以這個2很可能就是回顯點
而在整個靶場中,唯一能夠讓我們控制電話的只有register.php界面。
再次打開register.php界面,進行html的代碼審計(因為得不到php源代碼):
image
顯然必須要查看form表單
image
這很正常,在注冊界面里面,設定電話號碼的長度是11
但是,對於hack來說,長度為11顯然限制了我們的手動直接在頁面注入,這就是此地無銀三百兩的細節

好,我們輸入SQL注入語句,報錯,原因是,它必須要數字:
image
所以系統會對非數字電話進行過濾

辦法是轉換成二進制或者十六進制(二進制經過測試不能成功,且看16進制)。
image
將SQL注入語句轉換成16進制,記住,一定要在前面加0x
image

發送成功,然后我們登錄查看一下
image

我們剛剛輸入的內容在回顯欄里面,點擊check
image

相比於剛才,多了一條語句:There only 1 people use the same phone as you
同時也證明了兩點,只有一列可以回顯,而且是數字型注入。
於是之后就可以構造查詢語句:
image

image
image
image
image
最后再查一下phone,就可以找到flag了
image

此外,在查詢的時候,遇到錯誤會統一報錯為db,error
這樣下來,報錯注入就行不通了,即不能用xmlupdate

總結

做這道題遇到的障礙以及解決方法

障礙 方法
不能及時判斷SQL注入點 在找到注釋提示admin的電話號碼的時候,以及在頁面告訴說有多少人和你是同一電話號碼的時候,在電話號碼只能輸入11位的時候,在電話號碼過濾非數字的時候,都在暗示,這是一個SQL注入點
不能及時繞過非數字過濾 繞過非數字檢測過濾的方法就是將字符串轉換為數字,最常見的就是二進制和十六進制
不能及時判斷SQL數據庫結構 從小到大,從第一列開始判斷,即select 1開始,隨后增減列數,一定要在后面添加注釋
不能准確使用SQL語句注入 如果報錯結果為同一特定文字,那么報錯注入大部分情況下沒有用


免責聲明!

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



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