0x01 mysql介紹
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件
MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性
MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分爲社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作爲網站數據庫。
一般與PHP搭配,運行在Apache服務器上
0x02 mysql結構
0x03 mysql常規操作
1. 創建
1.1 創建數據庫
create database 數據庫名;
可以看到數據庫已經創建成功。在這裏出來我創建的數據庫還有幾個mysql自帶的數據庫,分別是information_schema,mysql,performance_schema
information_schema:information_schema數據庫是MySQL系統自帶的數據庫,它提供了數據庫元數據的訪問方式,如能在這個數據庫裏面查詢mysql中的數據庫名,表名,字段名,外鍵關係等(該表在mysql5.0以下的版本是不存在的)
mysql:主要用於mysql數據庫用戶名,密碼,權限等的管理,如可以在該數據庫裏面更改密碼,更改用戶權限等
performance_schema:mysql 5.5 版本 新增了一個性能優化的引擎,該功能默認關閉的。
1.2 創建表
create table 表明(
字段名 數據類型 附加信息
)表附加信息;
如
create table test(
id int primary key auto_increment not null,
csdn varchar(255) default null
)ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
這裏的例子,創建一個表名爲test,裏面有兩個字段ID和csdn,id是整型,主鍵,自增,不能爲空;csdn字段爲字符類型,默認爲空;表附加信息爲關係類型爲InnoDB,默認編碼方式爲UTF-8,自增起始值爲1
創建成功我們查看下
2. 增
插入語句語法爲
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...);
例
insert into test (csdn) values ('gr3enh4nd');
插入成功
3. 查
基礎查詢語句
select 字段名 from 表名;
字段名可以用 * 替換,表示查詢表中所有字段。
這裏除了簡單查詢以外還有子查詢,複合查詢,這裏我就不講解了,講解的話太多了,複合查詢和子查詢可以簡單瞭解下,需要使用時再按照語法構造
limit 限制查詢條數
語法
select * from 表名 limit 起始值,偏移量;
如
select * from test limit 0,1;
這裏就是查詢test表,第一條數據
4. 改
語法,介紹update語句需要介紹where
where 附加到語句最後限定語句範圍
update 語法
update 表名 SET 字段名 = 更新值 where 限定字段名 = 限定值;
如
update test SET csdn = 'changge' where id = 1;
這裏id爲1的字段內容被更改了
5. 刪
5.1 刪除數據庫和表
dorp table 表名/ drop database 數據庫名
如
drop table test / drop database csnd
5.2 刪除內容
delete from 表名 where 限定條件
如
delete from test where id =1
刪除test表中,id等於1的那條記錄
0x04 mysql在web安全中常用的函數
1. concat
將多個字符串連接爲一個字符串,返回結果爲連接參數產生的字符串。如有任何一個參數爲NULL ,則返回值爲 NULL。或許有一個或多個參數。 如果所有參數均爲非二進制字符串,則結果爲非二進制字符串。 如果自變量中含有任一二進制字符串,則結果爲一個二進制字符串。一個數字參數被轉化爲與之相等的二進制字符串格式
2. if
語法
if(exp1,exp2,exp3)
參數解釋:
如果expr1的值爲true,則返回expr2的值,如果expr1的值爲false,則返回expr3的值
3. sleep()
等待一段時間,時間單位爲秒
4. 幾個報錯注入的函數
該博客上介紹得比較全
重點看floor,updatexml,extractvalue
5. 文件操作函數
5.1 load_file()
讀文件函數
select load_file('文件路徑');
如
select load_file('/etc/passwd');
使用該函數有個條件是,mysql用戶需要有file權限
5.2 into outfile函數
導出到文件
select ... into outfile '文件路徑';
可以用來導出一句話
5.3 into dumpfile
同樣導出到文件
select ... into dumpfile '文件路徑';
這兩個函數得區別:
outfile函數可以導出多行,而dumpfile只能導出一行數據
outfile函數在將數據寫到文件裏時有特殊的格式轉換,而dumpfile則保持原數據格式
導出庫適合用outfile
在udf提權時,導出udf.dll二進制文件時適合用dumpfile