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

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
.

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

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

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

/printer
com as credenciais encontradas
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.

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.


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

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

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

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.

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.

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

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


root.txt
Last updated