**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测
▶ 初始立足点 ➢ 密码攻击 ➢ 密码破解理论(中)🔥🔥🔥▶ 权限提升
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
[1.1 密码破解流程](#1.1 密码破解流程)
[1.2 字典的变异:让密码适用新规则](#1.2 字典的变异:让密码适用新规则)
[1.2.1 为什么要进行字典的变异](#1.2.1 为什么要进行字典的变异)
[1.2.2 解决方案:创建规则函数](#1.2.2 解决方案:创建规则函数)
[1.2.3 规则函数变异密码字典的步骤](#1.2.3 规则函数变异密码字典的步骤)
[1.2.3.1 实验准备](#1.2.3.1 实验准备)
[1.2.3.2 过滤无效密码](#1.2.3.2 过滤无效密码)
[1.2.3.3 添加数字:使用 和 \^ 函数](#1.2.3.3 添加数字:使用 和 ^ 函数)
[1.2.3.4 添加大写字母:c函数](#1.2.3.4 添加大写字母:c函数)
[1.2.3.5 添加特殊字符:完善密码策略](#1.2.3.5 添加特殊字符:完善密码策略)
[1.2.3.6 部分规则函数总结](#1.2.3.6 部分规则函数总结)
[1.3 基于规则的密码破解实战](#1.3 基于规则的密码破解实战)
[1.3.1 准备工作](#1.3.1 准备工作)
[1.3.1.2 创建哈希文件和规则文件](#1.3.1.2 创建哈希文件和规则文件)
[1.3.1.3 破解执行命令](#1.3.1.3 破解执行命令)
[1.3.2 安全启示](#1.3.2 安全启示)
[1.4 使用Hashcat预定义规则函数](#1.4 使用Hashcat预定义规则函数)
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.密码破解理论与实践
1.1 密码破解流程
详见下一篇文章详细说明。本文先以初步原理结合实践进行表述。
1.2 字典的变异:让密码适用新规则
1.2.1 为什么要进行字典的变异
**🔐 密码策略的演进:**近年来,密码策略越来越严格,普遍要求:
-
最小密码长度(通常8位以上)
-
必须包含多种字符类型:
-
大写字母
-
小写字母
-
特殊字符(如!@#$%)
-
数字
-
⚠️ 传统密码字典的不足:
常用密码字典(如rockyou.txt)中的大多数密码无法满足现代密码策略要求。如果直接用于具有强密码策略的目标,会导致大量无效尝试。
**示例检测:**rockyou.txt前10个密码
| 密码 | 大写字母 | 小写字母 | 特殊字符 | 数字 | 是否符合策略 |
|---|---|---|---|---|---|
| 123456 | ❌ | ✅ | ❌ | ✅ | ❌ |
| 12345 | ❌ | ✅ | ❌ | ✅ | ❌ |
| 123456789 | ❌ | ✅ | ❌ | ✅ | ❌ |
| password | ❌ | ✅ | ❌ | ❌ | ❌ |
| iloveyou | ❌ | ✅ | ❌ | ❌ | ❌ |
| princess | ❌ | ✅ | ❌ | ❌ | ❌ |
| 1234567 | ❌ | ✅ | ❌ | ✅ | ❌ |
| rockyou | ❌ | ✅ | ❌ | ❌ | ❌ |
| 12345678 | ❌ | ✅ | ❌ | ✅ | ❌ |
| abc123 | ❌ | ✅ | ❌ | ✅ | ❌ |
📌 结果 :前10个密码无一同时满足大写字母、特殊字符和数字的要求。
1.2.2 解决方案:创建规则函数
在将字典发送到目标前,通过规则函数自动修改字典中的密码,使其符合密码策略。
规则函数的作用:
-
🔧 添加字符 :在密码末尾/开头添加固定字符(如
!2023) -
🔄 替换字符 :将字母替换为相似数字(如
a→@、o→0) -
🆙 大小写变换:将部分字母转为大写
-
🧩 组合操作:一个规则可包含多个函数
规则文件示例:
$1$2$3 # 在末尾添加数字123
c # 首字母大写
@ # 将a替换为@
📊 基于规则攻击的影响
| 方面 | 说明 |
|---|---|
| ✅ 优势 | 自动化适配密码策略,显著提高命中率 |
| ⚡ 效率 | 现代硬件可轻松处理长度<8位的常见密码变异 |
| 📈 数量增长 | 规则应用会大幅增加尝试的密码数量 |
| 🎯 精准度 | 针对性强,避免无效尝试 |
1.2.3 规则函数变异密码字典的步骤
🎯 实战目标:创建符合密码策略的规则函数
密码策略要求:必须包含数字、特殊字符、大写字母(每种至少一个)
1.2.3.1 实验准备
将rockyou.txt的前十个密码复制并保存到新创建的passwordattacks目录下的demo.txt文件中。
# 创建测试密码文件 demo.txt
123456
12345
123456789
password
iloveyou
princess
1234567
rockyou
12345678
abc123
1.2.3.2 过滤无效密码
bash
# 删除纯数字密码(示例)
$ sed -i '/^[0-9]*$/d' demo.txt
| 组件 | 符号/命令 | 说明 | 类比理解 |
|---|---|---|---|
| 命令主体 | sed |
流编辑器,用于对文本进行流式处理和编辑 | 文字处理器中的"查找替换"功能 |
| 编辑模式 | -i |
就地编辑模式,直接修改源文件,不创建备份 | 直接在原文档上修改,不生成副本 |
| 正则表达式 | /^[0-9]*$/ |
匹配整行都是数字 的行,或者空行 | 查找所有纯数字的行的句子 |
| 操作指令 | d |
删除匹配的行 | 将找到的句子完全删除 |
📝 表达式拆解:/^[0-9]*$/
| 符号 | 名称 | 作用 | 详细说明 |
|---|---|---|---|
/ |
定界符 | 标记正则表达式的开始和结束 | 类似引号,包裹整个表达式 |
^ |
行首锚点 | 匹配行的开头位置 | 确保从行首开始匹配 |
[0-9] |
字符类 | 匹配任意一个数字(0-9) | 相当于 [0123456789] |
* |
量词 | 匹配前一个元素0次或多次 | 可以没有数字,也可以有多个数字 |
$ |
行尾锚点 | 匹配行的结束位置 | 确保匹配到行尾 |
/ |
定界符 | 表达式结束 | 与开头定界符配对 |
**执行后如下:**demo.txt中剩下5个密码。

注意:原示例(sed -i '/^1/d' demo.txt)仅删除以1开头的密码,实际应用中需要根据需求调整过滤规则
1.2.3.3 添加数字:使用 $ 和 ^ 函数
| 函数 | 作用 | 示例 | 结果 |
|---|---|---|---|
$X |
末尾添加字符X | $1 |
password → password1 |
^X |
开头添加字符X | ^3 |
password → 3password |
1.创建规则文件
让我们创建一个包含$1的规则文件 ,以将"1"追加到demo.txt字典中的所有密码尾巴上。
使用这个规则函数创建一个demo.rule。需要使用转义符"\" 来转义特殊字符**"$"**,以便正确地将其输出到文件中,如下:

2.使用规则文件1变形:添加数字
bash
$ hashcat -r demo.rule --stdout demo.txt
| 组件/选项 | 符号 | 说明 | 是否必需 |
|---|---|---|---|
| 命令主体 | hashcat |
密码破解工具,支持多种哈希算法 | ✅ 必需 |
| 规则文件选项 | -r demo.rule |
指定规则文件,定义密码变换规则 | 🔄 可选 |
| 输出模式选项 | --stdout |
将结果输出到屏幕,不进行实际破解 | 🔄 可选 |
| 输入文件 | demo.txt |
原始密码字典文件 | ✅ 必需 |
**执行结果:**所有密码后添加了一个1。

1.2.3.4 添加大写字母:c函数
我们思考一个现实的场景:当被通知需要在密码中强制使用大写字符 时****,**** 许多用户倾向于将第一个字符大写。 因此,我们将在规则文件中添加c规则函数:它将第一个字符大写并将其余字符转换为小写。
| 函数 | 作用 | 示例 | 结果 |
|---|---|---|---|
c |
首字母大写,其余小写 | c |
password → Password |
1.添加规则函数
尝试使用两个规则文件进行示例:demo1.rule和demo2.rule。
两种规则编写方式对比:
① demo1.rule(单行组合规则)
bash
$1 c
执行顺序:先在尾部添加数字1 → 再首字母大写,如下示例:
bash
password → password1 → Password1
② demo2.rule(多行独立规则)
bash
$1
c
生成变体:每个密码生成2个变体,如下示例:
bash
password → password1
password → Password
2.使用规则文件1变形:添加大写字母(及数字)
综上,如下图:

根据这样的情况,目前demo1.rule规则文件制作出来的密码字典已经适应了三个密码策略中的两个。 接下来,继续处理第三个策略:添加一个特殊字符。
1.2.3.5 添加特殊字符:完善密码策略
我们再思考一个场景:当被通知需要在密码中强制使用特殊字符 时****,**** 许多用户倾向于**:**
常见特殊字符添加 :使用$!在末尾添加"!"
1.添加规则函数
| 规则文件 | 规则内容 | 执行顺序 | 示例结果 |
|---|---|---|---|
| demo1.rule | $1 c $! |
数字→大写→特殊 | Password1! |
| demo2.rule | $! $1 c |
特殊→数字→大写 | Password!1 |
🔄 规则执行顺序 :从左到右依次应用
2.使用规则文件变形:添加特殊字符
原始密码: password
经过**$1 c $!规则**处理:
-
password+1→password1 -
首字母大写 →
Password1 -
添加
!→Password1!

✅ 满足所有要求:
-
大写字母:P
-
数字:1
-
特殊字符:!
1.2.3.6 部分规则函数总结
| 函数 | 名称 | 作用 | 常用场景 |
|---|---|---|---|
$X |
追加 | 末尾添加字符X | 添加年份、序号 |
^X |
前置 | 开头添加字符X | 添加前缀标识 |
c |
首字母大写 | 首字母大写其余小写 | 符合大写要求 |
l |
全小写 | 所有字母转小写 | 标准化处理 |
u |
全大写 | 所有字母转大写 | 符合大写要求 |
还有非常多的规则函数 可以到Hashcat Wiki网站进行查询:

1.3 基于规则的密码破解实战
🎯 实战背景和目标:
在目标系统中获取到一个MD5哈希值:f621b6c9eab51a3e2f4e167fee4c6860
已知目标密码策略:必须包含大写字母、数字、特殊字符
目标:找到MD5哈希值的密码明文
1.3.1 准备工作
| 组件 | 路径/内容 | 作用 |
|---|---|---|
| 哈希值 | f621b6c9eab51a3e2f4e167fee4c6860 |
待破解目标 |
| 字典文件 | /usr/share/wordlists/rockyou.txt |
使用基础密码字典 |
| 哈希文件 | crackme.txt |
把目标哈希(f621b...)存入该文件 |
| 规则文件 | demo3.rule |
密码变异规则 |
1.3.1.2 创建哈希文件和规则文件
bash
# 将哈希值保存到文件
$ echo "f621b6c9eab51a3e2f4e167fee4c6860" > crackme.txt
🛠️ 规则文件demo3.rule 设计:
规则策略分析:为满足密码策略(大写字母+数字+特殊字符),设计多层次规则(现实中规则文件会比这个复杂的多):
bash
c # 首字母大写,其余小写
$! # 末尾添加特殊字符 "!"
$1 # 末尾添加数字 "1"
$2 # 末尾添加数字 "2"
$1 $2 $3 # 组合添加数字 "123"
| 规则行 | 作用 | 示例转换 | 策略满足情况 |
|---|---|---|---|
c |
首字母大写 | computer → Computer |
✅ 大写字母 |
$! |
添加特殊字符 | computer → computer! |
✅ 特殊字符 |
$1 |
添加数字1 | computer → computer1 |
✅ 数字 |
$2 |
添加数字2 | computer → computer2 |
✅ 数字 |
$1 $2 $3 |
添加数字序列 | computer → computer123 |
✅ 数字 |

1.3.1.3 破解执行命令
完整命令:
bash
$ hashcat -m 0 crackme.txt /usr/share/wordlists/rockyou.txt -r demo3.rule --force
参数详解表
| 参数 | 值 | 作用 | 重要程度 |
|---|---|---|---|
-m |
0 |
指定哈希类型为 MD5 | 🔴 关键 |
| 目标文件 | crackme.txt |
包含目标哈希的文件 | 🔴 必需 |
| 字典路径 | /usr/share/wordlists/rockyou.txt |
基础密码字典 | 🔴 必需 |
-r |
demo3.rule |
指定规则文件 | 🟡 重要 |
--force |
无值 | 忽略警告,强制运行 | 🟡 可选 |

1.破解流程解析
-
加载字典:读取rockyou.txt中的14,344,391个密码
-
应用规则:为每个原始密码生成3个变体(根据规则函数)
-
计算哈希:对每个密码变体计算MD5哈希
-
比对目标:与目标哈希值比对
-
输出结果:找到匹配项时显示破解结果
计算规模
bash
原始字典:约1400万密码
规则数量:3条规则
总尝试次数:1400万 × 5 = 约4200万次尝试
2.破解结果分析
成功破解,破解出的密码 :Computer123!
策略符合性验证:
| 要求 | 密码 Computer123! |
符合性 |
|---|---|---|
| 大写字母 | C |
✅ |
| 小写字母 | omputer |
✅ |
| 数字 | 123 |
✅ |
| 特殊字符 | ! |
✅ |
| 长度 | 12位 | ✅ |
⏱️ 性能评估:
-
破解时间 :仅用几秒钟
-
运行环境:普通CPU(非GPU加速)
-
效率对比:远快于暴力破解!!!
3.规则攻击效果分析
| 指标 | 数值 | 说明 |
|---|---|---|
| 原始字典大小 | 14,344,391条 | rockyou.txt原始密码数 |
| 规则数量 | 3条 | demo3.rule中的规则 |
| 理论最大变体 | 43,033,173条 | 原始密码×规则数 |
| 实际尝试数 | ≤理论最大值 | Hashcat会去重和优化 |
| 破解时间 | 几秒钟 | CPU环境下 |
| 密码不在原始字典 | 是 | 通过规则生成的新密码 |
1.3.2 安全启示
1.对防御方的启示
| 风险点 | 缓解措施 |
|---|---|
| 规则攻击有效 | 实施更严格的密码策略 |
| 用户习惯可预测 | 教育用户创建真正随机密码 |
| 字典+规则组合强大 | 监控和阻止多次尝试 |
2.对攻击方的价值
| 优势 | 应用场景 |
|---|---|
| 高效率 | 时间有限的渗透测试 |
| 高成功率 | 针对有密码策略的目标 |
| 资源友好 | 无需强大硬件支持 |
重要!
在尝试创建用于变异现有字典的规则时,应始终考虑密码的人类行为和便利性,例如:
大多数用户使用一个主要单词,并将其修改以符合密码策略,可能附加数字和特殊字符。
- 当需要大写字母时,大多数用户将首字母大写
- 当需要数字时,大多数用户将数字添加到密码的末尾,并出现"123"这种好记忆的组合
- 当需要特殊字符时,大多数用户将特殊字符添加到密码的末尾, 并依赖键盘左侧的字符(如:!@#),因为这些数字易于到达和输入
- 还有一些是用户的出生年月、英文名字、好记的绰号等
因此在指定规则函数时,需要多考虑以上的因素作为规则,以便更容易猜出。
1.4 使用Hashcat预定义规则函数
📁 规则文件位置
标准路径 :/usr/share/hashcat/rules/

🎯 预定义规则优势
| 优势 | 说明 |
|---|---|
| 专家验证 | 由安全专家和社区长期优化 |
| 全面覆盖 | 包含各种常见密码变异模式 |
| 即拿即用 | 无需从零创建,节省时间 |
| 实战测试 | 经过大量实际场景验证 |
📊 常用预定义规则示例
| 规则文件 | 规则数量 | 适用场景 | 特点 |
|---|---|---|---|
| best64.rule | 64条 | 通用快速攻击 | 最有效的64条规则 |
| dive.rule | 数千条 | 深度渗透测试 | 全面覆盖各种变异 |
| rockyou-30000.rule | 30,000条 | 针对常见密码 | 基于真实泄露数据 |
| InsidePro-PasswordsPro.rule | 数百条 | 专业渗透测试 | 商业级规则集合 |
⚡ 快速使用示例
bash
# 使用best64规则进行攻击
$ hashcat -m 0 target_hash.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
# 使用多个规则文件
$ hashcat -m 0 target_hash.txt rockyou.txt -r best64.rule -r dive.rule
🔍 规则选择策略
| 场景 | 推荐规则 | 原因 |
|---|---|---|
| 快速初步尝试 | best64.rule |
效率高,覆盖常见模式 |
| 深度渗透测试 | dive.rule |
全面覆盖,不遗漏可能变异 |
| 针对特定目标 | 自定义规则 | 基于已知策略精准打击 |
| 未知环境 | 组合多个规则 | 最大程度覆盖可能性 |
预定义规则是强大的"工具箱",但最有效的攻击永远是"量体裁衣"------基于具体目标信息定制策略。在没有特定情报时,预定义规则提供了最佳起点;获得情报后,应立即转向针对性更强的自定义规则。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
