当前位置: 首页 > news >正文

Keepass恢复明文主密码漏洞(CVE-2023-3278)复现与hashcat爆破学习

写在前面

年初的时候参加一下TUCTF,有几道题觉得很有意思,一直想着复现一下,今天总算落实了

Keepass在国内好像题目还比较少,利用到他CVE的题目更是没看到过

正好keepass、CVE-2023-3278、hashcat都不太熟悉,一起学习一下

以2025 TUCTF Forensics - Bunker为例:

Keepass简介

KeePass是一款开源的密码管理器

用户可以使用管理密码,密钥文件,或者Windows用户帐户作为密钥。

软件对密码数据库采用256位AES算法加密。用户还可以设置密钥被加密的次数,增加该数值来加大被猜解的难度。

检查文件类型

分别是Keepass密码数据库和一个内存转储文件

使用KeePassXC工具打开,发现需要密码,密码应该是从内存转储文件中获取

那么如何从内存转储文件中获取Keepass数据库的密码呢?这就需要用到一个已知的CVE

CVE-2023-3278

漏洞原理

在 2.54 之前的 KeePass 2.x 中,即使工作区被锁定或不再运行,也可以从内存转储中恢复明文主密码

内存转储可以是 KeePass 进程转储、交换文件 (pagefile.sys)、休眠文件 (hiberfil.sys) 或整个系统的 RAM 转储

第一个字符无法恢复

在 2.54 中,有不同的 API 使用和/或随机字符串插入以进行缓解

影响版本

KeePass 2.x < 2.54

漏洞复现

CVE Tool

由于是比较早的CVE,已经有利用工具:

GitHub - JorianWoltjer/keepass-dump-extractor: Find and collect parts of a Keepass master key to recover it in plain text from a memory dump

  1. keepass-dump-extractor.exe Bunker_DMP -f gaps
    1. 尝试恢复明文主密码,第一个字符无法恢复

    2. ●L0Ry_2_M4nk1Nd!_Y0RH4比较有可能是明文密码,可以尝试进行爆破
    hashcat爆破
    keepass2john

    使用keepass2john,先将数据库转换成哈希,以便我们可以继续使用 hashcat 破解它

    keepass2john Bunker_DB > db_hash

    Bunker_DB:$keepass$*2*60000*0*f963995b3319b040ec52881488a3bffa5383c97be0b8f2a436ad4cd7ab923d3c*3b50e2c3a128530f85ebfc1922341b7bfc108d90e89f7afe2d6357b7b7b71464*19a171e7b7cba00389be16fe6b5b91ac*3c0c7179c149fde32f773842a748f271745f1ea31b299af2a09d950f11ee4adc*7406554c88a9dfddb59cc6fee4c50af7c93b6cf6d6d9c50b84dd87db2669d571
    hashcat

    使用hashcat进行爆破,我们已经知道了其他几位,只有第一位不知道,所以可以使用掩码攻击

    hashcat -m 13400 --username db_hash -a 3 "?aL0Ry_2_M4nk1Nd\!_Y0RH4"

    • -m 13400 设置为keepass的模式
    • --username db_hash 设置hash文件,忽略hash文件中的username
    • -a 3 设置为掩码模式

    查看爆破出来的密钥

    hashcat -m 13400 --username db_hash -a 3 "?aL0Ry_2_M4nk1Nd\!_Y0RH4" --show

    成功获取到密钥 gL0Ry_2_M4nk1Nd!_Y0RH4

    Keepass

    用密钥打开数据库,在垃圾桶中发现了一个后门

    查看他的具体信息,发现密码比较奇怪

    REDACTED的意思是“为了模糊或删除敏感信息而做出特殊编辑”,暗示密码已经被修改,所以尝试翻找他的历史记录,看看有没有线索,结果发现确实有个历史记录

    查看一下

    成功获得flag:TUCTF{Th1s_C4nn0T_ConT1nu3}

    • hashcat 暴力破解详细教程(附常见案例)
    • TUCTF 2024 Writeup - よっちんのブログ
    • https://medium.com/@nathanielpascuarijndorp/tuctf-24-complete-digital-forensics-writeup-ca05ff3e526d
    • 2025 TUCTF - deciphr
    http://www.dtcms.com/a/99874.html

    相关文章:

  2. Array数组常用方法总结(javascript版)
  3. SpringBoot的自动装配原理
  4. Redis-常用命令
  5. Spring 过滤器(Filter)和过滤器链(Filter Chain)完整示例,包含多个过滤器和Filter 生命周期
  6. 简单介绍一下Unity中的material和sharedMaterial
  7. PipeWire 音频设计与实现分析三——日志子系统
  8. vxe-table 设置单元格可编辑无效问题解决
  9. 网络传输优化之多路复用与解复用
  10. 流动的梦境:GPT-4o 的自回归图像生成深度解析
  11. 聚焦应用常用功能,提升用户体验与分发效率
  12. 桥接模式_结构型_GOF23
  13. day17 学习笔记
  14. Gateway实战入门(四)、断言-请求头以及请求权重分流等
  15. Kafka 多线程开发消费者实例
  16. 第四天 文件操作(文本/CSV/JSON) - 异常处理机制 - 练习:日志文件分析器
  17. 【Python】基于 qwen_agent 构建 AI 绘画智能助手
  18. Linux 文件存储和删除原理
  19. Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能
  20. Kafka消息丢失全解析!原因、预防与解决方案
  21. 如何查看 SQL Server 的兼容性级别
  22. 基于ruoyi快速开发平台搭建----超市仓库管理(修改记录1)
  23. 《C++11:通过thread类编写C++多线程程序》
  24. 编辑器场景视窗扩展
  25. SpringBean模块(一)定义如何创建生命周期
  26. 《C++Linux编程进阶:从0实现muduo 》-第6讲.C++死锁问题如何分析调试-原子操作,互斥量,条件变量的封装
  27. 稻壳模板下载器(Windows):免费获取WPS稻壳模板的利器
  28. Java中优先级队列的实现
  29. 蓝桥杯备考------>双指针(滑动窗口)
  30. 华为OD机试2025A卷 - 最大值(Java Python JS C++ C )
  31. PyTorch 2.6.0没有对应的torch-sparse版本,不要下载pytorch最新版本,否则用不了图神经网络torch_geometric