Machine Late - Hack the box

Antes de tudo...
Fala galera eai? Esse é meu primeiro Writeup que escrevo… espero que fique bem claro de como foi o processo que eu segui para resolver esta máquina.

Vamos lá!

Reconhecimento: Para iniciar o reconhecimento da máquina comecei com uma varredura utilizando o nmap.

sudo nmap -sV -sC 10.10.11.156

image.png

Enumeração: Note que há 2 serviços rodando nesta máquina, um fornecendo um acesso ao site através do protocolo HTTP e o outro um acesso SSH.

image.png

Após acessar o site, resolvi então navegar um pouco no código fonte para ver se encontrava algo de útil para começar a explorar mais a fundo e encontrei o seguinte trecho de código:

image.png

Repare que há um link dizendo que podemos utilizar um editor de imagem dentro do site, no entanto para conseguir acessar este subdomínio é necessário configurar o arquivo hosts da sua máquina local ficando da seguinte forma:

image.png Salve o arquivo e agora você poderá acessar o através do dns images.late.htb image.png Repare que nesta página tem várias informações úteis para dar início a uma exploração mais avançada, como com o que foi desenvolvido o conversor de imagem para texto. Antes de sair buscando por vulnerabilidades da tecnologia do Flask resolvi testar um pouco e entender como funciona o conversor de imagem, então subi uma imagem JPG e o conversor me retornou um arquivo results.txt contendo:
<p></p>

Através desse resultado não ficou muito claro o que estava fazendo em si, então resolvi buscar alguns conversores de imagem para texto no GitHub feito em flask e encontrei o seguinte exemplo: Extractor Image Text.

Com esse código ficou mais claro o que o conversor estava fazendo que era: pegar uma imagem e extrair o texto que está nela e não um texto que está como esteganografia; Sabendo disso, então resolvi injetar alguns payloads de Server Side Template Injection (SSTI) como texto das imagens e para isso eu desenvolvi um exploit para facitar a manipulação dos payloads e envio da imagem para ser através do script e não do site.

Exploi: Late Hack the Box - Exploit SSTI

Utilizando o exploit que criei, então fiz um payload simples:

image.png

Olhe que há um teste de soma, se o aplicativo estiver vulnerável o exploit deverá retornar o 2 como saída pois foi efetuado a soma, e ao executar o exploit temos a seguinte saída:

image.png

Boom! Está vulnerável, agora podemos buscar payloads mais avançados e evoluir a exploração para remote code execution, para isso eu utilizei o repositório Payload All The Things e peguei o seguinte payload:

image.png

Veja que eu peguei um payload que me permite fazer a excução de comandos do sistema operacional, e alterei o exploit para que ele receba esse novo payload com os comandos do sistema operacional, ao executar o exploit.py com essa alteração ele retornará a seguinte saída:

image.png

O comando ls -l foi executado com sucesso! Agora podemos visualizar os usuários do sistema com o os_command: cat /etc/passwd

image.png

Repare que temos um usuário chamado svc_acc e que também podemos visualizar o diretório deste usuário com: ls -la /home/svc_acc

image.png

Neste diretório temos um arquivo chamado user.txt que representa a nossa primeira flag!

image.png

Mas e agora, Acabou a exploração? Ainda não! Precisamos da segunda flag que é a system e para isso precisamos conseguir acesso ao sistema operacional para elevar nossos níveis de usuário e procurar a próxima flag. Ué, mas já temos acesso ao sistema por command injection não temos? Sim, mas desta forma é muito ruim para manter uma exploração efetiva dentro do sistema, teremos que usar o serviço de ssh para conseguir acesso. Para isso vemos na listagem dos arquivo dos usuário svc_acc que tem um diretório .ssh que geralmente costumam ficar as chaves de acesso ssh.

image.png

Temos uma chave ssh para acessar o sistema como o usuário svc_acc, para pega-lá execute: cat /hove/svc_acc/.ssh/id_rsa

image.png

Bom, conseguimos a chave id_rsa agora podemos utiliza-lá para conectar através do protocolo ssh como o usuário svc_acc. Copie a chave id_rsa para um arquivo chamado id_rsa e utilize: ssh svc_acc@[machine_ip] -i id_rsa para conectar como o usuário svc_acc.

image.png

Provavelmente ao tentar se conectar o seu pode ter dado este erro também, isso se dá porque a chave pode ser lida pelo usuário, grupo e qualquer acesso remoto ao computador e sendo assim é considerada uma chave não segura.

image.png

Para resolver basta alterar as permissões de acesso da chave para somente o usuário conseguir acessar/ler/escrever na chave com: chmod 600 id_rsa

image.png

Agora que foi alterado a permissão podemos executar novamente: ssh svc_acc@[machine_ip] -i id_rsa para conectar a máquina.

image.png

ATENÇÃO: cuidado ao copiar a chave id_rsa, pois qualquer linha a mais mesmo em branco pode resultar na saída que a chave está inválida.

Então já que temos acesso precisamos conseguir acesso root ao sistema. Primeiro vamos olhar o que há no crontab do sistema.

image.png

O PATH:/usr/local/sbin/ é o caminho onde fica os scripts de execução do cronjob no sistema, se você der crontab -e não mostrará nenhuma configuração adicionada pois essa configuração foi realizada somente para o usuário root então pode existir X jobs configurados se você não tiver permissão não irá conseguir ver. Agora liste os arquivos do diretório /usr/local/sbin/ e teremos:

image.png

Um arquivo executável que provavelmente será executado em algum momento por algum trigger ou agendamento de tarefas, repare também que podemos ler e executar esse arquivo, então iremos ler primeiramente:

image.png

Com uma leitura básica do código da para perceber que o script é acionado toda vez que um usuário acessar a máquina via SSH. Sabendo disso vamos ver as propriedades do arquivo através do comando lsattr esse comando permite fazer alguns tipos de alterações no arquivo, caso não conheça pode dar uma olhada em:

Trabalhando com atributos de arquivos

image.png

Note que possui o atributo “a” que significa que podemos modificar este arquivo anexando o conteúdo nele, então com isso podemos atribuir um shell-reverso dentro do arquivo ssh-alert.sh

image.png

Agora pode conferir se o shell foi atribuído ao arquivo que será executado:

image.png

Repare que o comando foi adicionado ao arquivo e assim que o arquivo for executado já poderemos acessar através do shell reverso, para isso ligue uma porta para ouvir uma conexão do alvo:

image.png

Agora com o nc ouvindo a conexão podemos executar o trigger do arquivo ssh-alert.sh através de uma nova conexão ssh com o usuário svc_acc.

image.png

E então conseguimos acesso root ao sistema!!!!

image.png

Agora é só visualizar a sua flag e pontuar!!!

image.png

Considerações finais:
Pessoalmente achei esta máquina relativamente difícil pois não estava conseguindo encontrar uma forma de conseguir acesso root, e para isso precisei olhar alguns outros writeups desta máquina. Entretanto de modo geral consegui resolver 85% da máquina conseguindo chegar até ao acesso do usuário svc_acc sozinho.