# Clickjacking
{{#include ../banners/hacktricks-training.md}}
## What is Clickjacking
クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**を**クリックするように騙されます**。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。
### Prepopulate forms trick
時には、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋めることが可能です**。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、ユーザーが送信ボタンを押すようにクリックジャッキングペイロードを送信することができます。
### Populate form with Drag\&Drop
ユーザーに**フォームを埋めてもらいたいが、特定の情報(知っているメールアドレスや特定のパスワードなど)を直接書かせたくない場合**、ユーザーに**Drag\&Drop**してもらうように頼むだけで、あなたの制御されたデータを書き込むことができます。これは[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)のように行えます。
### Basic Payload
```css
Click me
```
### マルチステップペイロード
```css
Click me first
Click me next
```
### Drag\&Drop + Click ペイロード
```css
.
1. Click and press delete button
3.Click me
2.DRAG ME TO THE RED BOX
```
### XSS + Clickjacking
もしあなたが**ユーザーがクリックする必要があるXSS攻撃**を特定し、ページが**クリックジャッキングに脆弱**であれば、ユーザーをボタン/リンクをクリックさせるためにそれを悪用することができます。\
例:\
あなたはアカウントのいくつかのプライベートな詳細に**自己XSS**を見つけました(**あなたのみが設定および読み取ることができる**詳細)。これらの詳細を設定するための**フォーム**が**クリックジャッキングに脆弱**であり、GETパラメータで**フォーム**を**事前入力**することができます。\
攻撃者は、そのページに対して**XSSペイロード**で**フォーム**を**事前入力**し、**ユーザー**を**フォームを送信**させるように**騙す**ための**クリックジャッキング**攻撃を準備することができます。したがって、**フォームが送信されると**、値が変更され、**ユーザーはXSSを実行します**。
### DoubleClickjacking
最初に[この投稿で説明された](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html)この技術は、犠牲者に特定の場所に配置されたカスタムページのボタンをダブルクリックさせ、マウスダウンとクリックイベントの間のタイミングの違いを利用して、ダブルクリック中に犠牲者のページを読み込むことで、**犠牲者が実際に犠牲者のページの正当なボタンをクリックする**ことを可能にします。
例はこのビデオで見ることができます:[https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
コードの例は[このページ](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html)で見つけることができます。
> [!WARNING]
> この技術は、クリックジャッキングに対するすべての保護を回避して、犠牲者のページの1つの場所をクリックさせることを可能にします。したがって、攻撃者は**1回のクリックで実行できる敏感なアクション、例えばOAuthの権限を受け入れるプロンプト**を見つける必要があります。
## Clickjackingを軽減するための戦略
### クライアントサイドの防御
クライアントサイドで実行されるスクリプトは、クリックジャッキングを防ぐためのアクションを実行できます:
- アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。
- すべてのフレームを表示可能にする。
- 見えないフレームへのクリックを防ぐ。
- 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。
しかし、これらのフレームバスティングスクリプトは回避される可能性があります:
- **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptのサポートの欠如に基づいてこれらのスクリプトをブロックする可能性があります。
- **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-top-navigation`なしで`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することで、フレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。
```html
```
`allow-forms` と `allow-scripts` の値は、トップレベルのナビゲーションを無効にしながら、iframe内でのアクションを有効にします。ターゲットサイトの意図した機能を確保するために、攻撃の種類に応じて `allow-same-origin` や `allow-modals` などの追加の権限が必要になる場合があります。ブラウザのコンソールメッセージは、どの権限を許可するかの指針となります。
### サーバーサイドの防御
#### X-Frame-Options
**`X-Frame-Options` HTTPレスポンスヘッダー**は、ブラウザにページを `` または `