Password Filter DLL在渗透测试中的应用
字数 1380 2025-08-29 08:32:09

Password Filter DLL在渗透测试中的应用

0x00 概述

Password Filter DLL是Windows系统提供的一种机制,用于增强密码策略的复杂性要求。本文详细介绍了Password Filter DLL的工作原理、开发方法、安装配置以及在渗透测试中的多种应用场景。

0x01 Password Filter DLL简介

基本概念

Password Filter DLL通过以下方式增强密码安全性:

  • 自定义密码复杂度要求
  • 在密码更改时进行验证
  • 系统管理员可配置使用

系统策略位置

gpedit.msc -> 本地计算机策略 -> 计算机配置 -> Windows设置 -> 安全设置 -> 帐户策略 -> 密码策略 -> 密码必须符合复杂性要求

默认配置:

  • 域控制器:启用
  • 独立服务器:禁用

0x02 Password Filter DLL开发

必需函数

Password Filter DLL必须实现以下三个导出函数:

  1. InitializeChangeNotify

    BOOLEAN InitializeChangeNotify(void);
    
  2. PasswordChangeNotify

    NTSTATUS PasswordChangeNotify(
      In PUNICODE_STRING UserName,
      In ULONG RelativeId,
      In PUNICODE_STRING NewPassword);
    
  3. PasswordFilter

    BOOLEAN PasswordFilter(
      In PUNICODE_STRING AccountName,
      In PUNICODE_STRING FullName,
      In PUNICODE_STRING Password,
      In BOOLEAN SetOperation);
    

关键特性

  • 所有函数都能获取明文密码
  • PasswordFilter返回TRUE表示密码符合要求,FALSE则拒绝密码修改
  • 需要显式声明为导出函数

参考POC

GitHub示例项目:3gstudent/PasswordFilter

功能:

  • 通过PasswordChangeNotifyPasswordFilter记录明文密码
  • 日志保存在c:\logFile1c:\logFile2
  • 使用%wZ输出PUNICODE_STRING类型

0x03 Password Filter DLL安装

安装步骤

  1. 注册表修改

    • 路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
    • 键值:Notification Packages
    • 添加DLL名称(不含.dll后缀)

    命令行操作示例:

    REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages"
    REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "scecli\0rassfm\0Win32Project3" /f
    
  2. 文件放置

    • 将DLL复制到%windir%\system32\
  3. 组策略配置

    • 确保"密码必须符合复杂性要求"已启用
  4. 系统重启

    • 必须重启系统才能生效

0x04 渗透测试应用场景

1. 记录明文密码

域环境应用:

  • 针对域控服务器
  • 优势:域控默认启用密码复杂性要求
  • 不足:需要重启域控服务器

扩展功能:

2. 后门功能

  • 修改DLL为Meterpreter加载器
  • 任何用户修改密码时触发
  • 获取高权限shell

0x05 非Windows Server系统应用

特殊考虑

  1. 检查组策略配置

    secedit /export /cfg gp.inf /quiet
    
    • 查看gp.inf中的PasswordComplexity
    • 1=启用,0=禁用
  2. 启用密码复杂性要求

    • 修改gp.infPasswordComplexity=1
    • 导入配置:
      secedit /configure /db gp.sdb /cfg gp.inf /quiet
      
    • 立即生效:
      gpupdate/force
      

0x06 防御与检测

检测方法

  1. 检查%windir%\system32\下的可疑DLL
  2. 检查注册表键值:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
    
    下的Notification Packages
  3. 检查lsass.exe进程加载的DLL

0x07 总结

Password Filter DLL作为系统合法功能,在获得管理员权限后可被用于:

  • 记录所有用户密码更改(包括未登录用户)
  • 作为持久化后门
  • 在域环境和非Server系统中均可应用

防御关键在于监控相关注册表项和系统目录下的DLL文件。

Password Filter DLL在渗透测试中的应用 0x00 概述 Password Filter DLL是Windows系统提供的一种机制,用于增强密码策略的复杂性要求。本文详细介绍了Password Filter DLL的工作原理、开发方法、安装配置以及在渗透测试中的多种应用场景。 0x01 Password Filter DLL简介 基本概念 Password Filter DLL通过以下方式增强密码安全性: 自定义密码复杂度要求 在密码更改时进行验证 系统管理员可配置使用 系统策略位置 默认配置: 域控制器:启用 独立服务器:禁用 0x02 Password Filter DLL开发 必需函数 Password Filter DLL必须实现以下三个导出函数: InitializeChangeNotify PasswordChangeNotify PasswordFilter 关键特性 所有函数都能获取明文密码 PasswordFilter 返回TRUE表示密码符合要求,FALSE则拒绝密码修改 需要显式声明为导出函数 参考POC GitHub示例项目: 3gstudent/PasswordFilter 功能: 通过 PasswordChangeNotify 和 PasswordFilter 记录明文密码 日志保存在 c:\logFile1 和 c:\logFile2 使用 %wZ 输出PUNICODE_ STRING类型 0x03 Password Filter DLL安装 安装步骤 注册表修改 路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 键值: Notification Packages 添加DLL名称(不含.dll后缀) 命令行操作示例: 文件放置 将DLL复制到 %windir%\system32\ 组策略配置 确保"密码必须符合复杂性要求"已启用 系统重启 必须重启系统才能生效 0x04 渗透测试应用场景 1. 记录明文密码 域环境应用: 针对域控服务器 优势:域控默认启用密码复杂性要求 不足:需要重启域控服务器 扩展功能: 将密码发送到远程服务器 参考代码: malicious.link示例 2. 后门功能 修改DLL为Meterpreter加载器 任何用户修改密码时触发 获取高权限shell 0x05 非Windows Server系统应用 特殊考虑 检查组策略配置 查看 gp.inf 中的 PasswordComplexity 项 1=启用,0=禁用 启用密码复杂性要求 修改 gp.inf 中 PasswordComplexity=1 导入配置: 立即生效: 0x06 防御与检测 检测方法 检查 %windir%\system32\ 下的可疑DLL 检查注册表键值: 下的 Notification Packages 检查 lsass.exe 进程加载的DLL 0x07 总结 Password Filter DLL作为系统合法功能,在获得管理员权限后可被用于: 记录所有用户密码更改(包括未登录用户) 作为持久化后门 在域环境和非Server系统中均可应用 防御关键在于监控相关注册表项和系统目录下的DLL文件。