Ra
Difficulty: Hard | OS: Windows | Active Directory (AD)
Last updated
Difficulty: Hard | OS: Windows | Active Directory (AD)
Last updated
Em breve.
Há muitas portas, mas algumas são desnecessárias.
Escolhi algumas portas TCP default conhecidas e outras que não se repetem com frequência para descobrir os serviços que estão rodando nessas portas.
Podemos comprovar que se trata de uma máquina Windows no contexto de um Active Directory(AD).
Então uma das primeiras coisas que fazemos nesse caso é colocar o domain
no /etc/hosts
para que consigamos resolver esse nome.
Quando clicamos em Reset Password
ele abre um pop-up com outro subdomínio.
Ele não consegue resolverfire.windcorp.thm
, pois não colocamos no /etc/hosts
vamos apontar ele então.
Se atualizarmos ele irá abrir a página corretamente.
Então aqui precisamos de um username
e o tipo de “pergunta-secreta” para recuperar a senha.
Analisando mais a página web, encontrarmos o time de suporte de TI.
Podemos usar essa informação para tentar descobrir se eles são usuários legítimos do sistema.
Se olharmos o código fonte, conseguimos ver como é o usuário do e-mail desses usuários.
Um pouco mais abaixo, também temos 3 colaboradores que estão em foco.
Analisando também o código fonte referente a essa parte da página, é interessante que além de termos o nome do usuário, temos também o nome do cachorro dela.
E a mensagem que ela coloca abaixo da foto, é referente ao cachorro também.
Se retornarmos a página de reset password
podemos ver que tem a “pergunta-secreta” referente ao nome de pets.
Podemos tentar resetar a senha dessa forma.
E clicamos em RESET
Com isso conseguimos resetar a senha do usuário lilyle
e a senha agora é ".....
"
Vamos agora tentar nos comunicar com o protocolo SMB, e tentar algumas misconfiguration.
Não foi possível logar com usuário anônimo.
Temos um login e senha no sistema que recuperamos via aplicação web, vamos tentar logar com ela.
Conseguimos listar as shares do SMB, vamos agora tentar interagir com elas para poder enumerar e ter mais informações que nos leve a um acesso.
Conseguimos acessar a shareIPC$
, mas não podíamos listar.
Conseguimos acessar a share Shared
e conseguimos obter a primeira flag
Podemos baixar essa flag, com o comando get <comand>
lembre-se de colocar aspas duplas, pois há espaços no nome do arquivo.
Observe também que há um software nessa pasta, chamado Spark
essa aplicação é um mensageiro, um chat como era o msn e outros.
Podemos baixar o .deb
também para nossa máquina, pois estamos em um linux, e vamos instalar ele com dpkg
Sempre que estou tentando baixar via smb
estou recebendo um erro de TIMEOUT, então irei baixar ele pela internet mesmo.
Damos permissão de execução para esse pacote .deb
e tentamos instalar com o utilitário dpkg
Porém, como é uma versão bem defasada do Spark
ele requer o opendjk versão 8, então vamos ter q baixar e instalar essa versão.
Bom, essa é uma versão bem antiga do java, e mesmo instalando eu tive problemas com o Kali, nesse caso temos 2 alternativas.
Um deles é utilizar o Attach Box do Tryhackme que vai ter os pacotes certos já para instalarmos o pacote do spark.
Ou, podemos apenas extrair esse pacote .deb
e tentar executá-lo sem a necessidade de instalar.
Eu vou preferir a segunda opção que citei.
O comando acima extrai(-X
) o conteúdo do pacote .deb
para uma pasta chamada spark
Ele criou uma pasta chamada spark
com todo o arquivo do pacote .deb
extraído, quando entramos na pasta bin
desse diretório, iremos encontrar um binário da aplicação spark.
Porém, quando tentamos executar ele traz um erro. Para corrigir o mesmo, podemos criar um link simbólico para a pasta /share/spark
que também foi criada quando extraímos o pacote .deb
Então vamos criar um link simbólico
o link simbólico será o spark em Downloads, e o diretório de destino, ou seja, onde o link simbólico será criado, será em /usr/share/spark
Agora somos capazes de abrir o Spark, sem a necessidade de instalá-lo em nossa máquina.
Podemos configurar o usuário e senha com as credenciais que conseguimos via servidor web, e o domínio é o windcorp.thm
que encontramos também no nosso escaneamento de serviços das portas abertas.
Porém, recebemos um erro de verificação de certificado ao tentar realizar o login.
Clique em advanced
e habilite essas duas opções abaixo para aceitar todos os certificados e desabilitar a verificação de certificado do hostname.
E conseguimos logar com sucesso
Obs: nada foi fácil rsrs. Eu tive diversos problemas após tentar logar, analisando as mensagens de erro, parecia ser algo relacionado ao SOM. Como estou em uma vm no proxmox, eu apenas ativei um recurso de som, reiniciei a VM e funcionou normalmente.
Caso quando tente executar o
spark
como mostrei e não abrir, tente instalar a versão 8 do java, baixando diretamente do site da Oracle.
Descobrimos uma CVE publicada para a versão da aplicação Spark
Essa vulnerabilidade permite que no momento do envio da mensagem no chat, com a tag <img
com atributo src
para referenciamos um host externo, podemos interceptar e recuperar hashes NTLM do alvo.
Então cada vez que o usuário clica no link, o módulo ROAR o pré-carrega automaticamente, o servidor externo recebe a solicitação da imagem juntamente com os hashes NTLM do usuário que visita o link, que é o usuário que você está conversando.
Em alguns artigos, podemos encontrar essa vulnerabilidade classificada como NTLM RELAY
ou NTLM Hash Capture
Para explorarmos essa vulnerabilidade, vamos utilizar a ferramenta Responder.
Como vimos antes, não temos nenhum contato para conversar no Spark, mas na nossa enumeração da página web, encontramos diversos usuários com o e-mail. Vamos tentar adicionar esses contatos
Observe que nem todos os usuários estarão online para receberem a msg.
Quando enviamos a mesma mensagem para o usuário buse@fire.windcorp.thm
Conseguimos recuperar o hash NTLM dele.
Podemos agora tentar quebrar esse hash NTLM com ferramentas como o John
Agora temos mais um usuário no sistema.
Bom, temos 2 usuários agora e temos a porta 3389 RDP aberta. Vamos ver se um desses usuários tem a permissão de acessar a interface gráfica do Windows a partir do protocolo RDP.
Estou utilizando o software REMMINA para interagir com esse protocolo.
Não conseguimos acesso pelo protocolo RDP, mas temos a porta 5985 aberta que é o protocolo WinRM.
Podemos usar o crackmapexec
para verificar se isso vai funcionar, se sim, podemos interagir com o protocolo com o evil-winrm
A mensagem Pwn3d!
nos mostra que esse usuário consegue comprometer o alvo, ou seja, executar comandos.
Vamos agora tentar acesso ao winRM.
E conseguimos recuperar a nossa segunda flag.
Normalmente em CTF a última flag fica com o usuário administrativo.
Eu gosto de começar analisando as permissões que o meu usuário possui, no windows, podemos fazer isso com o comando:
Quem já acompanhou o write-up da máquina Forest focada em AD que publicamos no passado aqui, sabe que esse grupo Account Operators
não é normalmente visto setado em usuários.
Esse grupo dá a permissão de criar/editar usuários e grupos, que não sejam administrativos.
Enumerando mais o alvo, encontramos na raiz uma pasta chamada scripts
Podemos confirmar que esse log.txt é criado a partir da execução do script em powershell checkservers.ps1
Analisando melhor o script, conseguimos obter mais informações.
Ele pega o conteúdo de hosts.txt
que está no usuário brittanycr
que deve ser para pegar o nome dos hosts a serem monitorados e testa a conectividade com Test-Connection
Sabemos pelos comentários que o script é executado a cada x tempo, consumindo o arquivo hosts.txt e passando seu conteúdo para Invoke-Expression
Não temos permissão de acessar a pasta do usuáriobrittanycr
, mas como fazemos parte do grupo Account Operator
, podemos mudar a senha desse usuário.
Agora podemos tentar entrar via winRM para ver se é possível logar também.
O usuário não tem permissão de acesso via WinRM.
Talvez seja uma share
do SMB, e podemos tentar ler esse arquivo por esse protocolo.
Conseguimos listar as shares do smb, e temos o caminho Users
, podemos tentar entrar nessa share.
Dá para ver que é a pasta interna do sistema C:\Users
vamos entrar na pasta referente ao nosso usuário. Pois foi lá que vimos que o script estava na nossa enumeração anterior.
Conseguimos achar o arquivo que o script estava utilizando hosts.txt
baixamos para nossa máquina com o comando get
do smb e verificamos que ele tem dois domínios.
Bom, como analisamos o script e vimos q ele trata como uma tarefa agendada, vamos tentar alterar esse arquivo hosts para um comando de Windows, e vamos tentar criar um novo usuário e colocar ele no grupo administrators
Editamos o arquivo hosts.txt
Entramos novamente no SMB, excluímos o arquivo antigo com o comando del
e depois fazemos o upload do nosso arquivo editado para a share com o comando put
Podemos verificar se o usuário foi criado e esta no grupo administrators com crackmapexec
Agora que conseguimos criar o usuário e colocar ele dentro do grupo Administrators, podemos logar com ele via RDP ou WinRM.
E conseguimos obter a última flag no diretório do Administrador do sistema.