Chrimak/AD-Privilege-Escalation-Finder
GitHub: Chrimak/AD-Privilege-Escalation-Finder
一款轻量级Windows域内资产发现与Active Directory权限提升路径识别工具,自动化完成主机探测、管理员枚举、弱口令检测和委派配置审计。
Stars: 0 | Forks: 0
# AssetDiscoveryTool
## 概述
AssetDiscoveryTool 是一个使用现代 C++(Unicode 构建)编写的 Windows 原生、域感知网络评估工具。它通过收集 Active Directory 计算机对象、验证主机可达性、检查远程管理员组、枚举网络会话以及尝试轻量级弱密码检查(例如 `username == password`,管理员默认密码),实现了内部渗透测试中繁琐重复工作的自动化。该工具还会检查 LDAP 委派配置(RBCD、约束委派、非约束委派),以便在项目早期发现权限提升路径。
## 功能特性
- **域计算机收集:** 通过 `NetGroupGetUsers` 收集 `Domain Computers` 成员,规范化主机名,并准备统一的目标列表。
- **基于 ARP 的存活检测:** 在执行耗时的网络操作之前,使用 `SendARP` 快速跳过离线或被过滤的主机。
- **带凭证的共享探测:** 使用提供的域或机器凭证建立 IPC$ 会话,并自动处理凭证冲突。
- **本地管理员枚举:** 转储每台主机的本地 `Administrators` 组,并将结果保存到 `local.txt`。
- **弱密码发现:** 多线程工作池尝试操作员提供的弱密码、用户名即密码以及 `123456`,针对发现的本地账户进行测试。
- **网络会话记录:** 捕获 `NetSessionEnum` 结果(客户端、用户、活动时间)以提供态势感知。
- **委派评估:** LDAP 模块检查 RBCD(`mS-DS-CreatorSID`)、约束委派(`msds-AllowedToDelegateTo`)和非约束委派(`userAccountControl`)风险,并将结果保存到 `Deleg.txt`。
- **结果归档:** 将存活主机、本地管理员、成功的身份验证、网络会话和委派问题存储在独立的文本文件中,以便于报告。
- **线程安全的工作队列:** 可配置(1–50)个工作线程,通过互斥锁(mutex)保护的主机调度,确保长时间扫描的稳定性。
## 架构与关键组件
| 模块 | 职责 |
| ------ | -------------- |
| `Main.cpp` | 参数解析、流程编排、执行时间线和摘要日志记录。 |
| `CommonApi` | Unicode/ANSI 辅助函数、文件 IO 抽象、IPC 成功日志辅助函数。 |
| `WNetApi` | Win32 网络 API 的封装(`WNetAddConnection2`、`NetGroupGetUsers`、`NetLocalGroupGetMembers`、`SendARP`)。 |
| `MultiThread` | 线程池控制器,负责解析主机、跟踪存活状态、枚举会话/管理员以及运行弱密码尝试。 |
| `LdapApi` | 针对 RBCD/CD/UD 的 LDAP 查询,以及 SID 解析和输出序列化。 |
所有模块均依赖 Windows SDK 头文件(``、``、`` 等)并链接 `mpr`、`netapi32`、`iphlpapi` 和 `ws2_32`。
## 安装说明
### 前置条件
- Windows 10 或更高版本,具有管理员权限。
- Visual Studio 2022,安装了“使用 C++ 的桌面开发”工作负载。
- Windows SDK 10.0(随 Visual Studio 工作负载提供)。
### 构建步骤
1. 在 Windows 系统上克隆或下载此代码库。
2. 在 Visual Studio 中打开 `AssetDiscoveryTool.sln`。
3. 选择配置(例如 `Release | x64`)。
4. 构建解决方案(`Ctrl+Shift+B`)。二进制文件将生成在 `AssetDiscoveryTool/x64/Release/` 下。
5. 将可执行文件和所需的运行时依赖项(如果有)复制到您的操作员工作站。
## 配置
| 参数 | 描述 |
| --------- | ----------- |
| `DC-IP` | 域控制器的 UNC 样式路径(例如 `\\192.168.1.10`)。 |
| `DC-Name` | 域控制器的 FQDN(例如 `corp.local`)。 |
| `Domain\Username` | `DOMAIN\user`(或 `DOMAIN\HOST$`)格式的凭证。 |
| `Password` | 所提供账户的密码。对于机器账户,请使用字面量 `NULL`。 |
| `WeakPassword` | 用于植入密码列表的候选弱密码(如果未指定,默认为 `123456`)。 |
| `ThreadCount` | 并发工作线程的数量(1–50)。 |
其他的运行时配置通过编辑 `Main.cpp`(输出文件名)或 `MultiThread.cpp`(休眠时间、密码列表逻辑)中的常量来控制。
## 用法
通过使用不足的参数运行二进制文件来显示帮助;该工具将打印类似于以下内容的使用说明:
```
AssetDiscoveryTool.exe \\192.168.159.149 Motoo.nc Motoo\liwei lw123!@# 123456 10
```
### 示例工作流程
```
# 1. 使用域凭据运行工具
AssetDiscoveryTool.exe \\192.168.1.15 corp.local CORP\auditor SuperSecret! 123456 8
# 2. 监控控制台进度以检查存活状态、管理员名称和失败情况
# 3. 审查输出工件
Get-Content .\alive.txt
Get-Content .\local.txt
Get-Content .\success.txt
# 4. 将 Deleg.txt 中的 LDAP 委派问题与 BloodHound 或手动分析进行关联
```
### 输出文件
- `alive.txt` – 响应 ARP 的主机。
- `local.txt` – 每台主机枚举出的 `Administrators` 组成员。
- `success.txt` – 成功的 `net use` 命令行,供后续重放使用。
- `NetSessions.txt` – 活动的网络会话(客户端、用户、持续时间)。
- `Deleg.txt` – LDAP 委派发现结果(RBCD/CD/UD)。
## 代码示例
```
MultiThread multiThread(
domainUserName,
domainPassword,
passwordList,
aliveFile,
localFile,
successFile,
sessionsFile);
// Spawn worker pool
std::vector threads(threadCount);
for (int i = 0; i < threadCount; ++i)
{
threads[i] = std::thread(&MultiThread::AttackWorker, &multiThread, i, &hostList);
}
```
## 许可证
本项目基于 MIT 许可证分发。请参阅 `LICENSE`
标签:Active Directory, C++, Checkov, LDAP, Linux, NetSessionEnum, PE 加载器, Plaso, RBCD, SendARP, Windows, 协议分析, 后渗透, 域环境, 委派攻击, 数据擦除, 本地管理员, 权限提升, 网络资产测绘