郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋点赞| 能量注入 ❤️关注| 信号锁定 🔔收藏| 数据归档 ⭐️评论| 保持连接💬
🌌立即前往👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测
▶ 初始立足点 ➢ 密码攻击 ➢ 密码破解理论(中)🔥🔥🔥
▶ 权限提升
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
1.密码破解理论与实践
1.1 密码破解流程
1.2 字典的变异:让密码适用新规则
1.2.1 为什么要进行字典的变异
1.2.2 解决方案:创建规则函数
1.2.3 规则函数变异密码字典的步骤
1.2.3.1 实验准备
1.2.3.2 过滤无效密码
1.2.3.3 添加数字:使用 $ 和 ^ 函数
1.创建规则文件
2.使用规则文件1变形:添加数字
1.2.3.4 添加大写字母:c函数
1.添加规则函数
2.使用规则文件1变形:添加大写字母(及数字)
1.2.3.5 添加特殊字符:完善密码策略
1.添加规则函数
2.使用规则文件变形:添加特殊字符
1.2.3.6 部分规则函数总结
1.3 基于规则的密码破解实战
1.3.1 准备工作
1.3.1.2 创建哈希文件和规则文件
1.3.1.3 破解执行命令
1.破解流程解析
2.破解结果分析
3.规则攻击效果分析
1.3.2 安全启示
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 abc1231.2.3.2 过滤无效密码
# 删除纯数字密码(示例) $ 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变形:添加数字
$ 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(单行组合规则)
$1 c执行顺序:先在尾部添加数字1 → 再首字母大写,如下示例:
password → password1 → Password1② demo2.rule(多行独立规则)
$1 c生成变体:每个密码生成2个变体,如下示例:
password → password1 password → Password2.使用规则文件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 创建哈希文件和规则文件
# 将哈希值保存到文件 $ echo "f621b6c9eab51a3e2f4e167fee4c6860" > crackme.txt🛠️ 规则文件demo3.rule设计:
规则策略分析:为满足密码策略(大写字母+数字+特殊字符),设计多层次规则(现实中规则文件会比这个复杂的多):
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 破解执行命令
完整命令:
$ 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哈希
比对目标:与目标哈希值比对
输出结果:找到匹配项时显示破解结果
计算规模
原始字典:约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 | 数百条 | 专业渗透测试 | 商业级规则集合 |
⚡ 快速使用示例
# 使用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 | 全面覆盖,不遗漏可能变异 |
| 针对特定目标 | 自定义规则 | 基于已知策略精准打击 |
| 未知环境 | 组合多个规则 | 最大程度覆盖可能性 |
预定义规则是强大的“工具箱”,但最有效的攻击永远是“量体裁衣”——基于具体目标信息定制策略。在没有特定情报时,预定义规则提供了最佳起点;获得情报后,应立即转向针对性更强的自定义规则。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。