mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/hacking-with-cookies/README.md'] to ja
This commit is contained in:
parent
31dac22fb3
commit
2628d4445d
@ -45,24 +45,24 @@ Cookieを設定する際には、これらの属性を理解することで、
|
||||
| Image | \<img src="..."> | NetSet\*, None |
|
||||
|
||||
Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) and slightly modified.\
|
||||
_**SameSite**_属性を持つCookieは、**CSRF攻撃を軽減**します。ログインセッションが必要です。
|
||||
_**SameSite**_属性を持つCookieは、**CSRF攻撃を軽減**します。
|
||||
|
||||
**\*Chrome80(2019年2月)以降、CookieにSameSite属性がない場合のデフォルトの動作はLaxになります** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
この変更を適用した後、Chromeでは**SameSiteポリシーのないCookieは最初の2分間はNoneとして扱われ、その後はトップレベルのクロスサイトPOSTリクエストに対してLaxとして扱われます。**
|
||||
この変更を適用した後、Chromeでは**SameSiteポリシーのないCookie**は**最初の2分間はNoneとして扱われ、その後はトップレベルのクロスサイトPOSTリクエストに対してLaxとして扱われます。**
|
||||
|
||||
## Cookies Flags
|
||||
|
||||
### HttpOnly
|
||||
|
||||
これにより、**クライアント**がCookieにアクセスするのを防ぎます(例えば、**Javascript**経由で:`document.cookie`)。
|
||||
これは**クライアント**がCookieにアクセスするのを防ぎます(例えば、**Javascript**経由で:`document.cookie`)。
|
||||
|
||||
#### **Bypasses**
|
||||
|
||||
- ページがリクエストの応答としてCookieを**送信している**場合(例えば、**PHPinfo**ページで)、XSSを悪用してこのページにリクエストを送り、応答から**Cookieを盗む**ことが可能です(例は[こちら](https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/)を参照)。
|
||||
- **TRACE** **HTTP**リクエストを使用することでバイパス可能です。このHTTPメソッドが利用可能な場合、サーバーからの応答は送信されたCookieを反映します。この技術は**Cross-Site Tracking**と呼ばれます。
|
||||
- ページがリクエストのレスポンスとしてCookieを**送信している**場合(例えば、**PHPinfo**ページで)、XSSを悪用してこのページにリクエストを送り、レスポンスから**Cookieを盗む**ことが可能です(例は[こちら](https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/)を参照)。
|
||||
- **TRACE** **HTTP**リクエストを使用することでバイパス可能です。このHTTPメソッドが利用可能な場合、サーバーからのレスポンスは送信されたCookieを反映します。この技術は**Cross-Site Tracking**と呼ばれます。
|
||||
- この技術は、**モダンブラウザがJSからTRACEリクエストを送信することを許可しないことによって回避されます**。ただし、IE6.0 SP2に対して`TRACE`の代わりに`\r\nTRACE`を送信するなど、特定のソフトウェアでのバイパスが見つかっています。
|
||||
- もう一つの方法は、ブラウザのゼロデイ脆弱性を悪用することです。
|
||||
- Cookie Jarオーバーフロー攻撃を実行することで、**HttpOnly Cookieを上書きする**ことが可能です:
|
||||
- 別の方法は、ブラウザのゼロデイ脆弱性を悪用することです。
|
||||
- Cookie Jarオーバーフロー攻撃を実行することで**HttpOnly Cookieを上書き**することが可能です:
|
||||
|
||||
{{#ref}}
|
||||
cookie-jar-overflow.md
|
||||
@ -89,11 +89,11 @@ cookie-jar-overflow.md
|
||||
|
||||
### Overwriting cookies
|
||||
|
||||
したがって、`__Host-`で始まるCookieの保護の一つは、サブドメインから上書きされるのを防ぐことです。たとえば、[**Cookie Tossing attacks**](cookie-tossing.md)を防ぎます。トークで[**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf))では、パーサーを騙すことでサブドメインから__HOST-で始まるCookieを設定することが可能であることが示されています。たとえば、最初や最後に`=`を追加することです:
|
||||
したがって、`__Host-`で始まるCookieの保護の1つは、サブドメインから上書きされるのを防ぐことです。たとえば、[**Cookie Tossing attacks**](cookie-tossing.md)を防ぎます。トークで[**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf))では、パーサーを騙すことでサブドメインから\_\_HOST-で始まるCookieを設定することが可能であることが示されています。たとえば、最初や最後に`=`を追加することによって...:
|
||||
|
||||
<figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
また、PHPでは、Cookie名の先頭に**他の文字を追加する**ことが可能で、これらは**アンダースコア**文字に置き換えられ、`__HOST-` Cookieを上書きすることができます:
|
||||
また、PHPでは、Cookie名の先頭に**他の文字を追加**することで、**アンダースコア**文字に置き換えられ、`__HOST-` Cookieを上書きすることが可能でした:
|
||||
|
||||
<figure><img src="../../images/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
|
||||
@ -113,7 +113,7 @@ Cookieに埋め込まれた機密データは常に精査されるべきです
|
||||
|
||||
このシナリオでは、攻撃者が被害者を特定のCookieを使用してログインさせるように仕向けます。アプリケーションがログイン時に新しいCookieを割り当てない場合、攻撃者は元のCookieを持っているため、被害者を偽装できます。この技術は、被害者が攻撃者が提供したCookieでログインすることに依存しています。
|
||||
|
||||
**サブドメインにXSSを見つけた場合**や**サブドメインを制御している場合**は、次を読んでください:
|
||||
**サブドメインでXSSを見つけた場合**や**サブドメインを制御している場合**は、次を読んでください:
|
||||
|
||||
{{#ref}}
|
||||
cookie-tossing.md
|
||||
@ -123,7 +123,7 @@ cookie-tossing.md
|
||||
|
||||
ここでは、攻撃者が被害者に攻撃者のセッションCookieを使用させるように仕向けます。被害者は自分のアカウントにログインしていると信じて、攻撃者のアカウントのコンテキストで意図せずにアクションを実行します。
|
||||
|
||||
**サブドメインにXSSを見つけた場合**や**サブドメインを制御している場合**は、次を読んでください:
|
||||
**サブドメインでXSSを見つけた場合**や**サブドメインを制御している場合**は、次を読んでください:
|
||||
|
||||
{{#ref}}
|
||||
cookie-tossing.md
|
||||
@ -133,7 +133,7 @@ cookie-tossing.md
|
||||
|
||||
前のリンクをクリックして、JWTの可能な欠陥を説明するページにアクセスしてください。
|
||||
|
||||
Cookieで使用されるJSON Web Tokens (JWT)も脆弱性を示す可能性があります。潜在的な欠陥とそれを悪用する方法についての詳細情報を得るには、JWTをハッキングするためのリンクされた文書にアクセスすることをお勧めします。
|
||||
Cookieで使用されるJSON Web Tokens (JWT)も脆弱性を示す可能性があります。潜在的な欠陥とそれを悪用する方法についての詳細情報を得るには、JWTのハッキングに関するリンクされた文書にアクセスすることをお勧めします。
|
||||
|
||||
### Cross-Site Request Forgery (CSRF)
|
||||
|
||||
@ -141,7 +141,7 @@ Cookieで使用されるJSON Web Tokens (JWT)も脆弱性を示す可能性が
|
||||
|
||||
### Empty Cookies
|
||||
|
||||
(詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照してください)ブラウザは名前のないCookieの作成を許可しており、これはJavaScriptを通じて次のように示すことができます:
|
||||
(詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照してください)ブラウザは名前のないCookieの作成を許可しており、次のようにJavaScriptで示すことができます:
|
||||
```js
|
||||
document.cookie = "a=v1"
|
||||
document.cookie = "=test value;" // Setting an empty named cookie
|
||||
@ -165,7 +165,7 @@ document.cookie = "\ud800=meep"
|
||||
```
|
||||
これにより、`document.cookie`が空の文字列を出力し、永続的な破損を示します。
|
||||
|
||||
#### パースの問題によるクッキーのスムギング
|
||||
#### パースの問題によるクッキーのスムグリング
|
||||
|
||||
(詳細は[元の研究](https://blog.ankursundara.com/cookie-bugs/)を参照) Java(Jetty、TomCat、Undertow)やPython(Zope、cherrypy、web.py、aiohttp、bottle、webob)を含むいくつかのウェブサーバーは、古いRFC2965サポートのためにクッキー文字列を誤って処理します。彼らは、セミコロンを含んでいても、ダブルクオートされたクッキー値を単一の値として読み取ります。これは通常、キーと値のペアを区切るべきです。
|
||||
```
|
||||
@ -179,21 +179,21 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||
- Zopeは、次のクッキーの解析を開始するためにカンマを探します。
|
||||
- Pythonのクッキークラスは、スペース文字で解析を開始します。
|
||||
|
||||
この脆弱性は、クッキーベースのCSRF保護に依存するWebアプリケーションにおいて特に危険であり、攻撃者が偽装されたCSRFトークンクッキーを注入し、セキュリティ対策を回避する可能性があります。この問題は、Pythonが重複したクッキー名を処理する方法によって悪化し、最後の出現が以前のものを上書きします。また、`__Secure-`および`__Host-`クッキーが安全でないコンテキストで扱われることに対する懸念を引き起こし、クッキーが偽装に対して脆弱なバックエンドサーバーに渡されると、認証バイパスを引き起こす可能性があります。
|
||||
この脆弱性は、クッキーベースのCSRF保護に依存するWebアプリケーションにとって特に危険であり、攻撃者が偽装されたCSRFトークンクッキーを注入し、セキュリティ対策を回避する可能性があります。この問題は、Pythonが重複したクッキー名を処理する方法によって悪化し、最後の出現が以前のものを上書きします。また、`__Secure-`および`__Host-`クッキーが不安全なコンテキストで扱われることに対する懸念を引き起こし、クッキーが偽装に対して脆弱なバックエンドサーバーに渡されると、認可のバイパスを引き起こす可能性があります。
|
||||
|
||||
### Cookies $version
|
||||
|
||||
#### WAF Bypass
|
||||
|
||||
According to [**this blogpost**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), **`$Version=1`**というクッキー属性を使用して、バックエンドが古いロジックを使用してクッキーを解析することが可能かもしれません。さらに、**`$Domain`**や**`$Path`**などの他の値を使用して、クッキーに対するバックエンドの動作を変更することができます。
|
||||
According to [**this blogpost**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), **`$Version=1`**というクッキー属性を使用して、バックエンドが古いロジックを使用してクッキーを解析する可能性があります。これは**RFC2109**によるものです。さらに、**`$Domain`**や**`$Path`**などの他の値を使用して、クッキーに対するバックエンドの動作を変更することができます。
|
||||
|
||||
#### Cookie Sandwich Attack
|
||||
|
||||
According to [**this blogpost**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique) クッキーサンドイッチ技術を使用してHttpOnlyクッキーを盗むことが可能です。これらは要件と手順です:
|
||||
|
||||
- 明らかに無駄な**クッキーがレスポンスに反映される場所を見つける**
|
||||
- **`$Version`**という名前のクッキーを値`1`で作成する(これはJSからのXSS攻撃で行うことができます)し、初期位置を取得するためにより具体的なパスを設定します(Pythonのような一部のフレームワークではこのステップは必要ありません)
|
||||
- **反映されるクッキーを作成**し、**開いた二重引用符**を残す値を設定し、前のクッキー(`$Version`)の後に位置するように特定のパスを設定します
|
||||
- **`$Version`**という名前のクッキーを値`1`で作成する(これはJSからのXSS攻撃で行うことができます)し、初期位置を取得するためにより具体的なパスを指定します(Pythonのような一部のフレームワークではこのステップは必要ありません)
|
||||
- **反映されるクッキーを作成**し、**開いた二重引用符**を残す値を持ち、前のクッキー(`$Version`)の後に位置するように特定のパスを指定します
|
||||
- その後、正当なクッキーが順番に続きます
|
||||
- **二重引用符を閉じるダミークッキーを作成**します
|
||||
|
||||
@ -211,7 +211,7 @@ document.cookie = `param2=end";`;
|
||||
|
||||
前のセクションを確認してください。
|
||||
|
||||
#### 引用文字列エンコーディングによる値解析のバイパス
|
||||
#### 引用文字列エンコーディングによる値分析のバイパス
|
||||
|
||||
この解析は、クッキー内のエスケープされた値をアンエスケープすることを示しています。したがって、"\a"は"a"になります。これはWAFをバイパスするのに役立つ場合があります:
|
||||
|
||||
@ -220,9 +220,9 @@ document.cookie = `param2=end";`;
|
||||
|
||||
#### クッキー名ブロックリストのバイパス
|
||||
|
||||
RFC2109では、**カンマをクッキー値の区切りとして使用できる**ことが示されています。また、**等号の前後にスペースやタブを追加することも可能です**。したがって、クッキー`$Version=1; foo=bar, abc = qux`は、クッキー`"foo":"bar, admin = qux"`を生成するのではなく、クッキー`foo":"bar"`と`"admin":"qux"`を生成します。2つのクッキーが生成され、adminの前後のスペースが削除されたことに注意してください。
|
||||
RFC2109では、**カンマをクッキー値の区切りとして使用できる**ことが示されています。また、**等号の前後にスペースやタブを追加することも可能です**。したがって、`$Version=1; foo=bar, abc = qux`のようなクッキーは、クッキー`"foo":"bar, admin = qux"`を生成するのではなく、クッキー`foo":"bar"`と`"admin":"qux"`を生成します。2つのクッキーが生成され、adminの前後のスペースが削除されたことに注意してください。
|
||||
|
||||
#### クッキー分割による値解析のバイパス
|
||||
#### クッキー分割による値分析のバイパス
|
||||
|
||||
最後に、異なるバックドアは、異なるクッキーヘッダーで渡された異なるクッキーを文字列として結合します。
|
||||
```
|
||||
@ -244,18 +244,18 @@ Resulting cookie: name=eval('test//, comment') => allowed
|
||||
|
||||
- **クッキー**は、**ログイン**するたびに**同じ**です。
|
||||
- ログアウトして、同じクッキーを使用してみてください。
|
||||
- 2つのデバイス(またはブラウザ)を使用して、同じアカウントに同じクッキーでログインしてみてください。
|
||||
- 2つのデバイス(またはブラウザ)で同じアカウントに同じクッキーを使用してログインしてみてください。
|
||||
- クッキーに情報が含まれているか確認し、変更を試みてください。
|
||||
- ほぼ同じユーザー名で複数のアカウントを作成し、類似点が見えるか確認してください。
|
||||
- "**ログイン状態を保持する**"オプションが存在する場合、それがどのように機能するか確認してください。存在し、脆弱である可能性がある場合は、他のクッキーを使用せずに**ログイン状態を保持する**のクッキーを常に使用してください。
|
||||
- ほぼ同じユーザー名でいくつかのアカウントを作成し、類似点が見えるか確認してください。
|
||||
- "**ログイン状態を保持**"オプションが存在する場合は、その動作を確認してください。存在し、脆弱である可能性がある場合は、他のクッキーを使用せずに**ログイン状態を保持**のクッキーを常に使用してください。
|
||||
- パスワードを変更しても前のクッキーが機能するか確認してください。
|
||||
|
||||
#### **高度なクッキー攻撃**
|
||||
|
||||
ログイン時にクッキーが同じ(またはほぼ同じ)である場合、これはおそらくクッキーがあなたのアカウントのいくつかのフィールド(おそらくユーザー名)に関連していることを意味します。次に、あなたは:
|
||||
ログイン時にクッキーが同じ(またはほぼ同じ)である場合、これはおそらくクッキーがアカウントのいくつかのフィールド(おそらくユーザー名)に関連していることを意味します。次に、以下を試みることができます:
|
||||
|
||||
- 非常に**似た**ユーザー名でたくさんの**アカウント**を作成し、アルゴリズムがどのように機能しているかを**推測**してみてください。
|
||||
- **ユーザー名をブルートフォース**してみてください。クッキーがあなたのユーザー名の認証方法としてのみ保存されている場合、ユーザー名"**Bmin**"でアカウントを作成し、クッキーのすべての**ビット**を**ブルートフォース**することができます。なぜなら、あなたが試すクッキーの1つは"**admin**"に属するものだからです。
|
||||
- **ユーザー名をブルートフォース**してみてください。クッキーがユーザー名の認証方法としてのみ保存されている場合、ユーザー名"**Bmin**"でアカウントを作成し、クッキーのすべての**ビット**を**ブルートフォース**することができます。なぜなら、試すクッキーの1つは"**admin**"に属するものだからです。
|
||||
- **パディング** **オラクル**を試してください(クッキーの内容を復号化できます)。**padbuster**を使用してください。
|
||||
|
||||
**パディングオラクル - Padbusterの例**
|
||||
@ -272,7 +272,7 @@ Padbusterは複数回試行し、どの条件がエラー条件(無効なも
|
||||
|
||||
その後、クッキーの復号を開始します(数分かかる場合があります)。
|
||||
|
||||
攻撃が成功した場合、任意の文字列を暗号化してみることができます。例えば、**encrypt** **user=administrator**を暗号化したい場合。
|
||||
攻撃が成功した場合、任意の文字列を暗号化してみることができます。たとえば、**encrypt** **user=administrator**を暗号化したい場合。
|
||||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
@ -280,7 +280,7 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
|
||||
|
||||
**CBC-MAC**
|
||||
|
||||
クッキーにはいくつかの値があり、CBCを使用して署名される可能性があります。その場合、値の整合性は、同じ値を使用してCBCで作成された署名です。IVとしてヌルベクターを使用することが推奨されているため、このタイプの整合性チェックは脆弱である可能性があります。
|
||||
クッキーにはいくつかの値があり、CBCを使用して署名される可能性があります。すると、値の整合性は、同じ値を使用してCBCで作成された署名になります。IVとしてヌルベクターを使用することが推奨されるため、このタイプの整合性チェックは脆弱である可能性があります。
|
||||
|
||||
**攻撃**
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user