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命令行工具, 协议分析, 数据擦除, 服务权限, 权限审计, 权限提升, 权限编辑, 系统管理, 访问控制列表, 身份模拟, 静态编译