Escaneo automatizado

Es fundamental comprender cómo funcionan los ataques de inclusión de archivos y cómo podemos crear manualmente cargas útiles avanzadas y utilizar técnicas personalizadas para lograr la ejecución remota de código. Esto se debe a que, en muchos casos, para explotar la vulnerabilidad, puede requerirse una carga útil personalizada que se ajuste a sus configuraciones específicas. Además, al lidiar con medidas de seguridad como un WAF o un firewall, debemos aplicar nuestros conocimientos para observar cómo se bloquea una carga útil o carácter específico e intentar crear una carga útil personalizada para sortearlo.

En muchos casos triviales, no será necesario explotar manualmente la vulnerabilidad LFI. Existen numerosos métodos automatizados que nos permiten identificar y explotar rápidamente vulnerabilidades LFI sencillas. Podemos utilizar herramientas de fuzzing para probar una amplia lista de payloads LFI comunes y comprobar si alguno funciona, o bien, podemos utilizar herramientas LFI especializadas para detectar este tipo de vulnerabilidades. Esto es lo que analizaremos en esta sección.

Parámetros de fuzzing

Los formularios HTML que los usuarios pueden utilizar en la interfaz de la aplicación web suelen estar debidamente probados y protegidos contra diversos ataques web. Sin embargo, en muchos casos, la página puede contener otros parámetros expuestos que no están vinculados a ningún formulario HTML, por lo que los usuarios comunes nunca accederían a ellos ni causarían daños involuntariamente. Por ello, puede ser importante realizar pruebas de fumming en busca de parámetros expuestos, ya que tienden a ser menos seguros que los públicos.

El módulo "Ataque a aplicaciones web con Ffuf" detalla cómo realizar fuzzing para GETparámetros POST. Por ejemplo, podemos realizar fuzzing en la página para GETparámetros comunes, como se muestra a continuación:

ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?FUZZ=value' -fs 2287

Una vez que identificamos un parámetro expuesto que no está vinculado a ninguno de los formularios que hemos probado, podemos realizar todas las pruebas LFI descritas en este módulo. Esto no es exclusivo de las vulnerabilidades LFI, sino que también se aplica a la mayoría de las vulnerabilidades web analizadas en otros módulos, ya que los parámetros expuestos pueden ser vulnerables a cualquier otro tipo de vulnerabilidad.

Consejo: Para un escaneo más preciso, podemos limitar nuestro escaneo a los parámetros LFI más populares que se encuentran en este enlace .

Listas de palabras LFI

Hasta ahora, en este módulo, hemos estado creando manualmente nuestras cargas útiles LFI para detectar vulnerabilidades LFI. Esto se debe a que las pruebas manuales son más fiables y pueden encontrar vulnerabilidades LFI que de otro modo podrían pasar desapercibidas, como ya se mencionó. Sin embargo, en muchos casos, conviene realizar una prueba rápida en un parámetro para comprobar si es vulnerable a alguna carga útil LFI común, lo que puede ahorrarnos tiempo en aplicaciones web donde necesitamos probar diversas vulnerabilidades.

Existen varias listas de palabras LFI que podemos usar para este escaneo. Una buena lista es LFI-Jhaddix.txt , ya que contiene diversas técnicas de bypass y archivos comunes, lo que facilita la ejecución de varias pruebas simultáneamente. Podemos usar esta lista para realizar fuzzing al ?language=parámetro que hemos estado probando a lo largo del módulo, como se muestra a continuación:

ffuf -w /usr/share/wordlists/seclists/Fuzzing/LFI/LFI-Jhaddix.txt:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?language=FUZZ' -fs 2287

Como podemos ver, el escaneo arrojó varias cargas útiles LFI que pueden usarse para explotar la vulnerabilidad. Una vez identificadas las cargas útiles, debemos probarlas manualmente para verificar que funcionen correctamente y muestren el contenido del archivo incluido.

Archivos del servidor de fuzzing

Además de realizar pruebas de fuzzing en las cargas útiles de LFI, existen diferentes archivos de servidor que podrían ser útiles para nuestra explotación de LFI, por lo que sería útil saber dónde se encuentran dichos archivos y si podemos leerlos. Estos archivos incluyen: Server webroot path, server configurations file, y server logs.

Directorio web del servidor

En algunos casos, para completar nuestra explotación, podríamos necesitar conocer la ruta completa del directorio raíz del servidor web. Por ejemplo, si quisiéramos localizar un archivo que subimos, pero no pudiéramos acceder a su /uploadsdirectorio mediante rutas relativas ../../uploads. En tales casos, necesitaríamos averiguar la ruta del directorio raíz del servidor web para poder localizar nuestros archivos subidos mediante rutas absolutas en lugar de rutas relativas.

Para ello, podemos realizar una búsqueda rápida del index.phparchivo a través de rutas webroot comunes, que podemos encontrar en esta lista de palabras para Linux o en esta lista de palabras para Windows . Dependiendo de nuestra situación de LFI, es posible que necesitemos añadir algunos directorios de origen (por ejemplo, `/usr/local/bin` ../../../../) y luego añadir nuestro archivo index.phpposteriormente.

El siguiente es un ejemplo de cómo podemos hacer todo esto con ffuf:

ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/default-web-root-directory-linux.txt:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?language=../../../../FUZZ/index.php' -fs 2287

Como podemos ver, el escaneo identificó correctamente la ruta raíz del sitio web en ( /var/www/html/). También podemos usar la misma lista de palabras LFI-Jhaddix.txt que usamos anteriormente, ya que contiene varias cargas útiles que podrían revelar la ruta raíz. Si esto no nos ayuda a identificarla, la mejor opción será consultar la configuración del servidor, ya que suele contener la ruta raíz y otra información importante, como veremos a continuación.

Registros / Configuraciones del servidor

Como vimos en la sección anterior, necesitamos identificar el directorio de registros correcto para poder realizar los ataques de envenenamiento de registros que comentamos. Además, como acabamos de mencionar, es posible que también necesitemos leer la configuración del servidor para identificar la ruta raíz web y otra información importante (¡como la ruta de los registros!).

Para ello, también podemos usar la lista de palabras LFI-Jhaddix.txt , ya que contiene muchos de los registros del servidor y rutas de configuración que nos pueden interesar. Si quisiéramos un escaneo más preciso, podemos usar esta lista de palabras para Linux o esta otra para Windows , aunque no forman parte de [ nombre del paquete seclists], por lo que primero debemos descargarlas. Probemos la lista de palabras de Linux con nuestra vulnerabilidad LFI y veamos qué obtenemos:

ffuf -w ./LFI-WordList-Linux:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?language=../../../../FUZZ' -fs 2287

Como podemos ver, el escaneo devolvió más de 60 resultados, muchos de los cuales no se identificaron con la lista de palabras LFI-Jhaddix.txt , lo que demuestra la importancia de un escaneo preciso en ciertos casos. Ahora, podemos intentar leer cualquiera de estos archivos para ver si podemos obtener su contenido. Leeremos ( /etc/apache2/apache2.conf), ya que es una ruta conocida para la configuración del servidor Apache:

curl http://<SERVER_IP>:<PORT>/index.php?language=../../../../etc/apache2/apache2.conf

Como podemos ver, obtenemos la ruta raíz web predeterminada y la ruta de los registros. Sin embargo, en este caso, la ruta de los registros utiliza una variable global de Apache ( APACHE_LOG_DIR), que se encuentra en otro archivo que vimos anteriormente, que es ( /etc/apache2/envvars), y podemos leerlo para encontrar los valores de la variable:

curl http://<SERVER_IP>:<PORT>/index.php?language=../../../../etc/apache2/envvars

Como podemos ver, la APACHE_LOG_DIRvariable ( ) está configurada en ( /var/log/apache2), y la configuración anterior nos indicó que los archivos de registro son /access.logy /error.log, a los que se accedió en la sección anterior.

Nota: Por supuesto, podemos usar una simple lista de palabras para encontrar los registros, ya que varias de las listas que usamos en esta sección mostraron su ubicación. Sin embargo, este ejercicio nos enseña cómo revisar manualmente los archivos identificados y usar la información obtenida para identificar más archivos e información importante. Esto es muy similar a cuando analizamos diferentes fuentes de archivos en la PHP filterssección anterior, y tales esfuerzos pueden revelar información previamente desconocida sobre la aplicación web, la cual podemos usar para explotarla aún más.

Herramientas LFI

Finalmente, podemos utilizar diversas herramientas LFI para automatizar gran parte del proceso que hemos aprendido, lo que puede ahorrar tiempo en algunos casos, pero también puede pasar por alto muchas vulnerabilidades y archivos que podríamos identificar mediante pruebas manuales. Las herramientas LFI más comunes son LFISuite , LFiFreak y liffy . También podemos buscar en GitHub otras herramientas y scripts LFI, pero, en general, la mayoría realiza las mismas tareas, con distintos niveles de éxito y precisión.

Lamentablemente, la mayoría de estas herramientas no reciben mantenimiento y se basan en versiones obsoletas python2, por lo que su uso podría no ser una solución a largo plazo. Descarga cualquiera de las herramientas mencionadas y pruébalas con alguno de los ejercicios de este módulo para comprobar su precisión.

Last updated