❿⁄₄ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击 ➱ 密码破解理论(中)

**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。

🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬

🌌 立即前往 👉晖度丨安全视界🚀​​​

​​​

▶ 信息收集

▶ 漏洞检测
▶ 初始立足点 ➢ 密码攻击 ➢ 密码破解理论(中)🔥🔥🔥

▶ 权限提升

▶ 横向移动

▶ 报告/分析

▶ 教训/修复

目录

1.密码破解理论与实践

[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.使用规则文件1变形:添加数字

[1.2.3.4 添加大写字母:c函数](#1.2.3.4 添加大写字母:c函数)

1.添加规则函数

2.使用规则文件1变形:添加大写字母(及数字)

[1.2.3.5 添加特殊字符:完善密码策略](#1.2.3.5 添加特殊字符:完善密码策略)

1.添加规则函数

2.使用规则文件变形:添加特殊字符

[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.破解流程解析

2.破解结果分析

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 passwordpassword1
^X 开头添加字符X ^3 password3password
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 passwordPassword
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 $!规则**处理:

  1. password + 1password1

  2. 首字母大写 → Password1

  3. 添加!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 首字母大写 computerComputer ✅ 大写字母
$! 添加特殊字符 computercomputer! ✅ 特殊字符
$1 添加数字1 computercomputer1 ✅ 数字
$2 添加数字2 computercomputer2 ✅ 数字
$1 $2 $3 添加数字序列 computercomputer123 ✅ 数字

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.破解流程解析
  1. 加载字典:读取rockyou.txt中的14,344,391个密码

  2. 应用规则:为每个原始密码生成3个变体(根据规则函数)

  3. 计算哈希:对每个密码变体计算MD5哈希

  4. 比对目标:与目标哈希值比对

  5. 输出结果:找到匹配项时显示破解结果

计算规模

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 全面覆盖,不遗漏可能变异
针对特定目标 自定义规则 基于已知策略精准打击
未知环境 组合多个规则 最大程度覆盖可能性

预定义规则是强大的"工具箱",但最有效的攻击永远是"量体裁衣"------基于具体目标信息定制策略。在没有特定情报时,预定义规则提供了最佳起点;获得情报后,应立即转向针对性更强的自定义规则。

欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论

每一份支持,都是我持续输出的光。

相关推荐
学网安的肆伍12 小时前
个人实验:常见端口风险详解 + NMAP 内网实战扫描教程
安全·网络安全·资产扫描
深邃-14 小时前
【Web安全】-基础环境安装:虚拟机安装,JDK环境安装(1)
java·开发语言·计算机网络·安全·web安全·网络安全·安全架构
bluechips·zhao1 天前
帝国CMS 8.0 安全审计分析——代码审计
安全·网络安全·代码审计
W.A委员会1 天前
常见网络攻击
网络·http·网络安全
大方子1 天前
【好靶场】ETag权限混淆漏洞
网络安全·好靶场
老张的张Z1 天前
CISSP 域6知识点 安全测试方法
安全·信息安全·cissp
星依网络1 天前
紧急预警!Redis未授权访问漏洞利用与防护实战指南
网络安全
PinTrust SSL证书1 天前
Geotrust企业型OV通配符SSL
网络协议·网络安全·小程序·https·云计算·ssl
Chengbei111 天前
Fortify_SCA_26.1版下载(OpenText SAST(Fortify SCA)26.1 windows/Linux/Mac)全版本下载
运维·安全·web安全·macos·网络安全·系统安全·代码审计
网络安全许木2 天前
自学渗透测试第18天(Powershell与远程连接)
linux·网络安全·渗透测试·kali linux