lunes, 9 de diciembre de 2013

BackBox 3 - Iniciación al Pentesting (Parte 14)

Local File Inclusion: un paso más cerca del control

Local file inclusion (LFI ) se trata de una vulnerabilidad que permite al atacante subir una shell al servidor.

Esta shell no es más que un archivo que puede estar programado en distintos lenguajes como son PHP o ASP. El atacante buscará la manera de poder subir el archivo/shell a través de la web.

Normalmente este fallo de seguridad es debido a que los formularios de subida de archivos (documentos, imágenes, música... ) no hacen bien el filtrado del tipo de archivo o extensión que se sube. Esto se debe a un fallo de programación en el propio PHP o por una mala configuración en Apache.

Al disponer de una shell en la máquina de manera local podremos enviar casi cualquier comando como si estuviéramos delante del ordenador. Comentar que, a pesar de que se pueden lanzar comandos, no todos los comandos se podrán ejecutar, ya que para abrir determinados programas o acceder a algunos directorios y carpetas, se requieren permisos más elevados o de Root, sin embargo estos pocos permisos serán suficiente como para intentar una escalada de privilegios y así poder tener control total sobre el usuario y la máquina.
Imagen 1: Local File Inclusion



Si bien es cierto que en la mayoría de los casos este fallo se explota a través de formularios de subida, cada hacker se las ingenia para al final disponer de una shell en el servidor web independientemente el medio que haya utilizado.

LFI a Wordpress

Llegados a este punto podíamos haber vuelto a buscar vulnerabilidades, esta vez en Wordpress, con el fin de encontrar algún plugin que nos facilitara la subida de una shell. Sin embargo, puesto que ya tenemos un usuario Admin, nos aprovecharemos de éste para introducir así nuestra shell.

El proceso es sencillo ya que tan sólo nos va a hacer falta modificar algún archivo PHP de los que compone Wordpress. Al tratarse de uno de los archivos del propio Wordpress, el usuario Admin de Wordpress tendrá permisos suficientes para modificar dicho archivo y que éste se quede guardado en el servidor.

Para lograr nuestro propósito vamos a acceder al panel de administración con el usuario Admin (el cual ya creamos anteriormente a través de la BD) y vamos a buscar, entre toda la configuración del Panel Admin, la manera de modificar un archivo de los que compone Wordpress.

Una buena idea sería editar la plantilla/Theme que está instalado en ese Wordpress. Muchos de los archivos que componen el Theme están programados en PHP y se pueden editar.

Siempre que se hagan este tipo de modificaciones hay que tener cuidado con el archivo que se modifica, ya que si editamos un archivo que no debemos podemos dejar sin servicio la web.

Ahora que ya sabemos cual va a ser la forma de actuar y el proceso que se va a seguir, necesitamos descargar una shell para incrustarla en uno de estos archivos. En la web http://www.oco.cc/ podemos encontrar numerosas shell que nos servirán para hacer esto mismo. Cualquiera de ellas es válida.


Como ejemplo utilizamos la shell c99.php los pasos a seguir son:
  • Descargamos la shell (c99, r57, c100...)
  • Con algún editor de texto, abrimos la shell y copiamos su contenido.
  • Buscamos un archivo php que se puede editar dentro del panel Admin de Wordpres.
  • Pegamos el contenido de la Shell en el archivo de Wordpress. 

Imagen 2: Shell copiada en archivo author.php del Theme Twenty Twelve de Wordpress

Después de colocar la Shell en uno de los archivos sin que nadie note nada, nos falta saber la ruta exacta donde está alojada. En Wordpress, como en todos lo CMS, los archivos, directorios y rutas, son estáticos, por lo que podemos hacer dos cosas, 1-Bajarnos Wordpress y ver donde se encuentra la ruta, o 2-Buscar la ruta dentro del código fuente.

Quizás si hubiéramos modificado cualquier otro archivo de Wordpress nos hubiera hecho falta bajar una copia de Wordpress a nuestro equipo para ver la ruta, o utilizar un spider para recorrer todas las URL y ver así todos sus directorios (algo que puede estar capado si el administrador se ha preocupado de la seguridad de su sitio). En nuestro caso no va ser necesario todo esto, si vemos el código fuente de la página principal de Wordpress, podremos localizar fácilmente la ruta donde esta el Theme.
Imagen 3: Código fuente de la página principal de Wordpress
Lo siguiente será ver que comprobar que todo ha salido como esperamos y que al introducir la ruta donde hemos guardado la Shell realmente se muestra el panel de configuración de la Shell c99.

La ruta entera quedaría de la siguiente manera:

http://192.168.233.211/wordpress/wp-content/themes/twentytwelve/author.php
Imagen 4: Shell c99: Panel de Administración