[THM] Year of the Fox - Command Injection e Privilege Escalation

Sumário

Essa máquina de nível díficil explora diversas técnicas como: Brute Force, OS Injection, Port Foward e Path Manipulation.

Reconhecimento

Iniciamos a máquina realizando o clássico scan de portas com o Nmap. Nmap

Ao acessar a página Web na porta 80 percebemos que ele necessitava de uma autenticação. Com isso só nos sobrou tentar explorar o SMB, em executação na porta 139 e 445. Inicialmente, procurei por vulnerabilidade conhecidas como Eternal Blue. Entretando o serviço não aparentava estar vulnerável a nenhuma CVE. Indo para o próximo passo, resolvi tentar enumerar algumas informações. Para isso usei o enum4linux e consegui algumas informações interessantes com ele. O que me chamou mais a atenção foram dois usuários: fox e rascal . SMB Enum

Com esses usuários resolvi fazer alguns ataques de força bruta na autenticação Web e no próprio SMB usando o THC Hydra. Utilizei da rockyou como wordlist e em alguns minutos já possuía as credenciais para a autenticação Web usando o usuário do rascal. Força Bruta HTTP

Exploração

Após autenticar na página me deparei com uma aplicação simples, contendo apenas um campo de busca que retornava no máximo 3 arquivos:

  • creds2.txt;
  • fox.txt
  • important-data.txt

Pelas extensões de tipo texto imaginei que isso não estaria salvo em mum banco de dados. Então descartei um SQL Injection e fui tentar algo que me fazia mais sentido: OS Injection. Ao tentar adicionar caracteres especiais para concatenar comandos como ";", "&" e "|" percebi que havia algum tipo de filtro nesse campo. Filtro no front-end Por sorte aparentava ser apenas uma verificação no front-end, então eu apenas interceptei o tráfego com o Burp Suite e modifiquei o campo target da requisição.

Para explorar tentei várias payload e a primeira que deu resultado foi utilizando '`' - acento grave - que no bash executa um comando de dentro de uma string. Utilizei do seguinte JSON para provar a falha: {"target":"`sleep 5`"}

Como o Servidor demorou a responder pudemos ter certeza que o comando sleep foi executado. A partir disso tentei executar uma shell reversa, porém me deparei novamente com um filtro. Filtro de Reverse

Depois de me frustrar bastante, consegui encontrar um jeito de fazer o bypass através de um codificação com base64. Bypass Na payload da thumbanilUrl eu estou mandando o servidor imprimir (echo) um valor codificado em base 64 (que é a mesma payload que usei anteriormente). Após isso, o pipe - | - joga a saída no comando base64 -d decodifica o valor para a Shell Reversa original e por fim outro pipe para jogar essa saída no bash, executando meu código malicioso. Reverse Shell Estamos dentro do servidor com o usuário www-data e já podemos pegar a primeira flag!!

Movimentação Lateral

Agora começamos a fase de enumeração local buscando vetores de movimentação. Após um tempo procurando percebi que havia uma porta 22 aberta localmente o que indicaria que seria possível realizar uma sessão SSH para outro usuário. Verificando o arquivo de configuração do SSH percebemos que apenas o usuário fox possui essa permissão. SSH Config

Para explorar isso eu realizei um Port Foward, fazendo com que um serviço rodando em uma porta local seja exposto em uma outra porta externa. Foi necessário primeiro enviar um binário socat a partir da minha máquina para o servidor, utilizei minha máquina como servidor web e baixei-o no alvo com um wget. Web Server Socat Wget Socat

Após isso, basta executar nosso socat abrindo a porta 9595 encaminhando o serviço SSH local na porta 22. Port Foward Agora basta realizar outro ataque de força bruta. Brute SSH Fox Shell Logados em outro usuário e já é possível obter a *user flag" na home do fox.

Movimentação Horiontal

A enumeração aqui foi simples, apenas executei um sudo -l e percebi que o usuário podia executar o binário shutdown como root. Sudo

Para analisá-lo melhor mandei para minha máquina utilizando a técnica do sevidor web. Shutdown Server Getting Shutdown

Ao executar o comando strings no bináro vemos que há uma chamada para o binário poweroff. Esse será nosso vetor de escalação! A técnica aqui não é tão complexa, vamos precisar de apenas 3 passos:

  • Clonar o /bin/bash para a pasta tmp renomeando-o para poweroff;
  • Adicionar a pasta /tmp no início do PATH para que nosso binário falso tenha prioridade sobre o original;
  • Executar sudo /usr/sbin/shutdown;

Root

Estamos como ROOT na aplicação e agora é só buscar a flag. Vou deixar isso como um desafio para você. (Uma dica: procure pelos arquivos de outros usuários, afinal você é root.)

TryHackMeWebOS InjectionLinux Privilege Escalation