SQL盲注(原理概述、分类)
盲注原理
盲注的分類
盲注常用函數
一、SQL盲注概述
盲注:即在SQL注入過程中,SQL語句執行查詢后,查詢數據不能回顯到前端頁面中,我們需要使用一些特殊的方式來判斷或嘗試,這個過程成為盲注
1.如果數據庫運行返回結果時只反饋對錯不會返回數據庫中的信息 此時可以采用邏輯判斷是否正確的盲注來獲取信息。
2.盲注是不能通過直接顯示的途徑來獲取數據庫數據的方法。
在盲注中,攻擊者根據其返回頁面的不同來判斷信息(可能是頁面內容的不同,也可以是響應時間不同,一般分為三類)
1、布爾盲注
原理:
盲注查詢是不需要返回結果的,僅判斷語句是否正常執行即可,所以其返回可以看到一個布爾值,正常顯示為true,報錯或者是其他不正常顯示為False
2、時間盲注
原理:
如論我們輸入的語句是否合法,頁面的顯示信息是固定的,即不會出現查詢的信息,也不會出現報錯信息??梢試L試基于時間的盲注來測試。根據頁面響應的時間,來判斷輸入的信息是否正確。
在可以判斷返回正確還是錯誤的情況下,兩種注入方法都可以用,延時注入更傾向于無法判斷正誤,通過自己構造頁面刷新時間來判斷正誤。
- sql時間類型的盲注本質是利用插入的sql語句執行造成時間延遲
MySQL時間盲注幾種延遲方法:
get_lock函數() 需要使用 mysql_pconnect函數來連接數據庫。
在一個session中可以先鎖定一個變量例如:select get_lock(‘do9gy’,1)。
然后通過另一個session再次執行get_lock(‘do9gy’,5)此時會產生5秒的延遲,其效果類似于sleep(5)。
1、二分法
- 二分法SQL盲注示例
rand() 產生一個隨機函數
floor() 向下取整的函數
floor(rand(0)*2) 返回0或者1
floor(rand(0)*2) 返回0或者1
創建一個table
insert into table value(1,‘a’,‘b’) select floor(rand(0)*2) from tbale
SQL注入常用函數
1 .布爾型
- left(a,b)從左截取a 的前b位:left(database(),1) > ‘s’
- substr(a,b,c)從b位置開始,截取字符串a的c長度
- ascii() 將某個字符轉換為ascii值:ascii(substr(user),1,1)=101#
- mid(a,b,c)從位置b開始,截取a字符串的c位 regexp正則表達式的用法
- user()結果位root ,regexp為匹配root的正則表達式:select user()’
(1)left(a,b)函數
- LEFT()函數是一個字符串函數,它返回具有指定長度的字符串的左邊部分。
- LEFT(str,length);如果str或length參數為null,則返回null。
- str是要提取字符串的字符串、length是一個正整數,指定將從左邊返回的字符數。
- length大于str字符串的長度,則LEFT返回整個str字符串 (返回str的長度,以字節為單位,一個多字節可算作多字節。
(2)substr() 或 substring()函數
-
SBUSTR(str,pos)開始的位置,一直截取到最后。
-
SBUSTR(str,pos,len);表示從pos開始的位置,截取len個字符(空白也算字符)![在這里插入圖片描述
-
SELECT SUBSTRING(‘chinese’,-3); //倒數第三個字符之后的子字符串-ese
(3)ord() mid()函數
-
函數ord() 函數返回字符串str的最左面字符的ASCII代碼值
-
函數mid()用于得到字符串的一部分。
(4)cast() 和 convert()函數
cast() convert() 函數可用來獲取一個類型的值,并生產另一個類型的值。
(5)ifnull()函數
- IFNULL()意義是當字段A是NULL時取B,不是NULL取A
(6)sleep()或benchmark()
通過執行select sleep(n)可以讓此語句執行n秒
條件:指定條件的記錄存在時才會停止指定的秒數
列如:查詢條件為name='pig’結果表明記錄不存在,執行結果為0
(7).基于時間的盲注在使用延遲函數上可以有兩個選擇:
benchmark(count,expr)函數 sleep(time)函數 前者通過將expr語句執行 count次來到達延遲的目的,后者是直接延遲time時間 benchmark是一個內置函數,其作用是來測試一寫函數的執行速度,benchmark()其中有兩個參數, 第一個是執行次數,另一個是要執行的函數或者表達式。3.Xpath類型函數(mysql version >= 5.1.5)
(1)updatexml() 函數功能:改變文檔中符合條件的節點的值。
Updatexml(xml_documnet,XPath_string,new_value);
第一個參數:XML_document是string格式,為XML文檔對象的名稱
第二個參數:XPath_string(Xpath格式的字符串)
第三個參數:new_value,string格式,替換查找到的符合條件的數據
超過長度可以配合substr()
(2)extractvalue() 函數功能:對XML文檔進行查詢的函數,其實就是相當于HTML文件中標簽查找元素。
語法:extractvalue(目標XML文件,XML路徑)
第二個參數 xml中位置是可以操作的地方,xml文檔中查找字符位置是用 /xxx/xxx/xxx…
這種格式,如果寫入其他格式,就會報錯,并且會返回寫入的非法格式內容,而這個非法內容就是號想要查詢的內容
總結
以上是生活随笔為你收集整理的SQL盲注(原理概述、分类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ESlint静态代码检测工具安装
- 下一篇: vue对象侦测