实战密码攻击:构建自定义字典与规则集

本文详细介绍了如何利用OSINT信息生成针对性密码字典,通过CeWL爬取个人数据,使用Hashcat组合与规则变换生成高效字典,最终成功破解MD5哈希值的完整技术流程。

Hack The Box Academy 实战记录 — 密码攻击 — 编写自定义字典与规则

目的/免责声明

本实战记录旨在弥合Hack The Box模块中理论概念与实际解决练习所需具体逻辑步骤之间的差距(在某些情况下)。它不是直接提供答案,而是引导读者通过一系列小而递增的推理步骤,每一步都强化模块的核心课程,使学生最终不仅能得出正确答案,而且真正理解每个步骤的必要性。通过这样做,本实战记录旨在通过明确和可访问的方式展示其底层逻辑,从而增强模块对整个社区的价值。

模块练习 — Mark的密码是什么?

在本模块中,我们仅快速概述了CeWL工具,如何爬取自定义字典以及为后续使用制作规则集。练习本身期望我们更深入:收集自己的OSINT以进一步练习除显示命令外的其他命令,将其组织成有意义的字典种子,并有条不紊地应用转换,直到生成保证能破解目标哈希的列表。

在以下部分,我们将逐步分解该过程。

步骤1:使用CeWL生成基础字典

首先,我们将利用CeWL的自动网络爬取能力(在这种情况下是杀鸡用牛刀,但我们正在建立肌肉记忆)来生成初始字典,从而节省手动梳理页面内容的时间。首先,我们将从提示中获取OSINT详细信息,并将其嵌入到简单的mark.html文件中,在本地将其作为网站提供服务,然后将CeWL指向它。这种方法模拟爬取真实网页,同时确保Mark的所有个人数据都被捕获到我们的基础列表中。

mark.html

为确保我们的自定义字典相关且有效,我们应仔细选择要包含在CeWL使用的HTML文件中的详细信息。目标是捕获有意义的个人关键词,而不是盲目粘贴整个练习提示。

例如,尽管提示包括公司密码策略的信息(例如最小长度、所需字符),但这作为原始字典材料无用。包含它会用非个人、通用术语(如“大写”、“符号”或“数字”)使输出混乱,这些不太可能出现在实际密码中。

相反,我们仅提取关于目标的特定个人数据点,如姓名、日期、地点、兴趣和家庭成员。这些更可能出现在现实世界的密码组合中。

遵循此逻辑,我们构建一个干净的HTML页面,仅包含关于Mark White的相关OSINT。然后该页面在本地提供服务,并使用CeWL爬取以构建我们目标字典的基础。

切换到mark.html目录并启动http.server:

1
2
3
python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.14.248 - - [29/Jul/2025 13:17:52] "GET /mark.html HTTP/1.1" 200 -

mark.html

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<title>Mark White Bio</title>
</head>
<body>
  <h1>Mark White</h1>
  <ul>
    <li>Born: August 5, 1998</li>
    <li>Works at Nexura, Ltd.</li>
    <li>Lives in San Francisco, CA, USA</li>
    <li>Pet: cat named Bella</li>
    <li>Wife: Maria</li>
    <li>Son: Alex</li>
    <li>Fan of baseball</li>
  </ul>
</body>
</html>

生成初始字典

随着HTML页面就位,我们准备使用CeWL生成初始字典。由于页面是扁平且简单的,我们不需要深度蜘蛛或复杂选项。

我们使用以下命令:

1
cewl -d 1 -m 2 --with-numbers -w mark_initial.txt http://<tun0>:8000/mark.html

选项说明:

  • -d 1:蜘蛛深度设置为1,因为我们的本地HTML文件没有链接到任何其他页面。
  • -m 2:我们包含最小长度为2个字符的单词,以捕获短但可能有用的条目,如CA或US。
  • --with-numbers:启用包含数字值,如Mark的出生年份(1998),否则CeWL会忽略。

输出写入到mark_initial.txt。要快速了解捕获了多少唯一单词,我们可以计算文件中的行数:

1
2
wc -l mark_initial.txt
27

步骤2:通过组合扩展字典

在此阶段,我们纳入之前注意到的密码策略详细信息。由于最小密码长度为12个字符,合理假设用户可能将两个或多个个人元素组合成一个密码。

为了在字典中反映这一点,我们从初始关键词生成所有可能的成对组合。这是使用Hashcat的组合攻击模式(-a 1)完成的,该模式将每个单词与每个其他单词(包括自身)连接。

我们运行以下命令:

1
2
3
4
5
hashcat --stdout \
  -a 1 \
  mark_initial.txt \
  mark_initial.txt \
  > mark_pairs.txt

这创建了一个新文件mark_pairs.txt,包含所有2单词组合。为了监控列表的增长,我们计算生成了多少条目:

1
2
wc -l mark_pairs.txt
729

这些组合显著增加了我们匹配目标密码的机会,尤其是在需要更长密码的策略下。

步骤3:按最小密码长度过滤

在应用更计算密集的基于规则的突变之前(再次,此列表在此上下文中可能不是问题,但我们正在建立肌肉记忆),我们可以通过过滤掉任何不满足最小密码长度12个字符的条目来优化字典。

为了高效地做到这一点,我们使用awk仅保留那些12个字符或更长的组合:

1
awk 'length($0) >= 12' mark_pairs.txt > pairs_length12.txt

然后我们检查剩余多少条目:

1
2
wc -l pairs_length12.txt
76

这将我们的列表从729个条目减少到仅76个,帮助我们在后续步骤中节省时间和处理能力。

步骤4:使用规则应用自定义字典转换

随着我们过滤后的12+字符条目列表就位,我们准备使用自定义规则应用高级转换,如本模块中介绍。

我们首先使用heredoc在工作目录中创建custom.rule文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
cat << 'EOF' > custom.rule
c
so0
sa@
c so0
sa@
c sa@
so0 $!
$!
c $!
so0 $!
sa@ $!
c so0 $!
c sa@ $!
so0 sa@ $!
c so0 sa@
EOF

确认正确写入:

1
custom.rule

此规则集涵盖一系列转换,包括:

  • 首字母大写(c)
  • 将a替换为@(sa@)
  • 将o替换为0(so0)
  • 在末尾附加!($!)
  • 这些的各种组合

现在,我们使用这些自定义规则处理过滤后的字典:

1
2
3
4
hashcat --stdout \
  -r custom.rule \
  pairs_length12.txt \
> mut_mark_final.txt

最后,我们检查生成了多少转换后的密码候选:

1
2
cat mut_mark_final.txt | wc -l
1140

此步骤将我们的列表扩展到1140个条目 — 每个都符合策略并针对我们的目标定制。

步骤5:使用最终字典破解哈希

随着最终字典(mut_mark_final.txt)准备就绪,最后一步是尝试破解练习中提供的目标哈希。

识别哈希类型

为了确定正确的Hashcat模式,我们首先使用hashid分析哈希格式:

1
2
3
4
5
6
hashid -m 97268a8ae45ac7d15c3cea4ce6ea550b
[+] MD2
[+] MD5 [Hashcat Mode: 0]
[+] MD4 [Hashcat Mode: 900]
[+] Double MD5 [Hashcat Mode: 2600]
...

在候选项中,MD5是最可能的匹配。

为了验证此假设,我们生成一个已知的MD5哈希并比较长度:

1
2
echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6

长度和结构与目标哈希匹配,增加了我们这确实是标准MD5哈希(Hashcat模式0)的信心。

破解哈希

现在我们使用模式0和最终自定义字典运行Hashcat:

1
hashcat -a 0 -m 0 97268a8ae45ac7d15c3cea4ce6ea550b /home/pentestacc/Server/medium/mut_mark_final.txt
  • -a 0:直接字典攻击模式
  • -m 0:指定MD5哈希模式
  • 最终字典路径指向我们的自定义文件

过程完成后,如果哈希成功破解,Hashcat将在屏幕上显示恢复的密码。

结论

在本练习中,我们遵循结构化和现实的方法进行针对性密码破解,利用OSINT、自动化和逻辑。从公开可用的个人详细信息开始,我们使用CeWL等工具生成自定义字典,然后通过组合和基于规则的转换来改进和扩展它。

通过基于密码策略进行过滤并使用Hashcat进行最终破解尝试,我们成功展示了精心制作的字典在现实场景中如何高效。此过程突出了在渗透测试期间将技术工具与战略思维相结合的价值。

准备好提升你的黑客技能了吗?

加入Hack The Box — 学习渗透测试和网络安全的终极实践平台。 👉 开始黑客攻击这里 并获得对真实世界实验室、挑战和职业提升技能的访问权限。

whoami

我是Ilias Mavropoulos,TP的渗透测试员,持有PenTest+、eWPT、eJPT、SC-200、Gold BTL1、ISC2 CC认证,以及网络安全硕士学位。

基于希腊雅典地区,我拥有超过十年的IT和网络安全环境经验。

LinkedIn: https://www.linkedin.com/in/imavropoulos

希望你喜欢本实战记录!如果觉得有帮助,请随意与社区中的其他人分享。

网络安全 | 渗透测试 | 密码破解 | 开源情报 | 网络安全培训

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计