🖼️Photobomb

Olá, viajante! Neste artigo, trago um write-up do desafio Photobomb, da plataforma Hack the Box.

Photobomb

Reconhecimento

Ao realizar um portscan básico, encontrei as seguintes portas abertas:

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Para acessar o serviço, adicionei o domínio photobomb.htb no arquivo /etc/hosts.

Página inicial

Analisando o código-fonte da página, encontrei o arquivo photobomb.js e um diretório chamado /printer.

Script e diretório encontrados no código-fonte

Ao analisar, inicialmente, o arquivo photobomb.js, pude encontrar possíveis credenciais.

Possíveis credenciais encontradas no arquivo javascript

Exploração

Acessando a página /printer, pude confirmar a informação que encontrei no arquivo js.

Acessando a página /printer com as credenciais encontradas
Diretório acessado com sucesso

Ao analisar a página, percebi que ao fim dela existem algumas opções para download das imagens mostradas acima, em diferentes resoluções e formatos.

Seção de download das imagens da página

Baixei algumas imagens e analisei os metadados (EXIF), mas não encontrei nada relevante. Então, decidi ver como a requisição de download funciona, interceptando-a com o Burp Suite. Com isso, notei alguns parâmetros e decidi tentar executar algum comando remotamente. Utilizei o netcat na minha máquina para escutar o tráfego na porta 80 e tentei enviar uma requisição forjada.

Tentativa de execução remota de código (curl)
Comunicação estabelecida com sucesso

Com isso, confirmei a possibilidade de executar comandos remotamente. Através dessa brecha, consegui identificar qual usuário a aplicação utiliza.

Comando "id" para identificar o usuário atual

Tentando buscar por arquivos, consegui encontrar a flag user.txt.

Captura da flag user.txt

Removendo o caractere # da requisição forjada e executando, dessa vez, um comando de chamada de shell reverso, codificado para URL.

Shell reversa via RCE

Escalação de Privilégio

Buscando por formas de escalar privilégios, verifiquei se existe algum arquivo que eu possa executar com permissões de root.

Comandos permitidos a serem executados como root

Com o resultado acima, podemos notar que existe um script em shell que pode ser executado como root, inclusive, com variáveis de ambiente personalizadas (SETENV).

Verificando o conteúdo do arquivo, consigo ver que existe o comando find declarado sem seu caminho absoluto.

Os comandos cat e truncate, circulados em azul, estão declarados com seu caminho absoluto. Já o comando find, circulado em vermelho, não está declarado da mesma forma

Através dessa brecha, consigo gerar um arquivo find chamando uma bash com permissões elevadas e declarar o diretório na variável de ambiente PATH.

Arquivo find forjado

Inseri a flag -p para que o UID e GUID do usuário atual não sejam levados em conta em sua execução. Agora, com um arquivo find especialmente forjado para ser chamado na execução do script encontrado, posso tentar elevar privilégios.

Execução do comando com variáveis de ambiente forjadas, elevando meus privilégios
Captura da flag root.txt

Last updated