
概念実証LFIスキャナ: ディレクトリトラバーサルと正規表現マッチングによる /etc/passwd 露出の自動検出。
# LFI Scanner
対象ホストに対して `/etc/passwd` の取得を試み、正規表現チェックでその存在を検出することにより、ローカルファイルインクルージョン(LFI)の脆弱性をスキャンする軽量な Python 概念実証(PoC)です。 :contentReference[oaicite:0]{index=0}
## 特徴
- **バッチスキャン**:入力ファイルからホスト名または host:port ターゲットを一括スキャン
- **ディレクトリトラバーサルペイロード**:`/etc/passwd` への到達
- **正規表現による検出**:`root` エントリの検出による LFI の確認
- **プログレスバー**:`tqdm` によるリアルタイムの進捗表示
- **構造化レポート**:検出結果とプレビューを結果ファイルに出力
## 前提条件
- Python 3.6 以降
- [`tqdm`](https://pypi.org/project/tqdm/)(`pip install tqdm`)
- PATH に `curl` CLI が含まれていること
## インストール
```bash
git clone https://github.com/yourusername/lfi-scanner.git
cd lfi-scanner
pip install tqdm
python poc.py <input_file> [-o OUTPUT_FILE]
<input_file>:1 行に 1 ターゲット(hostname または hostname:port)を記載したファイルへのパス。-o, --output:(任意)結果を書き出すファイルのパス(デフォルト:results.txt)。次のような targets.txt があるとします:
example.com
192.168.0.1:8443
スキャナーを実行します:
python poc.py targets.txt -o scan_results.txt
次のような出力が表示されます:
[+] https://example.com:443/... → /etc/passwd FOUND
[-] https://192.168.0.1:8443/... → Response received, no match
また、scan_results.txt にはサマリーとプレビューが保存されます。
poc.py:
argparse を使用して --input と --output を解析します。curl --insecure -s を呼び出します。root:.*?:0:0: を検索して /etc/passwd の露出を確認します。このツールは責任を持って、所有しているか、テストの明示的な許可を得ている資産にのみ使用してください。無断スキャンは法律や利用規約に違反するおそれがあります。
MIT License の下で公開されています。