DLLPasswordFilterImplant 是一个自定义密码过滤器 DLL,用于捕获用户凭据。域中的每次密码更改事件都会触发已注册的 DLL,以便在凭据成功更改到 Active Directory (AD) 之前,外泄用户名和新密码值。
有关密码过滤器的更多信息,请参阅 Microsoft 文档。
为目标架构创建 DLL。32 位系统编译 32 位版本,64 位系统编译 64 位版本。
将 DLL 复制到 Windows 安装目录。(默认文件夹:\Windows\System32)
通过更新以下注册表项来注册密码过滤器:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
如果 Notification Packages 子项已存在,请将 DLL 的名称(如果未重命名则为 "DLLPasswordFilterImplant")添加到现有值数据中。不要覆盖现有值。
如果该子项不存在,则创建它并将 DLL 的名称(如果未重命名则为 "DLLPasswordFilterImplant")添加到值数据中。
注意: 在 Notification Packages 子项中添加 DLL 名称时,不要包含 .dll 扩展名。
配置用于加密凭据的公钥。
KEY=key.pem
# 生成 RSA 密钥并转储其公钥。保留私钥用于解密。
openssl genrsa -out $KEY 2048
# 准备 Windows 注册表项条目。
echo 'Windows Registry Editor Version 5.00' > addKey.reg
echo >> addKey.reg
echo '[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]' >> addKey.reg
# 如果不存在 python2,请改用 `python`。
echo "Key=hex:$(openssl rsa -in $KEY -pubout | sed -E '/^\-/d' | base64 -d | python2 -c 'import sys; print(",".join(["{:02x}".format(ord(b)) for b in sys.stdin.read()]))')" >> addKey.reg
然后可以运行 addKey.reg 文件将原始公钥追加到注册表中。
请注意,使用非对称加密会由于消息填充而显著增加要外泄的数据大小。有改进的空间来减少数据开销。
重启系统 来源
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
加密数据使用 OAEP 填充,可按如下方式解密:
# 将拼接的十六进制字符串转换为原始字节。
xxd -r -p exfiltrated.hex > raw.bin
# 使用私钥解密。
openssl rsautl -decrypt -oaep -inkey $KEY -in raw.bin -out decrypted.txt
要完全移除系统中的密码过滤器:
通过更新以下注册表项来注销密码过滤器:
HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Lsa
在 Notification Packages 子项中,从现有值数据中删除 DLL 的名称。不要删除其他现有值。
重启系统
在 Windows 安装目录(默认文件夹:\Windows\System32)中,找到密码过滤器 DLL(如果未重命名则为 "DLLPasswordFilterImplant.DLL")并删除该文件。
scripts/ 目录中提供了一个简单的 DNS 服务器来接收外泄的数据。运行 pip install -r scripts/requirement.txt(最好在虚拟环境中),然后用一个 .PEM 编码的私钥和可选的输出文件(默认为 creds.txt)来输出凭据。
目前,该 DNS 服务器不支持并发密码更改,仅作为概念验证。欢迎提交增加服务器鲁棒性的 Pull Request。
适用于:
密码过滤器仅在上列系统上测试过。
以下是一些可能有助于调试 DLL 的工具(如果需要):