hacktricks/pentesting-web/clickjacking.md

20 KiB
Raw Blame History

クリックジャッキング

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

クリックジャッキングとは

クリックジャッキングは、ユーザー騙して別の要素として見えないまたは別の要素に偽装されたウェブページの要素をクリックさせる攻撃です。これにより、ユーザーは知らずにマルウェアをダウンロードしたり、悪意のあるウェブページを訪れたり、資格情報や機密情報を提供したり、お金を送金したり、オンラインで商品を購入したりすることがあります(ここから)。

フォームの事前入力トリック

時には、ページの読み込み時にGETパラメータを使用してフォームのフィールドの値を自動的に入力することができます。攻撃者はこの動作を悪用して、フォームに任意のデータを入力し、クリックジャッキングペイロードを送信してユーザーがボタンを押すようにします。

ドラッグ&ドロップでフォームを入力

ユーザーにフォームの入力を求める必要があるが、特定の情報(例:メールアドレスや特定のパスワード)を直接尋ねることはしたくない場合は、この例のように、制御されたデータを書き込む何かをドラッグ&ドロップするようにユーザーに依頼することができます。

基本的なペイロード

<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>

マルチステップペイロード

In some cases, a simple clickjacking attack may not be enough to achieve the desired outcome. In such situations, a multistep payload can be used to execute a series of actions on the victim's behalf.

いくつかの場合、単純なクリックジャッキング攻撃では望む結果を得ることができない場合があります。そのような状況では、マルチステップペイロードを使用して、被害者の代わりに一連のアクションを実行することができます。

The idea behind a multistep payload is to trick the victim into performing multiple actions without their knowledge. This can be achieved by embedding multiple invisible iframes within the clickjacked page, each pointing to a different target.

マルチステップペイロードのアイデアは、被害者が知らないうちに複数のアクションを実行するように騙すことです。これは、クリックジャックされたページ内に複数の見えないiframeを埋め込むことで実現できます。それぞれのiframeは異なるターゲットを指すようにします。

When the victim clicks on the clickjacked page, they unknowingly trigger the actions associated with each iframe. This can include performing actions such as liking a post, following a user, or even making a purchase.

被害者がクリックジャックされたページをクリックすると、彼らはそれぞれのiframeに関連付けられたアクションを知らずにトリガーします。これには、投稿の「いいね」、ユーザーのフォロー、さらには購入などのアクションが含まれることがあります。

To create a multistep payload, you will need to identify the actions you want to perform and the targets for each action. Then, you can create the necessary iframes and embed them within the clickjacked page.

マルチステップペイロードを作成するには、実行したいアクションと各アクションのターゲットを特定する必要があります。その後、必要なiframeを作成し、クリックジャックされたページに埋め込むことができます。

It's important to note that the use of multistep payloads may increase the complexity of the attack and may require additional techniques to ensure the actions are performed successfully.

マルチステップペイロードの使用は、攻撃の複雑さを増す可能性があり、アクションが正常に実行されるようにするために追加のテクニックが必要になることに注意してください。

<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>

ドラッグ&ドロップ + クリックのペイロード

Clickjacking is a technique that tricks users into clicking on something they didn't intend to click on. One way to achieve this is by combining the drag and drop functionality with a click payload.

Clickjackingは、ユーザーが意図しないものをクリックするように騙す技術です。ドラッグドロップ機能とクリックのペイロードを組み合わせることで、これを実現する方法があります。

The idea is to overlay an invisible element on top of a legitimate button or link, and then use the drag and drop functionality to move the invisible element over the button or link. When the user tries to click on the visible button or link, they are actually clicking on the invisible element, triggering the click payload.

このアイデアは、正規のボタンやリンクの上に見えない要素を重ねて配置し、ドラッグ&ドロップ機能を使用して見えない要素をボタンやリンクの上に移動させることです。ユーザーが見えるボタンやリンクをクリックしようとすると、実際には見えない要素をクリックしてしまい、クリックのペイロードがトリガーされます。

To create a drag and drop + click payload, follow these steps:

ドラッグ&ドロップ + クリックのペイロードを作成するには、以下の手順に従ってください:

  1. Identify the target button or link that you want the user to unintentionally click on.

    ユーザーが意図せずにクリックすることを望む対象のボタンやリンクを特定します。

  2. Create an invisible element, such as a div, with a higher z-index than the target button or link.

    対象のボタンやリンクよりも高いz-indexを持つ、divなどの見えない要素を作成します。

  3. Position the invisible element directly on top of the target button or link using CSS.

    CSSを使用して、見えない要素を対象のボタンやリンクの上に直接配置します。

  4. Implement the drag and drop functionality on the invisible element using JavaScript.

    JavaScriptを使用して、見えない要素にドラッグドロップ機能を実装します。

  5. When the user tries to click on the visible button or link, the invisible element will intercept the click event and trigger the desired action.

    ユーザーが見えるボタンやリンクをクリックしようとすると、見えない要素がクリックイベントを傍受し、所望のアクションがトリガーされます。

By combining drag and drop with a click payload, you can deceive users into performing unintended actions, such as submitting forms, granting permissions, or making purchases, without their knowledge or consent.

ドラッグ&ドロップとクリックのペイロードを組み合わせることで、ユーザーが意図しないアクション(フォームの送信、権限の付与、購入など)を知らずに行わせることができます。

<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 + クリックジャッキング

ユーザーがクリックする必要がある XSS 攻撃 を特定し、ページが クリックジャッキングの脆弱性 を持っている場合、ユーザーを騙してボタン/リンクをクリックさせることで悪用することができます。
例:
アカウントの一部のプライベートな詳細情報(あなただけが設定および読み取り可能な詳細情報)に セルフ XSS を見つけました。これらの詳細を設定するためのページは クリックジャッキングの脆弱性 を持っており、GET パラメータで フォーム事前に入力 することができます。
__攻撃者は、そのページに対して クリックジャッキング攻撃 を準備し、XSS ペイロードフォーム事前に入力 して ユーザーフォームを送信 するように 騙す ことができます。そのため、フォームが送信されると 値が変更され、ユーザーが XSS を実行 します。

クリックジャッキングを回避する方法

クライアント側の防御策

クリックジャッキングを防ぐために、クライアント側で以下の動作を行うスクリプトを実行することができます。

  • 現在のアプリケーションウィンドウがメインまたはトップウィンドウであることを確認および強制する
  • すべてのフレームを表示する
  • 不可視フレームをクリックできないようにする
  • ユーザーに対して潜在的なクリックジャッキング攻撃を検出および通知する

バイパス

フレームバスターは JavaScript であるため、ブラウザのセキュリティ設定によってその動作が阻止される場合があります。また、ブラウザが JavaScript をサポートしていない場合もあります。フレームバスターに対する効果的な攻撃者の回避策は、HTML5 の iframe sandbox 属性 を使用することです。この属性を allow-forms または allow-scripts の値で設定し、allow-top-navigation の値を省略すると、フレームバスタースクリプトは中断されます。なぜなら、iframe は自身がトップウィンドウであるかどうかをチェックできないからです。

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

allow-formsallow-scriptsの両方の値は、iframe内で指定されたアクションを許可しますが、トップレベルのナビゲーションは無効になります。これにより、ターゲットサイト内の機能は許可されますが、フレームの破壊行為は防止されます。

実行するClickjacking攻撃のタイプによっては、allow-same-originallow-modals、またはさらに多くの設定が必要になる場合があります。攻撃を準備する際には、ブラウザのコンソールを確認して、他の設定が必要かどうかを確認してください。

X-Frame-Options

X-Frame-Options HTTPレスポンスヘッダーは、ブラウザがページを<frame>または<iframe>でレンダリングするかどうかを示すために使用されます。サイトはこれを使用して、自身のコンテンツが他のサイトに埋め込まれないようにすることで、Clickjacking攻撃を回避できます。すべてのHTMLコンテンツを含むレスポンスに対して**X-Frame-Optionsヘッダーを設定**します。可能な値は次のとおりです。

  • X-Frame-Options: denyは、どのドメインからもコンテンツをフレーム化することを防止します(推奨値)
  • X-Frame-Options: sameoriginは、現在のサイトのみがコンテンツをフレーム化できるようにします。
  • X-Frame-Options: allow-from https://trusted.comは、指定された「uri」がこのページをフレーム化できるようにします。
  • ブラウザがサポートしていない場合、これはオープンに失敗しますので、以下の制限を確認してください。
  • 他のブラウザは新しいCSP frame-ancestorsディレクティブもサポートしています。一部のブラウザは両方をサポートしています。

Content Security PolicyCSPframe-ancestorsディレクティブ

推奨されるClickjacking保護は、アプリケーションのContent Security Policyに**frame-ancestorsディレクティブ**を組み込むことです。
**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';

詳細な情報やより複雑な例については、次のドキュメントを参照してください。

制限

  • ブラウザのサポート: CSP frame-ancestorsは、まだすべての主要なブラウザでサポートされていません。
  • X-Frame-Optionsが優先される: CSP仕様の「関連付けX-Frame-Options」セクションは、「frame-ancestorsディレクティブを含むポリシーがリソースとともに配信され、その配置が「強制」である場合、X-Frame-Optionsヘッダーは無視される必要がある」と述べていますが、Chrome 40とFirefox 35はframe-ancestorsディレクティブを無視し、代わりにX-Frame-Optionsヘッダーに従います。

参考文献


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥