SQL注入常用函數(注入小白的學習筆記)


在盲注的情況下,往往需要一個一個字符的去猜解,即過程中需要截取字符串

在這里整理了一下一些常用函數

由於現階段學習不夠深入,整理分類不清楚具體,不過博主會慢慢進行完善

user() 查詢當前數據庫用戶

version() 查詢當前數據庫版本

database() 查詢當前頁面所連接的數據庫名稱

@@Version_compile_os 查詢服務器的系統版本

mid()函數

此函數為截取字符串一部分。mid(column_name,start,[length])

參數

描述

column_name

必需。要提取字符的字段。

start

必需。規定開始位置(起始值是 1)。

length

可選。要返回的字符數。如果省略,則 MID() 函數返回剩余文本。

例如:str="123456"   使用 mid(str,2,1) 語句 意為 從str 的第二個字符開始,截取長度為1 ,所以結果為2

mid(database(),1,1)>’a’,查看數據庫名第一位是否比a大(這里依次替換a 直至查出最終字符是哪一個)

mid(database(),2,1),查看數據庫名第二位

substr()函數

    Substr()和substring()函數實現的功能是一樣的,均為截取字符串。

    string substring(column_name, start, length)

    string substr(column_name, start, length)

    參數描述同mid()函數,第一個參數為要處理的字符串,start為開始位置,length為截取的長度。

 意與mid函數大相徑庭

substr(database(),1,1)>’a’,查看數據庫名第一位是否比a大(這里依次替換a 直至查出最終字符是哪一個)

substr(database(),2,1),查看數據庫名第二位

left()函數

 left()得到字符串左部指定個數的字符

 left ( string, n )    

參數

描述

string

必需。要提取字符的字段。

n

必需。提取長度

例:

(1) left(database(),1)>’a’,查看數據庫名第一位,left(database(),2)>’ab’,查看數據庫名前二位。

(2) string部分可以為自行構造的sql語句。

(3)正確則返回1,錯誤則返回0。

like()函數

 like后面能進行模糊匹配,關鍵字內容為

 %    => 匹配任意個字符串

 _     => 匹配一個字符

但是存在前提,被匹配的字符可以是select查詢語句,可以是該表內的字段,可以是返回為字符串的函數比如database()

regexp()函數

 在這里轉載一個文章,讓自己對於regxp函數理解了很多,也比較詳細,大家也可以去看看https://www.cnblogs.com/lcamry/articles/5717442.html

 其實在某種程度上regexp和like的效果差不多,但是由於它支持正則表達式,所以有一些比較難搞懂。

例如:

 select user() regexp ‘r’ user()的結果是root,regexp為匹配root的正則表達式

   上例中就是把查詢到的user用戶也就是root和r從左至右進行比較,相同是1,不同是0.

ascii()函數/ord()函數

 將某個字符串轉化為ascii值

sleep()函數

 網頁延遲n秒后,輸出結果;

if()函數

 條件判斷函數

 if(a,b,c):if判斷句,a為條件,b、c為執行語句;如果a為真就執行b,a為假就執行c;

length()函數

 length(column_name)

 常用length(database()),即返回當前數據庫名長度;

concat()函數

 將多個字符串連接成一個字符串,返回結果為連接參數產生的字符串

 concat(str1, str2,...) 返回結果為連接參數產生的字符串,如果有任何一個參數為null,則返回值為null。 

rand()函數
 隨機函數,返回0~1之間的某個值
floor(a)
 取整函數,返回小於等於a,且值最接近a的一個整數
count()函數
 聚合函數也稱作計數函數,返回查詢對象的總數
group by cluase
 分組語句,按照cluase對查詢結果分組
floor()函數

 floor()函數原本為向下取整,其中rand()函數為隨機數生成,不能於order by共用,數據記錄必須有兩條以上。

 mysql在遇到 select count(*) from ... group by x這語句的時候會先建立一個虛表,然后開始查詢數據,取數據庫數據,然后查看虛擬表存在不存在,不存在則插入新記錄,存在則count(*)字段直接加1,x是sql中暫時成為查詢語句的虛擬表的字段名。

 and的后面加了跨度很大的括號:優先后面的注入語句執行,后面的注入語句被優先執行,本身就計算出錯然后就會直接報錯,那么就沒有前面的select語句的什么事兒了。我們可以簡單的理解為語句短路。

 如果還有看不明白的獻上一份大神講解floor函數解析的博客: https://blog.csdn.net/cried_cat/article/details/80022378
 
(ps:小白博主是學習資源的搬運工[\滑稽],侵刪)
注入小白博主學習備注:
有些大神的語句里面出現一些自己看不懂的東西...
空格是%20,單引號是%27, 井號是%23,雙引號是%22
 

有問題的話歡迎大家指出~ 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM