Yokaay/PlayDoh-ACL

GitHub: Yokaay/PlayDoh-ACL

一款Windows原生命令行工具,整合Win32和ADSI API,用于审计和修改Active Directory对象及Windows服务的访问控制列表,支持扩展权限GUID映射和凭据模拟。

Stars: 0 | Forks: 0

# PDAcl – Play-Doh ACL Play-Doh ACL (PDAcl) 是一款基于 Windows 的命令行工具,帮助用户检查和修改附加到 Active Directory (AD) 对象和 Windows 服务的访问控制列表 (ACL)。它将底层 Win32 和 ADSI API 整合到单个可执行文件中,支持脚本化操作,允许您在不打开 GUI 控制台的情况下添加、删除或审计权限。 PDAcl 目前支持三种重点关注的工作流: - `ADE`:管理 AD **扩展权限**(由 GUID 处理的控制访问权限)。 - `AD`:管理经典的 AD **对象权限**(删除、DACL 写入、完全控制等)。 - `SC`:管理单个 Windows **服务控制管理器** (Service Control Manager) 的权限。 ## 功能特性 - **针对 AD 对象的精细化 ACL 编辑** – 使用单个命令添加或撤销任何标准的 ADS 权限位。 - **扩展权限 GUID 支持** – 操作 Microsoft 定义的扩展权限的完整目录,无需记忆 GUID。 - **服务 DACL 管理** – 授予或撤销 SCM 权限,例如 `SERVICE_START`、`SERVICE_CHANGE_CONFIG` 或 `SERVICE_ALL_ACCESS`。 - **内置凭据模拟** – 可选的 `--login Domain/User@Password` 标志执行 LogonUser/Impersonate 以使用备用凭据。 - **CLI11 驱动的用户体验** – 基于子命令的语法,包含自动生成的帮助、互斥开关和友好的错误报告。 - **无外部运行时依赖** – 静态链接 Win32 / ADSI 库(`comsuppw`、`Adsiid`、`Activeds`),可在 Windows 主机上直接运行。 ## 安装与构建 1. **前置条件** - 安装了 Active Directory Domain Services (AD DS) RSAT 组件的 Windows 10/11。 - 安装了“使用 C++ 的桌面开发”工作负载的 Visual Studio 2022。 2. **使用 Visual Studio GUI 构建** - 打开 `PDAcl.sln`。 - 选择 `Release | x64` 或 `Debug`。 - 生成解决方案 (`Ctrl+Shift+B`)。二进制文件将输出到 `x64\*\PDAcl.exe`。 3. **分发** - 将 `PDAcl.exe` 作为独立二进制文件分发。除标准 Windows 运行时外,不需要额外的 DLL。 ## 配置 - **备用凭据**:在任何子命令上提供 `--login Domain/User@Password`。PDAcl 解析该字符串,调用 `LogonUserA`,并在命令执行期间进行模拟。 - **LDAP 目标定位**:使用 `--server` 传递 LDAP 路径(例如 `DC=example,DC=com` 或 `CN=User,OU=Admins,DC=example,DC=com`)。PDAcl 会自动添加 `LDAP://` 前缀。 - **用户主体**:通过 `--user` 提供受托人。对于 AD 操作,使用 `Domain\User`;对于服务 ACL,任何被 SCM 识别的本地/AD 主体均可(例如 `Everyone`、`NT AUTHORITY\SYSTEM` 等)。 - **权限标识符**:`--extended-right` 必须与内置映射表中的键匹配。如果不确定,请先使用 `--list` 查看。 ## 使用示例 ### 1. 枚举扩展权限 ``` .\PDAcl.exe ADE --list ``` ### 2. 授予 AD 扩展权限(例如 `DS-Replication-Get-Changes`) ``` .\PDAcl.exe ADE ` --add ` --extended-right DS-Replication-Get-Changes ` --user CONTOSO\svcReplication ` --server "CN=Configuration,DC=contoso,DC=com" ``` ### 3. 撤销标准 AD 权限(例如 `ADS-Right-Generic-All`) ``` .\PDAcl.exe AD ` --remove ` --extended-right ADS-Right-Generic-All ` --user CONTOSO\DevOps ` --server "CN=Tier0,OU=Groups,DC=contoso,DC=com" ``` ### 4. 授予 `Domain Users` 服务启动/停止权限 ``` .\PDAcl.exe SC ` --add ` --service Spooler ` --user "Domain Users" ` --extended-right Service-Start ``` ### 5. 使用备用凭据操作 ``` .\PDAcl.exe AD ` --list ` --login CONTOSO/adminuser@Str0ngP@ss! ``` ## 扩展权限与服务权限目录 - **Active Directory 扩展权限 (`ADE --list`)**:包含 `active_directory.h` 中定义的每个 GUID,例如 `Abandon-Replication`、`Change-Schema-Master`、`Enable-Per-User-Reversibly-Encrypted-Password`、`User-Force-Change-Password` 以及 MSMQ 特定权限。 - **标准 AD 权限 (`AD --list`)**:涵盖 `ADS_RIGHT_GENERIC_ALL`、`ADS_RIGHT_WRITE_OWNER`、目录特定标志如 `ADS_RIGHT_DS_CREATE_CHILD`,以及控制位如 `ADS_RIGHT_DS_CONTROL_ACCESS`。 - **服务权限 (`SC --list`)**:将友好名称(`Service-Start`、`Service-Stop`、`Service-Change-Config`、`Generic-Read` 等)映射到 Windows SCM API 公开的原生 `SERVICE_*` 或 `GENERIC_*` 常量。 请参考 CLI 的 `--list` 输出,以查看您的构建版本中包含的权威集合。 ## 故障排除 - **`OpenSCManager Error` / `OpenService Error`**:请确保您是以提升的权限(管理员)运行命令,并且目标服务名称正确。目前尚不支持远程服务 ACL 编辑。 - **`ADsGetObject Error`**:仔细检查 LDAP 路径字符串,并验证是否已安装 RSAT / ADSI 组件。请使用完全可分辨名称。 - **`Not Found ActiveDirectory Right`**:调用 `ADE --list` 或 `AD --list` 以复制确切的键。查找区分大小写。 - **`Can't Login`**:`--login` 解析器期望 `Domain/User@Password` 格式。在 PowerShell 中使用引号转义空格。 - **Release 版本立即崩溃**:确认目标主机已安装 ADSI (activeds.dll)。默认情况下,已加入域的系统都具备此组件。 ## 许可证 本项目基于 [MIT License](LICENSE) 发布。
标签:Active Directory, AD ACL, ADSI, Awesome, C++, Credential Impersonation, DACL管理, Extended Rights, GUID, Linux, PE 加载器, Plaso, RSAT, SCM, Win32 API, Windows命令行工具, 协议分析, 数据擦除, 服务权限, 权限审计, 权限提升, 权限编辑, 系统管理, 访问控制列表, 身份模拟, 静态编译