Overpass – TryHackMe
Olá Pessoal, hoje nos iremos resolver o desafio Overpass da plataforma TryHackMe, neste desafio precisamos explorar as falhas do host e capturar 2 flags.
A primeira flag com acesso de “user” e a outra como “root“.
O que acontece quando um grupo de estudantes falidos de Ciência da Computação tenta fazer um gerenciador de senhas?
Obviamente um sucesso comercial perfeito!, Será??
Vamos ver o que este desafio tem pra nós, acompanhe a resolução abaixo.
- Primeiro vamos fazer um reconhecimento do host, para isto utilizaremos o NMAP.
- Lista de argumentos que usamos:
- nmap -v -sSV -D RND:20 -g 443 -Pn –open –top-ports=500 10.10.71.152
- (-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.
- (–top-ports=500) o NMAP ira validar as 500 principais portas do host.

- Após concluir o escaneamento, o NMAP nos trouxe 2 portas abertas, SSH(22) e HTTP(80)

- Primeiro vamos avaliar a porta 80 HTTP, depois olhamos a 22 SSH.
- Ao abrir no navegador vemos que tem um site rodando, de acordo com o conteúdo do site é uma empresa que presta serviços de proteção de senhas utilizando criptografia.

- Neste momento vamos utilizar o GoBuster para identificar os possíveis diretórios existentes neste site.
- gobuster dir -e -u http://10.10.71.152 -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.

- Identificamos os diretórios abaixo.

- Analisando a lista de diretórios encontramos uma área de login,(http://10.10.71.152/admin/),porem como não temos as credenciais válidas, neste momento não é importante.
- podemos até tentar credenciais default como (admin,admin), porem sem sucesso.

Analisando os demais diretórios encontrados localizamos a área de download da ferramenta de criptografia.(http://10.10.71.152/downloads/)

- Na pagina de download encontramos um link do código fonte da ferramenta, vamos analisar.
- Ao analisar o código fonte, vemos que a cifra utilizada nesta ferramenta é a cifra de Cesar, porem com 47 rotações conhecida como ROT47 (https://rot47.net/).

Vemos também que a ferramenta carrega as credenciais criptografadas de um arquivo oculto chamado .overpass

Voltamos para a tela de login e vamos analisar o código fonte da pagina para entendermos a forma de autenticação.

Temos 3 arquivos de javascript (main,login e cookie), ao analisar os 3 identificamos algo interessando no arquivo cookie.js

- Neste trecho do código vimos que se o status do cookie estiver como “Incorrect credentials” ele limpa o campo de senha e retorna a pagina de login, porem se estiver diferente ele direciona para a pagina /admin
- Bom neste caso vamos tentar setar manualmente o cookie para ver o que acontece.
- lembre-se de desativar o cache do navegador antes, para que a mudança de fato ocorra.

- Bom agora vamos atualizar a pagina pra ver oque acontece.
- Uhuuull, agora somos ADMIN.

- Analisando a pagina de /admin temos uma chave Privada RSA do usuário james, podemos tentar acessar o SSH (Porta 22) utilizando somente a chave, vamos testar.
- Primeiro vamos copiar o conteúdo da chave para um arquivo com nome id_rsa.

- OOh não, mesmo informando a chave ele pede uma senha, então vamos precisar quebrar esta chave.

- Primeiro precisamos deixar esta chave de uma forma que o JOHN possa quebra-la, para isso iremos utilizar o SSH2JOHN.
- https://github.com/openwall/john/blob/bleeding-jumbo/run/ssh2john.py

- pronto agora

- temos outro formato de chave, porem agora podemos utilizar o john.

- Opa conseguimos identificar a senha do james (james13), agora vamos tentar nos autenticarmos via SSH.
- Perfeito, agora temos acesso ao host.

- Bom Agora listando os diretórios temos um arquivo chamado user.txt

- Ao abrir o arquivo, olha só que beleza temos uma flag

- Bom agora para conseguirmos a outra flag iremos precisar de acesso root.
- Primeiro vamos ver os arquivos com permissão de SUDO (sudo -l)

- Ops, parece que a senha do SSH “james13” não é a mesma de SUDO.
- Voltando analisar os arquivos dentro do diretório do usuário temos aquele arquivo .overpass que localizamos lá no inicio onde a ferramenta de criptografia busca as senhas.

- Ao ler o arquivo temos uma senha criptografada e de acordo com o código fonte é ROT47:

- Vamos tentar descriptografar a senha usando o (https://rot47.net/).


- Opa, temos uma nova senha, vamos tentar utiliza-la para SUDO com o usuário james.

- OOh Noo, o james não pode executar sudo.
- Bom como não conseguimos sucesso com este comando vamos continuar.
- Podemos ver se o host possui alguma tarefa no CRON o agendador de tarefas do linux, porem primeiro precisamos saber se temos acesso a lisa de tarefas.
- cat /etc/crontab

- Que da hora, temos uma tarefa que é executada periodicamente com permissões de root, veja é realizado uma requisição com curl e solicita que seja executado com bash.
- Bom podemos tentar contaminar o DNS alterando o arquivo hosts do linux, bom vamos ver se temos acesso.
- Lendo o arquivo temos:

- Bom agora vamos ver se conseguimos alterar

- Pronto conseguimos \0/, alterei o ip(127.0.0.1) para o meu ip, então quando o cron executar esta requisição ele ira procurar o arquivo em minha maquina.
- Vamos preparar o nosso ambiente para recebermos a conexão reversa.
- Primeiro precisamos criar a mesma estrutura de pasta.

- no meu caso vou subir um servidor php estando no diretório “overpass“, então imagine que o diretório “overpass” representa o / dentro de um servidor web.
- Pronto subimos um servidor http na porta 80, pois é onde o host infectado ira buscar o arquivo “buildscript.sh“

- Dentro do arquivo buildscript.sh temos:

- Agora vamos abrir a porta 8080 no nosso host e somente aguardar a conexão.

- Opa recebemos uma conexao.

- \0/ Agora somos #root.

- Agora como estamos no diretório do root vamos ver o que temos.

- Temos um arquivo chamado root.txt, abrindo o arquivo temos:

- Ótimo, conseguimos concluir o desafio com SUCESSO.
E ai, gostou ???, deixe sua opinião ou duvida nos comentários, nos vemos em um próximo desafio ate mais…