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

# Photobomb

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FUT3Uk60ysohRLrA00R5U%2FPhotobomb.png?alt=media&#x26;token=a26ded44-e1b1-4e84-98b4-82c42cdf13af" alt=""><figcaption><p>Photobomb</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2F2GuFfYvXiIJ9LM54nnfz%2FPrint1.png?alt=media&#x26;token=83c3340e-08a7-43b9-8a03-705d55a9a0ba" alt=""><figcaption><p>Página inicial</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FaeQYjsk2eb4ZT3TTwspI%2FPrint2.png?alt=media&#x26;token=72993b71-4f24-488b-8a14-151e40a65705" alt=""><figcaption><p>Script e diretório encontrados no código-fonte</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FzoSPcmVsQCzcEaCU6Mnn%2FPrint3.png?alt=media&#x26;token=f3e3b27e-5cba-4ede-9fd2-d0000ff9439c" alt=""><figcaption><p>Possíveis credenciais encontradas no arquivo javascript</p></figcaption></figure>

## Exploração

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FW2nCIttZnREmT48sLzl4%2FPrint4.png?alt=media&#x26;token=ceb90799-21a0-45c1-9b4e-6ca6e2dfa0d6" alt=""><figcaption><p>Acessando a página <code>/printer</code> com as credenciais encontradas</p></figcaption></figure>

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FMijR0KkfatlKNvLqg3Mk%2FPrint5.png?alt=media&#x26;token=3d4ee66f-c50b-4ada-a798-08e5f85e354c" alt=""><figcaption><p>Diretório acessado com sucesso</p></figcaption></figure>

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.

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FIKFNvrRdzc7g2FVNjCVV%2FPrint6.png?alt=media&#x26;token=50f7428a-a6c2-4e72-bdc1-78f470eb82d6" alt=""><figcaption><p>Seção de download das imagens da página</p></figcaption></figure>

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.

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FFF7xxN87NmRv5UXY8ImJ%2FPrint7.png?alt=media&#x26;token=37ec26c8-5e86-4340-a14e-db8b0aaf4eb5" alt=""><figcaption><p>Tentativa de execução remota de código (curl)</p></figcaption></figure>

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FWBWL32DHplvIWjfeGxGj%2FPrint8.png?alt=media&#x26;token=5a11be27-aac0-4ca6-adac-9c22ccb5031c" alt=""><figcaption><p>Comunicação estabelecida com sucesso</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2Fl6SLb3fhTg7X9Jjq0UJ5%2FPrint9.png?alt=media&#x26;token=1d570530-f48c-42df-9ae8-93434a32ce75" alt=""><figcaption><p>Comando "id" para identificar o usuário atual</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FslUf78lK8SYFosCKf1fq%2FPrint10.png?alt=media&#x26;token=78419f6e-96d5-4d0f-a30d-93a4a1132990" alt=""><figcaption><p>Captura da flag user.txt</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FZs4glRU3zMqId9t5qGZZ%2FPrint11.png?alt=media&#x26;token=dade9029-256b-41d9-8c71-72396a4bba8f" alt=""><figcaption><p>Shell reversa via RCE</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FL0AVm2ZwSk5L7Ylru2bM%2FPrint12.png?alt=media&#x26;token=0613e32f-7823-4d79-9c03-d8c71b2c35a0" alt=""><figcaption><p>Comandos permitidos a serem executados como root</p></figcaption></figure>

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.

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FdhtfelnvC92jJGmhRNkY%2FPrint13.png?alt=media&#x26;token=646d33cd-6edd-4b98-a912-548d31d4033d" alt=""><figcaption><p>Os comandos <code>cat</code> e <code>truncate</code>, circulados em azul, estão declarados com seu caminho absoluto. Já o comando <code>find</code>, circulado em vermelho, não está declarado da mesma forma</p></figcaption></figure>

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

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FVce0mLtAnOYVpC4pky4h%2FPrint14.png?alt=media&#x26;token=44bb3630-00d7-4f28-8add-9098c363e792" alt=""><figcaption><p>Arquivo <code>find</code> forjado</p></figcaption></figure>

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.

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FXzHFN0MlrsQ7WogRNtrw%2FPrint15.png?alt=media&#x26;token=2a4db31c-5c6f-4be0-8b14-6a7d5cdfdee0" alt=""><figcaption><p>Execução do comando com variáveis de ambiente forjadas, elevando meus privilégios</p></figcaption></figure>

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FmM8BsxYXjWBm3ec93V6g%2FPrint16.png?alt=media&#x26;token=68c3688d-7721-4d80-a731-219b72f3f4a5" alt=""><figcaption><p>Captura da flag <code>root.txt</code></p></figcaption></figure>
