Photobomb
#easy #HackTheBox #Linux #eWPT #OSCP
Atualizado
#easy #HackTheBox #Linux #eWPT #OSCP
Atualizado
Máquina Linux fácil projetada para explorar um Blind Command Injection e por fim escalar privilégios através de um Path Hijacking.
A primeira ação para reconhecimento do alvo é testar a conectividade com ele, utilizando o comando ping
. Ao enviar um pacote ICMP, podemos confirmar se a máquina alvo está acessível na rede.
No retorno, o TTL de 63 é uma indicação de que possivelmente estamos lidando com um sistema Linux. O TTL inicial para sistemas Linux costuma ser 64, e o valor observado no ping geralmente é reduzido conforme os pacotes atravessam roteadores na rede. Como o TTL está próximo de 64, é provável que o sistema alvo seja uma máquina Linux.
Em seguida, executei um escaneamento de porta no alvo para identificar quaisquer portas abertas que pudessem ser usadas para novos ataques. Usei a ferramenta rustscan
para verificar todas as portas (1-65535) no alvo. A varredura revelou a porta 80 HTTP aberta rodando um nginx 1.18.0 em um Linux Ubuntu além da porta 22 rodando um OpenSSH 8.2p1.
A varredura também retornou um nome de domínio que adicionei ao meu arquivo /etc/hosts
.
Em seguida, passei a enumerar o serviço HTTP usando a ferramenta whatweb
para coletar informações sobre o software e a versão do servidor web.
Navegando na porta 80, temos o website de uma gráfica.
A página tem um link (click here) redirecionando para a rota /printer
que possui um painel de autenticação.
Fazendo um spidering nesta aplicação usando a ferramenta gospider
, identificamos uma credencial exposta no arquivo photobomb.js
.
Indo ao arquivo, vemos uma função JavaScript que possui um hiperlink expondo de fato uma credencial.
Com isso, nota-se a importância de visualizar o código fonte de um site e analisar códigos JavaScript. Os desenvolvedores web às vezes cometem erros e deixam falhas de configuração ou credenciais dentro do código fonte visível de uma página web.
Agora vamos tentar fazer o login com esse nome de usuário pH0t0
e senha b0Mb!
. Usando essa credencial ganhamos acesso a rota /printer
.
Nessa rota, temos uma página com diversas imagens, bem como a capacidade de especificar suas dimensões e fazer o download delas.
Portanto, ao clicar em download, interceptei a requisição usando o Burp Suite
para visualizar o que está sendo enviado para o servidor.
Após alguns testes, percebo que o parâmetro filetype
é vulnerável a Blind Command Injection. Como prova de conceito (PoC), enviei um ping para minha máquina atacante e aguardei a resposta do ping com a ferramenta tcpdump
.
Ao enviar a requisição maliciosa com o Burp Suite
, recebemos um ping do alvo, ou seja, de fato o parâmetro filetype
é vulnerável a injeção de comando, e temos comunicação direta com o alvo.
A mesma dinâmica funciona usando cURL
em vez de ping
. Portanto, podemos tirar proveito disso para obter uma reverse shell.
Para fazer isso, estarei compartilhando com um servidor HTTP do python um arquivo index.html
malicioso, contendo um script bash para enviar uma shell para um netcat
que estará em escuta na minha máquina atacante.
A ideia é que ao fazer o alvo enviar um cURL
para este arquivo index.html
e interpretá-lo com | bash
, o alvo executará o comando que colocamos no index.html
, e consequentemente enviará uma reverse shell para nosso netcat
.
Assim, ganhamos acesso ao alvo como usuário wizard
.
Após obter o acesso inicial com o shell reverso, o próximo passo foi melhorar a interatividade da shell para garantir que tivéssemos um controle mais robusto sobre o sistema alvo.
Gerando um console bash em segundo plano: Para garantir que tivéssemos um bash funcional, foi necessário criar um processo de bash
através do comando script
, que abre uma sessão interativa mais apropriada, logo após, colocamos em background com CTRL+Z
:
Verificando as dimensões do terminal na máquina atacante: Antes de ajustar o terminal no alvo, verificamos as dimensões da janela na máquina atacante para mantê-las iguais:
Resetando o terminal no alvo: Após isso, resetei o terminal do alvo com uma nova TTY:
Definindo dimensões e variáveis de ambiente: Com o terminal tratado, exportei as variáveis de ambiente e ajustei as dimensões corretamente:
Navegando ao diretório /home
do usuário wizard
podemos encontrar a flag user.txt
.
Com essa flag, concluímos o primeiro objetivo do CTF e podemos passar para a próxima etapa de escalar privilégios para obter acesso a flag root.txt
.
Utilizando o comando sudo -l
, foi possível verificar quais comandos o usuário atual tinha permissão de executar como root. O comando revelou que o usuário tinha permissão para executar o script /opt/cleanup.sh
definindo a variável de ambiente $PATH
e sem a necessidade de inserir senha.
Listando este script, vemos que ele pertence ao usuário root
.
Abrindo o script podemos vemos que o binário find
está sendo definido sem rota absoluta, portanto, podemos aplicar um Path Hijacking
.
Obs: Não só o find
mas no script também temos a presença do caractere "[
" na condição if, e "[
" no Linux é reconhecido como um binário, portanto, o abuso de path hijacking curiosamente também poderia ser feito com "[
".
Com isto, no diretório /tmp
podemos criar um arquivo chamado find
contendo o comando bash
.
Agora, ao executarmos o script /opt/cleanup.sh
como sudo definindo a variável de ambiente $PATH
(SETENV) como sendo /tmp
, ao ser executado, o script interpretá-ra que o find
que ele deve usar é o que criamos no diretório /tmp
, e assim, ganharemos uma shell como root.
Então basta ler a flag root.txt
no diretório /root
para concluir o objetivo do CTF.
Com a escalada de privilégios bem-sucedida e acesso root obtido, todas as flags foram coletadas e a máquina foi totalmente comprometida.