写在前面
年初的时候参加一下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,已经有利用工具:
keepass-dump-extractor.exe Bunker_DMP -f gaps
- 尝试恢复明文主密码,第一个字符无法恢复
- 尝试恢复明文主密码,第一个字符无法恢复
●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}