**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测
▶ 初始立足点 ➢ 密码攻击 ➢ 提取密码管理器KeePass主密码 (上)🔥🔥🔥▶ 权限提升
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
[1.1 破解密码管理器KeePass:提取主密码](#1.1 破解密码管理器KeePass:提取主密码)
[1.1.1 场景与目标](#1.1.1 场景与目标)
[1.1.2 实践具体步骤](#1.1.2 实践具体步骤)
[1.1.2.1 通过RDP连接目标主机](#1.1.2.1 通过RDP连接目标主机)
[1.1.2.2 检查是否安装 KeePass](#1.1.2.2 检查是否安装 KeePass)
[1.1.2.3 在全盘搜索 .kdbx 数据库文件](#1.1.2.3 在全盘搜索 .kdbx 数据库文件)
[②.kdbx 文件的安全性如何?](#②.kdbx 文件的安全性如何?)
[③生成 keepass.hash 的过程(破解准备)](#③生成 keepass.hash 的过程(破解准备))
[1.1.2.4 将文件转换为Hashcat可用的格式](#1.1.2.4 将文件转换为Hashcat可用的格式)
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.密码破解实践
1.1 提取密码管理器KeePass主密码
1.1.1 场景与目标
密码管理器(如 KeePass、1Password )能帮助用户管理大量复杂密码,但主密码一旦被破解,将导致所有存储密码泄露,给组织带来巨大风险。
假设 :我们可以远程到目标工作站(SALESWK01)的访问权限,并拥有用户 jason 的凭据。我们远程登录到系统桌面。
目标:
-
✅ 提取密码管理器的数据库文件
-
🔄 将其转换为可破解的格式
-
🛠️ 破解主数据库密码
1.1.2 实践具体步骤
1.1.2.1 通过RDP连接目标主机
-
使用 jason 的凭据,通过远程桌面(RDP)连接到
192.168.50.203(SALESWK01)。 -
成功登录后,进入 Windows 桌面环境。
💡 提示:图形化界面(GUI)的访问为我们后续的手动搜索提供了便利。
1.1.2.2 检查是否安装 KeePass
由于拥有 GUI 访问权限,我们使用系统内置的"应用和功能"列表进行查看:
-
点击 Windows 开始菜单。
-
输入
app,选择 "添加或删除程序"。 -
在已安装程序列表中滚动查找。
发现 :列表中明确显示 KeePass 已安装。

🔍 研究得知 :查阅网上资料发现,KeePass的数据库通常保存为扩展名为 .kdbx 的文件。同时,系统上也可能有多个这样的数据库。例如,不同部门、不同业务的这类数据库。
1.1.2.3 在全盘搜索 .kdbx 数据库文件
1.kdbx数据库文件介绍
我们扮演 "数字侦探" ,在文件系统中进行地毯式搜索之前,我们了解下.kdbx数据库文件。
①什么是.kdbx文件?
.kdbx 文件是 KeePass 密码管理器 的专用数据库文件,相当于一个 "数字保险箱" 。它通过强加密技术保护存储在内的++所有用户名、密码及其他敏感信息++ ,**只有输入正确的++主密码++**才能解锁访问。
.kdbx 文件中存储哪些内容?
| 存储项 | 说明 | 类比 |
|---|---|---|
| 密码条目 | 每个账户的 用户名、密码、URL、备注、标签 等 | 保险箱中的一个个"小抽屉" |
| 组结构 | 用于分类管理(如工作、社交、个人等)的文件夹 | 保险箱内的"分层隔板" |
| 加密密钥 | 用于解密数据的密钥信息(需主密码或密钥文件激活) | 保险箱的"锁芯机制" |
| 附加数据 | 文件附件、自定义字段等额外信息 | 藏在抽屉里的"夹层" |
| 自动生成密码 | KeePass 生成的强密码记录 | 保险箱自带的"密码配方" |
②.kdbx 文件的安全性如何?
-
强加密保障 :文件使用 AES 或ChaCha20 等强加密算法,即使文件被窃取,也无法直接读取内容。
-
双因子解锁 :需要提供 主密码 或 密钥文件(或两者结合)才能解密。
-
本地化存储:数据通常保存在本地,不依赖云端,减少了远程攻击风险。
⚠️ 核心风险:一旦主密码被破解,整个"保险箱"将完全暴露。
③生成 keepass.hash 的过程(破解准备)
这是将 加密数据库 转换为 可破解格式的关键步骤:
| 步骤 | 输入 → 输出 | 工具 | 目的 |
|---|---|---|---|
| 1. 提取哈希 | .kdbx 文件 → keepass.hash 文本文件 |
keepass2john |
从加密数据库中提取出代表主密码的加密哈希值 |
| 2. 哈希内容 | 包含主密码的哈希值 + 加密参数(如迭代次数、盐值等) | - | 为后续破解工具提供标准化输入 |
| 3. 准备破解 | keepass.hash → 交给 John the Ripper / Hashcat | 密码破解工具 | 通过离线爆破 尝试还原主密码 |
🎯 关键理解
-
keepass.hash不是密码本身 ,而是可用于 "测试主密码是否匹配" 的加密数据包。
-
这个过程相当于为保险箱的锁 制作了一个"测试模型",攻击者可以在不触动原锁的情况下,无限次尝试破解密码。
💡 形象比喻:整个流程如同窃贼偷走保险箱(获取.kdbx),拆下它的锁芯制作成测试工具(生成hash),然后在自己的作坊里反复试验密码(Hashcat破解),直到打开锁芯(获得主密码)。
掌握了.kdbx文件的本质与哈希提取原理,就为后续的实际破解操作奠定了坚实基础。接下来,即可使用Hashcat等工具,对提取出的哈希发起针对性攻击。
2.搜索.kdbx文件
在了解后,我们开始搜索系统上的所有.kdbx文件来定位数据库文件。打开 PowerShell,执行以下关键命令:
bash
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue
🔎 命令详解表
| 参数 / 选项 | 作用说明 |
|---|---|
Get-ChildItem |
获取指定路径下的项目(文件/文件夹) |
-Path C:\ |
搜索起点:从C盘根目录开始 |
-Include *.kdbx |
过滤条件 :只查找 .kdbx 扩展名的文件 |
-File |
仅返回文件,排除文件夹 |
-Recurse |
递归搜索:深入所有子目录 |
-ErrorAction SilentlyContinue |
静默错误:遇到权限错误等继续执行,不中断 |
执行结果

成功运行后,输出显示在 jason用户的Documents文件夹 中发现了一个 .kdbx 数据库文件。

🎯 关键收获 :我们找到了 "宝藏图" ------ 密码数据库文件!
3.把找到的.kbdx文件移到kali上
为进行下一步的密码破解,我们需要将找到的 .kdbx 文件传输到我们的Kali攻击机上。可使用多种方法,如:
-
HTTP下载(在Kali开启简易HTTP服务器)
-
SCP(如果网络策略允许)
-
共享文件夹(通过RDP挂载)
1.1.2.4 将文件转换为Hashcat可用的格式
我们已经成功提取了密码数据库文件,现在需要将其转换 为破解工具能够识别的标准格式 ,这是破解流程中的关键预处理步骤。
1.使用转换脚本生成哈希文件
工具选择:keepass2john:
**注:**John the Ripper(JtR)套件提供了一系列专用转换脚本,专门用于处理各种加密文件的格式转换:
脚本名称 处理文件类型 作用 keepass2john KeePass数据库(.kdbx) 提取加密哈希 ssh2john SSH密钥文件 提取SSH密钥哈希 pdf2john PDF加密文件 提取PDF密码哈希 rar2john RAR压缩文件 提取RAR密码哈希
这些脚本默认已安装在Kali上,无需额外安装。
执行转换命令:.kdbx转换为.hash
bash
keepass2john Database.kdbx > keepass.hash
-
keepass2john:转换脚本的名称 -
Database.kdbx:输入的KeePass数据库文件 -
>:输出重定向符号 -
keepass.hash:保存哈希结果的文本文件
转换结果:

📝 注意 :上图输出中的"Database:"前缀是JtR脚本自动添加的,作为哈希的标识部分。并非实际的前缀,因此破解时需要去掉。
2.keepass.hash文件结构解析

①哈希结构视觉化表示
bash
Database:$keepass$*2*60*0*salt*param1*param2*hash1*hash2
├───┬─────┬──┬──────┬─┬───┬──────┬──────┬──────┬───────
标识 │算法 │版本│迭代 │保护│盐值 │参数1 │参数2 │哈希1 │哈希2
②哈希字段详细解析表
| 字段位置 | 字段内容示例 | 含义说明 | 安全作用 |
|---|---|---|---|
| 前缀标识 | Database: |
JtR脚本自动添加的文件名标识,作为"用户名"占位符 | 标识哈希来源,便于多目标管理 |
| 哈希类型 | $keepass$ |
指示此为KeePass数据库哈希 | 明确哈希算法家族 |
| 版本号 | *2 |
KeePass加密版本(1=1.x,2=2.x) | 确定加密算法和参数 |
| 迭代次数 | *60 |
密码哈希计算复杂度参数,数值越大破解越耗时 | 增加暴力破解难度,延缓攻击速度 |
| 额外保护 | *0 |
是否启用密钥文件等额外保护(0=未启用) | 提供第二重认证保护 |
| 盐值(Salt) | *d74e29a727...ec6bd |
随机生成的唯一值,防止彩虹表攻击 | 使相同密码产生不同哈希值 |
| 计算参数1 | *04b0bfd787...0cfba |
主密码哈希计算中的中间值或密钥参数 | 参与加密过程的特定参数 |
| 计算参数2 | *5273cc73b9...d2ba47 |
数据库特定的加密配置数据 | 定制化加密参数 |
| 加密哈希1 | *1dcad0a3e5...1ddb9 |
与密钥或数据库内容相关的加密哈希 | 验证数据完整性的校验值 |
| 加密哈希2 | *17c3ebc9c4...496c1 |
加密过程或配置的附加数据 | 提供额外安全层 |
③破解难点分析
多层防御架构: 每个组件都增加了破解的复杂性,形成纵深防御体系。
bash
主密码 + 盐值 + 迭代次数 + 随机参数 → 最终加密哈希
关键防护要素:
-
🔑 盐值(Salt):确保相同密码在不同数据库中有不同哈希值
-
⚙️ 迭代次数:通过计算延迟增加破解成本(60000次迭代约需0.5-1秒)
-
🛡️ 版本标识:明确使用KeePass 2.x的现代加密标准
| 防护措施 | 对攻击者的影响 | 绕过难度 |
|---|---|---|
| 高迭代次数 | 显著延长每次猜测的验证时间 | ⭐⭐⭐⭐⭐ |
| 唯一盐值 | 使彩虹表攻击完全失效 | ⭐⭐⭐⭐⭐ |
| 多参数组合 | 增加哈希计算的复杂性 | ⭐⭐⭐⭐ |
| 强加密算法 | 需要专用破解工具和大量计算资源 | ⭐⭐⭐⭐ |
④关键要点总结
-
keepass.hash是加密快照:包含验证主密码所需的所有参数,但不是密码本身
-
格式标准化:删除"Database:"前缀是Hashcat兼容性的关键步骤
-
多层防御:每个星号分隔的部分都代表一层安全防护
-
离线攻击:哈希文件允许攻击者在不接触原数据库的情况下无限次尝试
理解哈希结构是成功破解的前提,也是评估数据库安全性的基础。掌握了这些信息,攻击者可以更有针对性地选择破解策略,而防御者则可以更好地加固自己的密码数据库。
3.进一步修改哈希文件
虽然keepass2john生成的哈希文件可以被John the Ripper直接使用,但Hashcat对输入格式有更严格的要求。Hashcat期望一个"纯净"的哈希值,不包含额外的标识信息。
修改操作:删除前缀
使用文本编辑器(如nano、vim)打开keepass.hash文件,删除开头的 Database: 字符串:
修改前:
bash
Database:$keepass$*2*60000*0*e4d1cee5a799d3e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c*...
修改后:
bash
$keepass$*2*60000*0*e4d1cee5a799d3e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c2e5c*...

为什么需要删除"Database:"?
| 工具 | 要求格式 | 原因 |
|---|---|---|
| John the Ripper | 可以包含用户名:哈希格式 |
设计用于同时破解用户名/密码对 |
| Hashcat | 仅需要哈希值本身 | 专注于纯哈希破解,格式更简洁 |
🔍 技术细节 :对于KeePass数据库,实际上并没有"用户名"的概念,只有主密码。
keepass2john添加的"Database:"只是一个占位符,需要移除以确保Hashcat正确解析。
📋 格式转换步骤总结:
| 步骤 | 输入 → 输出 | 关键命令 | 注意事项 |
|---|---|---|---|
| 1. 提取哈希 | .kdbx → keepass.hash |
keepass2john Database.kdbx > keepass.hash |
生成JtR格式哈希 |
| 2. 清理格式 | keepass.hash → keepass_hashcat.hash |
sed -i 's/^Database://' keepass.hash |
必须删除"Database:"前缀 |
| 3. 验证格式 | 检查最终哈希文件 | cat keepass_hashcat.hash |
确认格式为$keepass$*... |
**✅ 当前状态,**已经完成了:
-
数据库文件提取 ✅
-
哈希格式转换 ✅
➡️ 下一步:
-
使用Hashcat加载哈希文件
-
选择合适的攻击模式(字典攻击、组合攻击、暴力破解等)
-
配置破解参数(哈希类型、迭代次数等)
-
开始实际破解主密码
提示
备份原文件 :在进行格式修改前,建议备份原始的
keepass.hash文件,以防修改错误。哈希类型识别 :使用
hashcat --help | grep KeePass可以查看Hashcat支持的KeePass哈希格式代码,通常为13400(KeePass 1)或13400(KeePass 2)。批量处理:如果遇到多个.kdbx文件,可以编写脚本批量转换,提高效率。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
