Broker – TryHackMe

Broker – TryHackMe

Olá Pessoal, hoje nos iremos resolver o desafio Broker da plataforma TryHackMe.

“Paul e Max usam uma maneira pouco convencional de conversar. Eles não parecem saber que escutar é possível…”

Bom vamos ver o que este desafio tem pra nós, hoje precisamos alcançar 5 objetivos, acompanhe a resolução abaixo.

1 – Precisamos escanear as portas 1000 até 10000 do host e identificar as portas abertas.

  • para realizar o escaneamento utilizaremos o NMAP.
  • Lista de argumentos que usamos:
    • nmap -v -sSV -D RND:20 -g 443 -Pn -p 1000-10000 –open 10.10.180.204
    • (-v) Ativamos a opção Verbose.
    • (sSV) Definimos o tipo do escaneamento como Syn Scan e o NMAP irá validar a versão dos serviços rodando no host.
    • (-g) Definimos a porta de origem do nosso host.
    • (-D RND:20) Ativamos o modo Decoy para efetuar um bypass no host caso tenha algum WAF ou Firewall rodando.
    • (–open) O NMAP ira trazer somente as portas abertas.
    • (-p 1000-10000) o NMAP ira validar as portas entre 1000 e 10000 do host.

Após concluir o escaneamento o NMAP conseguiu identificar 2 portas dentro do range.

Efetuando um escaneamento maior identificamos a porta 22 Aberta também.

Ótimo, resolvemos nosso primeiro objetivo [R=1883,8161]

2 – Precisamos identificar o serviço que esta rodando neste host..

Ao abrirmos o host em um navegador utilizando a porta 8161 identificamos o serviço ActiveMQ rodando no host.

http://10.10.180.204:8161/

Obaaa, conseguimos outro objetivo [R=ActiveMQ]

3 – Bom, sabendo que o Paul e o Max conversam secretamente precisamos saber sobre qual tipo de Jogo estão falando…..xiiii a coisa esta engrossando não acha?

Não esquenta , como ja identificamos um serviço rodando vamos explora-lo…..

primeiro vamos rodar o GoBuster para identificarmos possíveis diretórios.

  • gobuster dir -e -u http://10.10.182.204:8161 -w /usr/share/wordlists/dirb/big.txt
  • Lista de Argumentos que usamos
    • (dir) Definimos o escaneamento de diretórios
    • (-e) o app ira apresentar a URL completa do diretório, isso facilita caso precisamos acessa-lo diretamente.
    • (-u) definimos o host a ser escaneado.
    • (-w) Definimos uma wordlist de possíveis diretórios.

Veja temos uma um diretório de /admin, ao acessa-lo nos deparamos com uma tela de login.

Por instinto tentei admin/admin e adivinha, \0/ estamos dentro da aplicação.

Continuando a exploração encontrei algo peculiar em Topics (http://10.10.180.204:8161/admin/topics.jsp)

Bom parece ser a conversa que estamos procurando, porem de acordo com a dica do objetivo o Client Explorer não esta funcionando então precisamos de um MQTT Client.

Pesquisei bastante sobre o assunto e encontrei o pacote mosquitto_sub que funciona como client MQTT, caso não tenha-o em seu computador pode realizar a instalação através do apt.

Bom para explorar esta aplicação vamos utilizar o comando abaixo.

  • mosquitto_sub -h 10.10.180.204 -t secret_chat/# -v -V mqttv31
  • Lista de Argumentos que usamos(dir) Definimos o escaneamento de diretórios
    • (-h) Especifica o host que iremos explorar
    • (-t) especifica o topico que iremos acessar (iremos utilizar o topico encontrado anteriormente)
    • (-v) Definimos o verbose
    • (-V) Definimos a versão do protocolo, lembre-se na dica é especificado a versão MQTT3.1

Caso precise entender mais sobre este pacote (http://www.steves-internet-guide.com/mosquitto_pub-sub-clients/)

Isso ai, conseguimos visualizar a conversa entre Paul e Max e também alcançamos o nosso 3 Objetivo. [R=Hacknet]

4 – Agora a coisa ficou feia rsrsrs, precisamos capturar uma flag com permissão de usuário e de acordo com a diga trata-se de um CVE da aplicação ActiveMQ, bora pesquisar.

Após pesquisar bastante encontrei informações sobre a vulnerabilidade desta Aplicação (CVE-2016-3088).

Bom fiz alguns ajustes no modo de exploração, você pode encontrar o código que utilizei no link -> (CVE_POC/CVE-2016-3088_ActiveMQ at main · izaelbm/CVE_POC (github.com))

Primeiro vamos enviar a SHELL, neste link -> (JSP Reverse Shell (github.com)) encontramos uma SHELL reversa em JSP.

Agora vamos validar o diretório

Vamos mover a SHELL para o diretório /admin/

Agora vamos verificar se a shell esta no diretório /admin/

Wow, temos uma shell reversa

No campo IP adicione o ip do seu host e a porta que vamos abrir agora e clique em connect.

Ótimo agora estamos dentro do HOST

Agora vamos melhorar nossa shell.

Listando os diretórios encontramos a flag que estávamos procurando [R=THM{you_got_a_m3ss4ge}].

5 – Bom agora vamos para o ultimo objetivo, de acordo com a dica esta em /etc/sudoers,

Esta dica me fez avaliar os pacotes ou serviços com permissão de SUDO (sudo -l)

Veja temos permissão de executar um arquivo como sudo sem senha.

(root) NOPASSWD: /usr/bin/python3.7 /opt/apache-activemq-5.9.0/subscribe.py

bom vamos ver se conseguimos manipular o arquivo subscribe.py

Ótimo, conseguimos manipular , agora vamos criar uma shell em python para que quando formos executar a shell, possamos receber a conexão como root, veja:

agora vamos abrir a porta 8444, no nosso host.

pronto agora vamos executar a shell

Pronto agora somos ROOT.

Listando o diretório /root localizamos a ultima flag. [R=THM{br34k_br0k3_br0k3r}]

Finalizamos com sucesso o desafio.

E ai, gostou ???, deixe sua opinião ou duvida nos comentários, nos vemos em um próximo desafio ate mais…

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *