sqli-labs.less8-12過關記錄
- Pass8
根據題意這是布林盲注
布林盲注通俗的說就是隻有兩種回顯,要麼回顯正常頁面要麼錯誤回顯,不會輸出錯誤語句將,通過輸入測試語句然後判斷頁面是否回顯正常來確定測試的資料是否存在
輸入id=1'返回錯誤頁面
輸入id=1' and 1=1--+回顯正常
這裡要用到substr()函式,格式是substr(引數,1,1)='字元',通過擷取引數的第一個字元來對比是否等於等號後的字元,如果相等則為真,否為假
輸入1' and (select substr((database()),1,1)='s')--+,返回正常頁面,說明當前資料庫的第一個字元為s
通過python指令碼來寫就是
獲取到當前資料庫為security,然後利用count()函式來統計當前資料庫的數量
獲取當前資料庫中所有表的名字,指令碼比較簡陋,不過還好後面可以通過序號分割每個表的名字
- Pass9
根據名字可得知是時間盲注,時間盲注的注入方式是通過注入語句然後觀察返回資料所需要的時間來判斷是否為注入成功
這裡用到sleep()函式來觀察頁面返回時間來確定是否存在時間盲注,時間可以儘量多一點,以免是網路問題導致時間相同而資料卻不同
python指令碼爆庫如下:
通過發包和回包的時間差來判斷是否正確
- Pass10
和Pass9一樣,只是雙引號閉合
- Pass11
打開發現給了一個登入介面
輸入username輸入admin' password輸入123456
返回錯誤語句,還可以發現頁面url沒有變化,所以這是通過post傳送資訊
經測試通過#號來註釋後面的語句,且只有2列
在外掛中post模組輸入uname=1' union select version(),database()#&passwd=adsfjllkjasdf檢視版本和當前資料庫
爆表uname=1' union select (select table_name from information_schema.tables where table_schema='security' limit 0,1),database()#&passwd=adsfjllkjasdf
中間要加上limit來限制每次只輸入一行,不然一次性不能輸出這麼多行,當然這個可以用mysql函式來解決
在table_name處加上group_concat來將查詢的內容全放在同一行裡面,
獲取欄位名
獲取表資料
- Pass12
這關閉合利用"),其他和上一關一樣
剩下的過幾天再寫了。。。