hacktricks/pentesting-web/hacking-with-cookies/cookie-tossing.md

95 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cookie Tossing
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
### 説明
攻撃者が**サブドメインまたは企業のドメインを制御できる場合、またはサブドメインにXSSを見つけた場合**、この攻撃を実行できるようになります。
クッキーのハッキングセクションで示されたように、**クッキーがドメインに設定されると(指定されている場合)、そのドメインとサブドメインで使用されます。**
{% hint style="danger" %}
したがって、**攻撃者は特定のクッキーをドメインとサブドメインに設定できるようになり、次のようなことを行います** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
{% endhint %}
これは危険です。攻撃者は次のことができるかもしれません:
* **被害者のクッキーを攻撃者のアカウントに固定する**ので、ユーザーが気づかない場合、**攻撃者のアカウントでアクションを実行します**。攻撃者は興味深い情報を取得できるかもしれません(プラットフォームでのユーザーの検索履歴を確認する、被害者がアカウントにクレジットカードを設定する...)。
* **クッキーがログイン後に変更されない場合**、攻撃者は単に**クッキーを固定(セッション固定)**し、被害者がログインするのを待ってから**そのクッキーを使用して被害者としてログインします**。
* 時には、セッションクッキーが変更されても、攻撃者は以前のものを使用し、新しいものも受け取ります。
* **クッキーが初期値を設定している場合**(フラスクのように、**クッキー**が**セッションのCSRFトークン**を**設定**し、この値が被害者がログインした後も維持される場合)、**攻撃者はこの既知の値を設定し、それを悪用することができます**そのシナリオでは、攻撃者はユーザーにCSRFリクエストを実行させることができます。なぜなら、CSRFトークンを知っているからです
* 値を設定するのと同様に、攻撃者はサーバーによって生成された認証されていないクッキーを取得し、そこからCSRFトークンを取得して使用することもできます。
### クッキーの順序
ブラウザが同じ名前の2つのクッキーを受け取ると、**同じスコープ(ドメイン、サブドメイン、パス)に部分的に影響を与える**場合、**ブラウザはリクエストに対して両方のクッキーの値を送信します**。
誰が**最も特定のパス**を持っているか、またはどちらが**古いもの**であるかに応じて、ブラウザは**最初にクッキーの値を設定し**、次に他の値を設定します。例:`Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
ほとんどの**ウェブサイトは最初の値のみを使用します**。したがって、攻撃者がクッキーを設定したい場合は、他のクッキーが設定される前に設定するか、より特定のパスで設定する方が良いです。
{% hint style="warning" %}
さらに、**より特定のパスにクッキーを設定する能力**は非常に興味深いです。なぜなら、**被害者がそのクッキーで作業することができるのは、悪意のあるクッキーが設定された特定のパスを除いて、前に送信されるからです**。
{% endhint %}
### 保護バイパス
この攻撃に対する可能な保護は、**ウェブサーバーが同じ名前の2つのクッキーを異なる値で受け入れないこと**です。
攻撃者が被害者にクッキーがすでに与えられた後にクッキーを設定するシナリオを回避するために、攻撃者は**クッキーオーバーフロー**を引き起こし、その後、**正当なクッキーが削除されたら、悪意のあるクッキーを設定する**ことができます。
{% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md)
{% endcontent-ref %}
別の有用な**バイパス**は、**クッキーの名前をURLエンコードすること**です。なぜなら、一部の保護はリクエスト内の同じ名前の2つのクッキーをチェックし、その後サーバーがクッキーの名前をデコードするからです。
### クッキーボム
クッキー投げ攻撃は、**クッキーボム**攻撃を実行するためにも使用される可能性があります:
{% content-ref url="cookie-bomb.md" %}
[cookie-bomb.md](cookie-bomb.md)
{% endcontent-ref %}
### 防御
#### **クッキー名にプレフィックス`__Host`を使用する**
* クッキー名にこのプレフィックスがある場合、**Secureとしてマークされ、セキュアなオリジンから送信され、Domain属性を含まず、Path属性が/に設定されている場合にのみ**Set-Cookieディレクティブで受け入れられます。
* **これにより、サブドメインがクッキーを頂点ドメインに強制することを防ぎます。これらのクッキーは「ドメインロック」と見なされる可能性があります。**
### 参考文献
* [**@blueminimal**](https://twitter.com/blueminimal)
* [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers)
* [**https://github.blog/2013-04-09-yummy-cookies-across-domains/**](https://github.blog/2013-04-09-yummy-cookies-across-domains/)
* [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}