#keepass #extract #passwords #false-positives #plain-text #memorydump

bin+lib keepass-dump-extractor

在内存转储中查找并收集 Keepass 主密钥的部分,以将其从纯文本中恢复

1 个不稳定版本

0.1.0 2024年2月1日

#2486命令行工具

MIT/Apache

13KB
170

Keepass 内存转储提取器

在内存转储中查找并收集 Keepass 主密钥的部分,以将其从纯文本中恢复

当输入主密钥以解锁 KeePass 数据库时,输入框的值会存储在内存中。虽然使用 '●' 字符将其视觉上隐藏,但最后一个字符在内存中短暂可见,并持续存储在那里(CVE-2023-3278,于 2023 年 6 月 3 日发布的 KeePass 2.54 中修复)。这使得可以在内存转储中找到如下字符串

s
●e
●●c
●●●r
●●●●e
●●●●●t

此工具找到此类字符串并将它们组合成单个密码。由于内存转储中的噪声或重新输入,它还会打印一些误报(尤其是对于较早的字符),但使用暴力破解或一点常识应该很容易过滤掉这些误报。

它与现有工具(如 keepass-password-dumperkeepass-dump-masterkey)不同,具有各种有用的输出格式,以及提取 UTF16 编码中的非 ASCII 字符的能力。如果主密钥使用像 'ø' 这样的 Unicode 字符,此工具也将能够找到这些字符(iykyk)。

安装

cargo install keepass-dump-extractor

或者从 发行版 页面下载并提取预编译的二进制文件。

常见用法

此攻击需要 KeePass 进程的内存转储,并可以生成所有可能的密钥来解锁 keepass 数据库文件(.kdbx)。使用以下命令,您可以生成词表,从数据库中提取哈希,并使用词表进行破解

keepass-dump-extractor KeePassDumpFull.dmp -f all > wordlist.txt

keepass2john passwords.kdbx > passwords.kdbx.hash
hashcat -m 13400 --username passwords.kdbx.hash wordlist.txt

使用此方法,您应在几秒钟内找到密码,如果大多数输入的主密钥都包含在内存转储中。然而,对于信息有限的情况,一些不同的输出格式可能允许您手动找到合适的内容。

输出格式

使用 -f (--format) 选项,您可以选择最适合您用例的输出格式。以下是它的可能值

警告:以下输出示例通过添加一个字符被人工使其更清晰,但在现实中,由于内存转储中的前缀'●'不易识别,第一个字符无法恢复。

(默认)found:直接打印关于密码的所有提示

去重并按出现次数对未知数进行排序,因此第一个字符很可能是正确的。
例如

s
●e
●3
●●c
●●●r
●●●●e
●●●●3
●●●●●t

gaps:将提示汇总到完整大小,为未知字符留下空位

将位置分组在一起,每次排列一个位置。按出现次数排序,因此第一个字符很可能是正确的。对于手动比较哪些字母最适合在已知字母之间很有用。
例如

secr●t
s3cr●t
s●cret
s●cr3t

all:打印密码的所有可能排列

使用未知字符,它生成“笛卡尔积”,意味着输出所有可能的密码。这对于为hashcat等破解工具生成单词列表很有用。
例如

secret
s3cret
secr3t
secr3t

raw:以原始结果写入所有找到的信息

以工具解析的格式打印原始结果,这对于脚本很有用。这也是查看内存转储中字符在特定位置出现的次数的唯一方式,通常这只能在顺序中看到。
例如

10	0	s
10	1	e
2	1	3
10	2	c
10	3	r
1	4	3
10	4	e
10	5	t

依赖项

~1.6–2.3MB
~43K SLoC