Hack&Beers – Hacking de Shared Hosting (Symlink)

Publicada en Publicada en Conferencias, Pruebas de concepto

Hola a todos! Soy @alvarodh5 y hoy os traigo una entrada que ya traté en el Hack&Beers de Morteruelo, así que, aprovecho para dar de nuevo las gracias a toda la organización por la oportunidad 🙂

Esta ponencia estaba orientada al hacking de servidores, más concretamente servidores web con Apache, mediante symlink.

Sin más dilación, os dejo con las diapositivas utilizadas en la ponencia y a continuación con su respectivo desarrollo.

Después del correspondiente disclaimer, comenzaremos esta entrada con un target, en este caso será un WordPress:

Obviamente, nuestro objetivo del día será comprometer la seguridad de ese WordPress (o cualquier otra página, no necesariamente debe ser un WordPress). Pero como siempre, no lo íbamos a tener fácil y nuestra web está muy bien securizada, y es que un WordPress bien montado es inconquistable 😉

 

Como he comentado anteriormente, nuestro WordPress objetivo no tiene ninguna vulnerabilidad, tampoco a nivel de infraestructura y el administrador del sitio tiene conocimientos de hacking, por tanto, no es viable realizar un ataque dirigido. Pero hemos detectado, que utiliza un hosting compartido.

La solución a nuestros problemas es SYMLINK! Así que, vamos a descubrir más sobre este fantástico comando.

¿Qué es Symlink? ¿Para qué se utiliza?

  • Symlink proviene de Symbolic Link (enlace simbólico),que sirve para hacer referencia a un directorio o fichero que se encuentra en un lugar distinto.
  • Modificar el symlink significará reflejarlo en el original, pero, si lo eliminamos, el auténtico permanecerá intacto. Esto último, no ocurre con el hardlink, eliminándose ambos.
  • En resumen, los enlaces simbólicos indican un acceso a un directorio o fichero que se encuentra en un lugar diferente (“Acceso Directo”).

Ejemplos

 ln –s RUTA_ORIGINAL    RUTA_SYMLINK

 

WTF? ¿Y para qué nos va a servir esto? Pues para mucho, ahora lo que necesitamos es encontrar una nueva víctima, pero no una cualquiera, ¿y para qué?

Pues nuestro objetivo es pivotar de una víctima a otra, por tanto, vamos a buscar otra página vulnerable, en el mismo servidor 😀

¿Cómo buscamos la victima?

Para descubrir nuevos objetivos usaremos Reverse IP LOOKUP  que se encarga de revisar los registros A de los DNS de muchos dominios (obviamente ya analizados) encontrando webs con las que comparte servidor.

 

Para automatizar la búsqueda he desarrollado un script que está disponible en mi github

 

Para ello, utilizaremos –ip y el dominio de la página web a vulnerar.

Tal y como se puede apreciar en la imagen anterior, nuestro objetivo comparte servidor con 1789 webs más (seguramente sean más o menos por lo que comenté arriba). De este gran número, tan solo debemos encontrar una vulnerable y subir shell, porque… When getting shell is only the start of the journey”

 

Llegados a este punto, ya hemos hecho lo más complicado, en mi caso, a continuación subiré otra shell (weevly) por seguir utilizando nuestra terminal 🙂

El siguiente punto es visualizar el fichero /etc/passwd

Como se puede visualizar, se muestran las rutas de los usuarios, lo más lógico sería intentar acceder.

El primer paso sería acceder al home de todos los usuarios y listar los directorios disponibles:

Ahora, intentaremos acceder a cualquiera (que no sea el nuestro):

Como era de esperar, no tenemos permisos para acceder. El siguiente paso es realizar symlink tal y como hemos visto anteriormente por ejemplo directamente a / (o al directorio que queramos):

 

Ahora ya tenemos acceso a todo el servidor, pero el problema con el que nos encontramos es, que desconocemos el directorio de nuestro objetivo (imaginemos que no tiene tampoco ninguna vulnerabilidad de tipo path disclosure).

Pues tenemos dos opciones:

 

Opción A

Existen scripts automatizados para dumpear todos los configs de CMS conocidos sabiendo las rutas (/etc/passwd), puesto a que nuestro sitio es un WordPress, esta opción nos valdría. Dichos scripts están desarrollados normalmente en perl o python. Estos scripts son los que utilizan muchos teams para hacer defacements masivamente, estoy seguro que más de uno se habrá preguntado como lo hacían al ver todo un servidor comprometido en Zone-H.

Opción B

Buscar en el servidor nuestro sitio y sólo acceder a ese, para ello, antes debemos sacar el nombre del directorio.

Nota: Este fichero sólo lo he encontrado en un servidor…

El recuadro en rojo será el nombre del usuario y con él, tendremos la ruta:

Teniendo acceso al fichero de configuración, ahora, tan solo nos queda conectarnos a la DB y crearnos un usuario con privilegios de administración.

TIPS

En los casos de que de forbidden, puedes subir un .htaccess con las siguientes instrucciones:

  • Options Indexes  –> Listado de directorios
  • FollowSymlinks    –> Indica al navegador que puede seguir Symlink
  • AddType txt .php AddHandler txt .php  –> Le dice al navegador como debe tratar el fichero.

 

Defendiéndonos de Symlink

Esta vulnerabilidad se soluciona deshabilitando la función del servidor:

  • FollowSymlink
  • Open_BaseDir

 

 

Hasta aquí la entrada de hoy, espero que hayáis aprendido y os haya gustado.

 

Un saludo, @alvarodh5

Un comentario en “Hack&Beers – Hacking de Shared Hosting (Symlink)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *