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}

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    Neolock

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值