[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.

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 .

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.

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.
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.

Depois de me frustrar bastante, consegui encontrar um jeito de fazer o bypass através de um codificação com base64.
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.
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.

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.

Após isso, basta executar nosso socat abrindo a porta 9595 encaminhando o serviço SSH local na porta 22.
Agora basta realizar outro ataque de força bruta.
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.

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

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/bashpara a pastatmprenomeando-o parapoweroff; - 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;

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.)