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)»