From c0778399209bbacc405ffb15011cd1655ae27ab2 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 15 Jun 2025 15:14:14 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks. --- src/SUMMARY.md | 1 + .../pentesting-web/ruby-tricks.md | 9 +++ src/pentesting-web/clickjacking.md | 30 ++++---- .../iframes-in-xss-and-csp.md | 73 +++++++++++++++---- 4 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 src/network-services-pentesting/pentesting-web/ruby-tricks.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ef5322f3e..d902fdb93 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -435,6 +435,7 @@ - [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md) - [Python](network-services-pentesting/pentesting-web/python.md) - [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md) + - [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md) - [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]() - [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md) - [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md) diff --git a/src/network-services-pentesting/pentesting-web/ruby-tricks.md b/src/network-services-pentesting/pentesting-web/ruby-tricks.md new file mode 100644 index 000000000..549054449 --- /dev/null +++ b/src/network-services-pentesting/pentesting-web/ruby-tricks.md @@ -0,0 +1,9 @@ +# Ruby Tricks + +{{#include ../../banners/hacktricks-training.md}} + +## ファイルアップロードによるRCE + +[この記事](https://www.offsec.com/blog/cve-2024-46986/)で説明されているように、`config/initializers/`のような敏感なディレクトリに`.rb`ファイルをアップロードすると、Ruby on Railsアプリケーションでリモートコード実行(RCE)につながる可能性があります。 + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index 6793b5a67..66509b264 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -4,15 +4,15 @@ ## What is Clickjacking -クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**をウェブページ上で**クリック**するように**騙され**ます。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。 +クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**を**クリックするように騙されます**。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。 ### Prepopulate forms trick -時には、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋める**ことが可能です。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、ユーザーが送信ボタンを押すようにクリックジャッキングペイロードを送信することがあります。 +時には、**ページを読み込む際にGETパラメータを使用してフォームのフィールドの値を埋めることが可能です**。攻撃者はこの動作を悪用して、任意のデータでフォームを埋め、ユーザーが送信ボタンを押すようにクリックジャッキングペイロードを送信することができます。 ### Populate form with Drag\&Drop -ユーザーに**フォームを埋めてもらいたい**が、特定の情報(知っているメールアドレスや特定のパスワードなど)を直接書くように頼みたくない場合は、**Drag\&Drop**してもらうように頼むだけで、あなたの制御したデータを書き込むことができます。これは[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)のように行えます。 +ユーザーに**フォームを埋めてもらいたいが、特定の情報(知っているメールアドレスや特定のパスワードなど)を直接書かせたくない場合**、ユーザーに**Drag\&Drop**してもらうように頼むだけで、あなたの制御されたデータを書き込むことができます。これは[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)のように行えます。 ### Basic Payload ```css @@ -94,18 +94,18 @@ background: #F00; あなたはアカウントのいくつかのプライベートな詳細に**自己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.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18) -コードの例は[このページ](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html)にあります。 +コードの例は[このページ](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html)で見つけることができます。 > [!WARNING] -> この技術は、クリックジャッキングに対するすべての保護を回避して、犠牲者のページの1つの場所をクリックさせることを可能にします。したがって、攻撃者は**OAuthの権限を受け入れるプロンプトのように、1回のクリックで実行できる敏感なアクションを見つける必要があります**。 +> この技術は、クリックジャッキングに対するすべての保護を回避して、犠牲者のページの1つの場所をクリックさせることを可能にします。したがって、攻撃者は**1回のクリックで実行できる敏感なアクション、例えばOAuthの権限を受け入れるプロンプト**を見つける必要があります。 -## クリックジャッキングを軽減するための戦略 +## Clickjackingを軽減するための戦略 ### クライアントサイドの防御 @@ -116,9 +116,9 @@ background: #F00; - 見えないフレームへのクリックを防ぐ。 - 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。 -ただし、これらのフレームバスティングスクリプトは回避される可能性があります: +しかし、これらのフレームバスティングスクリプトは回避される可能性があります: -- **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptサポートの欠如に基づいてこれらのスクリプトをブロックする場合があります。 +- **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptのサポートの欠如に基づいてこれらのスクリプトをブロックする可能性があります。 - **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-top-navigation`なしで`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することで、フレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。 ```html ### `child-src` と `frame-src` を使用したContent Security Policy (CSP) -**Content Security Policy (CSP)**は、ブラウザがコンテンツを読み込むことを許可すべきソースを指定することによって、Clickjackingやその他のコードインジェクション攻撃を防ぐためのセキュリティ対策です。 +**Content Security Policy (CSP)**は、ブラウザがコンテンツを読み込むことを許可するソースを指定することによって、Clickjackingやその他のコードインジェクション攻撃を防ぐためのセキュリティ対策です。 #### `frame-src` ディレクティブ @@ -168,8 +168,8 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com; #### `child-src` ディレクティブ -- ウェブワーカーとフレームの有効なソースを設定するために CSP レベル 2 で導入されました。 -- frame-src と worker-src のフォールバックとして機能します。 +- ウェブワーカーとフレームの有効なソースを設定するためにCSPレベル2で導入されました。 +- frame-srcおよびworker-srcのフォールバックとして機能します。 ``` Content-Security-Policy: child-src 'self' https://trusted-website.com; ``` @@ -179,9 +179,9 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com; - 非推奨: child-src は frame-src と worker-src に置き換えられつつあります。 - フォールバック動作: frame-src が存在しない場合、child-src がフレームのフォールバックとして使用されます。両方が存在しない場合は、default-src が使用されます。 -- 厳格なソース定義: 悪用を防ぐために、指示に信頼できるソースのみを含めてください。 +- 厳格なソース定義: 悪用を防ぐために、指令には信頼できるソースのみを含めてください。 -#### JavaScript フレームバスティングスクリプト +#### JavaScript フレームブレイキングスクリプト 完全に確実ではありませんが、JavaScript ベースのフレームバスティングスクリプトを使用して、ウェブページがフレームにされるのを防ぐことができます。例: ```javascript diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index d858bc4b3..6623a55a6 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -10,7 +10,7 @@ iframedページのコンテンツを示す方法は3つあります: - `data:`プロトコルを使用してコンテンツを示す`src`を介して - コンテンツを示す`srcdoc`を介して -**親と子の変数にアクセスする** +**親と子の変数へのアクセス** ```html ``` -前のHTMLにHTTPサーバー(例えば`python3 -m http.server`)を介してアクセスすると、すべてのスクリプトが実行されることに気付くでしょう(CSPがそれを防いでいないため)。**親は任意のiframe内の`secret`変数にアクセスできません**が、**if2とif3(同一サイトと見なされる)は元のウィンドウの秘密にアクセスできます**。\ -if4は`null`オリジンと見なされることに注意してください。 +前のHTMLにHTTPサーバー(例えば`python3 -m http.server`)を介してアクセスすると、すべてのスクリプトが実行されることに気付くでしょう(CSPがそれを防いでいないため)。**親は任意のiframe内の`secret`変数にアクセスできません**が、**同サイトと見なされるif2およびif3のみが元のウィンドウの秘密にアクセスできます**。\ +if4が`null`オリジンと見なされることに注意してください。 -### CSPを持つIframes +### CSPを持つiframe -> [!NOTE] -> 次のバイパスでは、iframeページへの応答にJS実行を防ぐCSPヘッダーが含まれていないことに注意してください。 +> [!TIP] +> 次のバイパスでは、iframeページへのレスポンスにJS実行を防ぐCSPヘッダーが含まれていないことに注意してください。 `script-src`の`self`値は、`data:`プロトコルや`srcdoc`属性を使用してJSコードの実行を許可しません。\ しかし、CSPの`none`値であっても、`src`属性にURL(完全なものまたはパスのみ)を指定したiframeの実行は許可されます。\ @@ -77,11 +77,11 @@ src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert ``` 注意してください、**前のCSPはインラインスクリプトの実行のみを許可します**。\ -しかし、**`if1`と`if2`スクリプトのみが実行されますが、`if1`のみが親の秘密にアクセスできるでしょう**。 +しかし、**`if1`と`if2`スクリプトのみが実行されますが、`if1`のみが親の秘密にアクセスできるようになります**。 ![](<../../images/image (372).png>) -したがって、**JSファイルをサーバーにアップロードし、`script-src 'none'`であってもiframeを介して読み込むことができればCSPをバイパスすることが可能です**。これは**同じサイトのJSONPエンドポイントを悪用することで潜在的に行うこともできます**。 +したがって、**サーバーにJSファイルをアップロードし、`script-src 'none'`であってもiframeを介して読み込むことができればCSPをバイパスすることが可能です**。これは**同じサイトのJSONPエンドポイントを悪用することでも潜在的に行うことができます**。 次のシナリオでテストできます。ここでは、`script-src 'none'`であってもクッキーが盗まれます。アプリケーションを実行し、ブラウザでアクセスしてください: ```python @@ -103,7 +103,7 @@ return "" if __name__ == "__main__": app.run() ``` -### その他のペイロードが発見された +### その他のペイロードが発見された野生の中で ```html ``` +### Credentialless iframes + +[この記事](https://blog.slonser.info/posts/make-self-xss-great-again/)で説明されているように、iframeの`credentialless`フラグは、リクエストに資格情報を送信せずにiframe内にページを読み込むために使用され、iframe内で読み込まれたページの同一オリジンポリシー(SOP)を維持します。 + +これにより、iframeは親ページに読み込まれた同じSOP内の別のiframeから機密情報にアクセスできます: +```javascript +window.top[1].document.body.innerHTML = 'Hi from credentialless'; +alert(window.top[1].document.cookie); +``` +- 攻撃の例: Self-XSS + CSRF + +この攻撃では、攻撃者は2つのiframeを持つ悪意のあるウェブページを準備します: + +- `credentialless`フラグを持つ被害者のページを読み込むiframeと、XSSをトリガーするCSRF (ユーザーのユーザー名にSelf-XSSを想像してください): +```html + + +
+ + + +
+ + + +``` + +- 実際にユーザーがログインしている別のiframe ( `credentialless`フラグなし)。 + +その後、XSSからは同じSOPを持つ他のiframeにアクセスでき、例えばクッキーを盗むことができます: +```javascript +alert(window.top[1].document.cookie); +``` +### fetchLater 攻撃 + +[この記事](https://blog.slonser.info/posts/make-self-xss-great-again/)に示されているように、API `fetchLater` はリクエストを後で実行するように設定することを可能にします(一定の時間後)。したがって、これは例えば、攻撃者のセッション内で被害者をログインさせ(Self-XSSを使用)、`fetchLater` リクエストを設定し(例えば、現在のユーザーのパスワードを変更するため)、攻撃者のセッションからログアウトするために悪用される可能性があります。その後、被害者は自分のセッションにログインし、`fetchLater` リクエストが実行され、被害者のパスワードが攻撃者によって設定されたものに変更されます。 + +このように、被害者のURLがiframe内で読み込めない場合(CSPやその他の制限のため)、攻撃者は依然として被害者のセッション内でリクエストを実行することができます。 +```javascript +var req = new Request("/change_rights",{method:"POST",body:JSON.stringify({username:"victim", rights: "admin"}),credentials:"include"}) +const minute = 60000 +let arr = [minute, minute * 60, minute * 60 * 24, ...] +for (let timeout of arr) +fetchLater(req,{activateAfter: timeout}) +``` ## SOPにおけるIframes -以下のページを確認してください: +次のページを確認してください: {{#ref}} ../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md