Ra
Difficulty: Hard | OS: Windows | Active Directory (AD)

TryHackMe Room
Walkthrough - Youtube Habemus Shell
Em breve.
Scanning

Há muitas portas, mas algumas são desnecessárias.
Services and Versions

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.
Exploration
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
domainno/etc/hostspara que consigamos resolver esse nome.

Port 80 - HTTP

Quando clicamos em
Reset Passwordele abre um pop-up com outro subdomínio.Ele não consegue resolver
fire.windcorp.thm, pois não colocamos no/etc/hostsvamos apontar ele então.


Se atualizarmos ele irá abrir a página corretamente.
Então aqui precisamos de um
usernamee 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 passwordpodemos 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
lilylee a senha agora é "....."
Port 445 - SMB
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 share
IPC$, mas não podíamos listar.Conseguimos acessar a share
Sharede 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
Sparkessa aplicação é um mensageiro, um chat como era o msn e outros.Podemos baixar o
.debtambém para nossa máquina, pois estamos em um linux, e vamos instalar ele comdpkgSempre que estou tentando baixar via
smbestou recebendo um erro de TIMEOUT, então irei baixar ele pela internet mesmo.


Damos permissão de execução para esse pacote
.debe tentamos instalar com o utilitáriodpkgPorém, como é uma versão bem defasada do
Sparkele 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
.debe 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.debpara uma pasta chamadaspark

Ele criou uma pasta chamada
sparkcom todo o arquivo do pacote.debextraído, quando entramos na pastabindesse diretório, iremos encontrar um binário da aplicaçãospark.

Porém, quando tentamos executar ele traz um erro. Para corrigir o mesmo, podemos criar um link simbólico para a pasta
/share/sparkque 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/sparkAgora 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.thmque 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
advancede 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
sparkcomo mostrei e não abrir, tente instalar a versão 8 do java, baixando diretamente do site da Oracle.
CVE-2020-12772
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
<imgcom atributosrcpara 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 RELAYouNTLM Hash CapturePara 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.thmConseguimos 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.
Port 3389 - RDP
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.

Initial Access
Port 5985 - winRM
Não conseguimos acesso pelo protocolo RDP, mas temos a porta 5985 aberta que é o protocolo WinRM.
Podemos usar o
crackmapexecpara verificar se isso vai funcionar, se sim, podemos interagir com o protocolo com oevil-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.

Privilege Escalation
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 Operatorsnã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.txtque está no usuáriobrittanycrque deve ser para pegar o nome dos hosts a serem monitorados e testa a conectividade comTest-ConnectionSabemos pelos comentários que o script é executado a cada x tempo, consumindo o arquivo hosts.txt e passando seu conteúdo para
Invoke-ExpressionNão temos permissão de acessar a pasta do usuário
brittanycr, mas como fazemos parte do grupoAccount 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
sharedo 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:\Usersvamos 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.txtbaixamos para nossa máquina com o comandogetdo 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
administratorsEditamos o arquivo
hosts.txt

Entramos novamente no SMB, excluímos o arquivo antigo com o comando
dele depois fazemos o upload do nosso arquivo editado para a share com o comandoput

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.

Last updated