shop vulnyx card

En este writeup vamos a resolver la máquina Shop dificultad easy de VulNyx.

Resumen de conceptos trabajados:

Escaneo de Puertos
Descubrimiento de directorios
SQL Inyection
Escalada de privilegios

Si quieres conocer cómo introducirte en VulNyx paso a paso, en este post te cuento cómo hacerlo.

COMENZANDO CON EL RECONOCIMIENTO DE LA MÁQUINA VÍCTIMA EN LA RED

Inicio mi sesión siendo usuario root de mi máquina atacante con el “sudo su” y creamos la carpeta de la máquina víctima (mkdir Shop).

sudo su

Para asegurarnos de que la máquina víctima está conectada en la red, incluimos el comando:

arp-scan -I eth0 --localnet

y de esta forma vemos todas las IPs conectadas para empezar a analizarla (podemos comprobar que se encuentra la IP de la máquina VulNyx cuando la ejecutamos anteriormente).

Para asegurarte de que la máquina está activa, puedes enviarle un ping de esta forma:

ping -c 1 IP -R

*puedes añadir el comando -R para hacer un traceroute y ver el envío de paquetes y comprobar

nmap -sn IP

O también mediante el comando:

  • ¿ANTE QUÉ MÁQUINA NOS ENFRENTAMOS? WINDOWS TTL 128 O LINUX 64

En este caso es LINUX, ttl64.

Fase de Enumeración / Escaneo de Puertos

Comenzamos el análisis con la fase de enumeración y escaneo de puertos mediante el comando:

nmap -p- -sSCV --open --min-rate 5000 -vvv -n -Pn 192.168.64.140 -oN escaneo

*Lo exportamos en un -oN escaneo la evidencia para que quede registrada en nuestra carpeta de la máquina.

De tal forma que una vez se termina el escaneo, vamos a la carpeta de la máquina y abrimos con cat el resultado del escaneo:

  • Vemos los puertos 22 y 80 abiertos:

Puerto 22 versión OpenSSH 7.9p1 . Podemos ver en exploits en internet, algunas vulnerabilidades que se podrían atacar RCE, MitM, OpenSSH.

Como el puerto 80 está abierto, vamos a echar un vistazo a ver qué podemos encontrar.

Abrimos el navegador y ponemos la IP http://192.168.64.140:80 El servidor nos responde con un 200 y nos muestra el contenido de la web que parece ser un ecommerce:

La web en sí en el front no te deja abrir nuevas ventana, ni clicar sobre las imágenes o agregar a un carrito, tampoco hay una parte de login ni registro a primera vista.

Analizamos robots.txt (no está configurado) y en el código fuente no se encuentra a priori nada raro…

Usa como tecnologías web un servidor Apache en su versión 2.4.38 Debian y librería JQuery 1.10.2

Con la extensión Wappalyzer podemos analizar las tecnologías que usa la web:

Y también mediante el comando whatweb IP podemos sacar ese mismo resumen:

Descubrimiento de directorios

Después de analizar el código, vamos a probar a hacer fuzzing con DIRBUSTER para descubrir directorios ocultos en navegación pero disponibles web.

Encontramos varios directorios 200, y el más interesante es el /administrator

Al acceder a ese directorio, tenemos un panel de login:

SQL Inyection

Con este panel de login vamos a probar a aplicar ataques de inyección de SQL (SQLi).

Después de probar algunas inyecciones básicas como:

' OR '1'='1'; --

Vamos a aplicar un “SQLMAP” que mediante la automatización de procesos, nos permite detectar y explotar vulnerabilidad de inyección SQL en aplicaciones web y también acceder a la base de datos que hay detrás de ese panel de login por ejemplo.

De esta forma el comando y parámetros que aplicaríamos serían:

-u => la url sobre la que queremos aplicarlo

–dump => para extraer los datos de la base de datos (en busca de credenciales)

–batch => que ejecuta sqlmap sin tener que pedir confirmación por cada paso

–forms => para probar sobre vulnerabilidades que requieren interacción a través de formularios, como logins, registros, búsquedas, etc.

sqlmap -u http://192.168.64.140/administrator/ --forms --batch --dump

Durante el escaneo vemos que ha detectado que es posible poder aplicar un ataque “Sleep SQL”.

Este ataque consiste en inyectar un comando SQL que cause que el sistema de gestión de la base de datos “se duerma” o pause por un tiempo concreto antes de responder. Si el tiempo de respuesta de la aplicación web aumenta por el mismo periodo de tiempo indicado en la inyección, esto sugiere fuertemente que la inyección fue exitosa y que el atacante puede ejecutar comandos SQL arbitrarios.

Por ejemplo de esta forma:

Al ejecutarlo, vemos que la página tarda en responder 3 segundos o más, luego sí es cierto que es vulnerable a “SQL Blind”.

Después nos salta el mensaje de:

Cuando se termina de ejecutar el rastreo anterior de “sqlmap” , vemos que nos devuelve un listado de usuarios y contraseñas de la BD:

Ahora ya que tenemos este listado de credenciales, y sabiendo que, del inicio de escaneo de puertos inicial, el puerto 22 ssh está abierto, nos toca ir probando usernames y passwords.

Finalmente llegamos al usuario “bart” que nos permite acceder:

Escalada de privilegios

En este punto, y viendo que no tiene permisos de root:

Vamos a analizar qué tipo de permisos tiene mediante la búsqueda de capabilities con el comando “getcap”:

/usr/sbin/getcap -r / 2>/dev/null

Encontramos por tanto archivos de Linux de tipo capabilities con permisos especiales sobre archivos binarios como Perl.

EXPLICACION:

El comando getcap se utiliza para mostrar las capacidades (capabilities) asignadas a los archivos ejecutables en el sistema. Se ejecuta con las opciones -r y redirigiendo los errores a /dev/null, lo que significa que se está buscando de manera recursiva (-r) en todo el sistema de archivos las capacidades y está descartando los mensajes de error.

La salida muestra que hay dos versiones del intérprete Perl (/usr/bin/perl5.28.1 y /usr/bin/perl) con la capacidad cap_setuid+ep asignada.

  • cap_setuid: Es una capacidad que permite al programa modificar el UID efectivo del proceso (es decir, ejecutarse con un ID de usuario diferente al del usuario que lo ejecutó). Normalmente, este es un privilegio restringido al superusuario.
  • +ep: Significa «effective» y «permitted», lo que indica que la capacidad está habilitada y puede ser utilizada por el ejecutable.

Conociendo el acceso a Perl y los ficheros con capabilities, entonces vamos a gtfobins de github para ver cómo podemos escalar privilegios: https://gtfobins.github.io/gtfobins/perl/#capabilities

Y ejecutamos este comando que nos permite ejecutar bash y de esta forma ya seríamos usuario root.

perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";'

Otros posts relacionados