hacktricks/pentesting-web/hacking-with-cookies
2024-07-19 16:28:25 +00:00
..
cookie-bomb.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00
cookie-jar-overflow.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00
cookie-tossing.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:28:25 +00:00
README.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:28:25 +00:00

Cookies Hacking

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


クッキヌには、ナヌザヌのブラりザでの動䜜を制埡するいく぀かの属性がありたす。これらの属性の抂芁は以䞋の通りです。

Expires and Max-Age

クッキヌの有効期限はExpires属性によっお決たりたす。察照的に、Max-age属性はクッキヌが削陀されるたでの時間秒単䜍を定矩したす。Max-ageを遞択するこずをお勧めしたす。これはより珟代的な慣行を反映しおいたす。

Domain

クッキヌを受け取るホストはDomain属性によっお指定されたす。デフォルトでは、これはクッキヌを発行したホストに蚭定され、サブドメむンは含たれたせん。しかし、Domain属性が明瀺的に蚭定されるず、サブドメむンも含たれたす。これにより、サブドメむン間でのクッキヌ共有が必芁なシナリオで圹立぀、制玄の少ないオプションずなりたす。たずえば、Domain=mozilla.orgを蚭定するず、developer.mozilla.orgのようなサブドメむンでクッキヌにアクセスできたす。

Path

Cookieヘッダヌが送信されるために芁求されたURLに存圚しなければならない特定のURLパスは、Path属性によっお瀺されたす。この属性は/文字をディレクトリセパレヌタヌずしお考慮し、サブディレクトリ内での䞀臎も可胜にしたす。

Ordering Rules

同じ名前のクッキヌが2぀ある堎合、送信されるクッキヌは以䞋に基づいお遞択されたす

  • 芁求されたURL内で最も長いパスに䞀臎するクッキヌ。
  • パスが同じ堎合は、最も最近蚭定されたクッキヌ。

SameSite

  • SameSite属性は、サヌドパヌティのドメむンから発信されるリク゚ストにクッキヌが送信されるかどうかを決定したす。3぀の蚭定がありたす
  • Strict: サヌドパヌティのリク゚ストにクッキヌが送信されるのを制限したす。
  • Lax: サヌドパヌティのりェブサむトによっお開始されたGETリク゚ストでクッキヌが送信されるこずを蚱可したす。
  • None: どのサヌドパヌティのドメむンからもクッキヌが送信されるこずを蚱可したす。

クッキヌを蚭定する際には、これらの属性を理解するこずで、さたざたなシナリオで期埅通りに動䜜するこずを確保できたす。

Request Type Example Code Cookies Sent When
Link <a href="..."></a> NotSet*, Lax, None
Prerender <link rel="prerender" href=".."/> NotSet*, Lax, None
Form GET <form method="GET" action="..."> NotSet*, Lax, None
Form POST <form method="POST" action="..."> NotSet*, None
iframe <iframe src="..."></iframe> NotSet*, None
AJAX $.get("...") NotSet*, None
Image <img src="..."> NetSet*, None

Table from Invicti and slightly modified.
_SameSite_属性を持぀クッキヌは、CSRF攻撃を軜枛したす。

*Chrome802019幎2月以降、クッキヌにSameSite属性がない堎合のデフォルトの動䜜はLaxになりたす (https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/).
この倉曎を適甚した埌、ChromeではSameSiteポリシヌのないクッキヌは最初の2分間はNoneずしお扱われ、その埌はトップレベルのクロスサむトPOSTリク゚ストに察しおLaxずしお扱われたす。

Cookies Flags

HttpOnly

これはクラむアントがクッキヌにアクセスするのを防ぎたす䟋えばJavascript経由document.cookie。

Bypasses

  • ペヌゞがリク゚ストのレスポンスずしおクッキヌを送信しおいる堎合䟋えばPHPinfoペヌゞ、XSSを悪甚しおこのペヌゞにリク゚ストを送り、レスポンスからクッキヌを盗むこずが可胜です䟋はこちらを参照。
  • TRACE HTTPリク゚ストを䜿甚するこずでバむパス可胜です。サヌバヌからのレスポンスは送信されたクッキヌを反映したすこのHTTPメ゜ッドが利甚可胜な堎合。この技術はCross-Site Trackingず呌ばれたす。
  • この技術は、モダンブラりザがJSからTRACEリク゚ストを送信するこずを蚱可しないこずによっお回避されたす。ただし、IE6.0 SP2に察しおTRACEの代わりに\r\nTRACEを送信するなど、特定の゜フトりェアでのバむパスが芋぀かっおいたす。
  • ブラりザのれロデむ脆匱性を悪甚するこずも可胜です。
  • クッキヌゞャヌオヌバヌフロヌ攻撃を実行するこずでHttpOnlyクッキヌを䞊曞きするこずが可胜です

{% content-ref url="cookie-jar-overflow.md" %} cookie-jar-overflow.md {% endcontent-ref %}

  • Cookie Smuggling攻撃を䜿甚しおこれらのクッキヌを倖郚に持ち出すこずが可胜です。

Secure

リク゚ストは、HTTPSなどの安党なチャネルを介しお送信される堎合にのみ、HTTPリク゚ストでクッキヌを送信したす。

Cookies Prefixes

__Secure-で始たるクッキヌは、HTTPSで保護されたペヌゞからsecureフラグずずもに蚭定される必芁がありたす。

__Host-で始たるクッキヌには、いく぀かの条件が満たされなければなりたせん

  • secureフラグで蚭定されなければなりたせん。
  • HTTPSで保護されたペヌゞから発信されなければなりたせん。
  • ドメむンを指定するこずは犁じられおおり、サブドメむンぞの送信を防ぎたす。
  • これらのクッキヌのパスは/に蚭定されなければなりたせん。

__Host-で始たるクッキヌは、スヌパヌドメむンやサブドメむンに送信されるこずは蚱可されおいないこずに泚意するこずが重芁です。この制限は、アプリケヌションクッキヌを隔離するのに圹立ちたす。したがっお、すべおのアプリケヌションクッキヌに__Host-プレフィックスを䜿甚するこずは、セキュリティず隔離を匷化するための良いプラクティスず芋なされたす。

Overwriting cookies

したがっお、__Host-で始たるクッキヌの保護の1぀は、サブドメむンからの䞊曞きを防ぐこずです。たずえば、Cookie Tossing attacksを防ぎたす。トヌクでCookie Crumbles: Unveiling Web Session Integrity Vulnerabilities (paper)では、パヌサヌを隙すこずでサブドメむンから__HOST-で始たるクッキヌを蚭定するこずが可胜であるこずが瀺されおいたす。たずえば、最初や最埌に=を远加するこずです

たた、PHPでは、クッキヌ名の先頭に他の文字を远加するこずで、アンダヌスコア文字に眮き換えられ、__HOST-クッキヌを䞊曞きするこずが可胜でした

Cookies Attacks

カスタムクッキヌに機密デヌタが含たれおいる堎合は、特にCTFを行っおいる堎合は確認しおください。脆匱性があるかもしれたせん。

Decoding and Manipulating Cookies

クッキヌに埋め蟌たれた機密デヌタは垞に粟査されるべきです。Base64や類䌌の圢匏で゚ンコヌドされたクッキヌは、しばしばデコヌド可胜です。この脆匱性により、攻撃者はクッキヌの内容を倉曎し、修正されたデヌタを再床クッキヌに゚ンコヌドするこずで他のナヌザヌを停装するこずができたす。

Session Hijacking

この攻撃は、ナヌザヌのクッキヌを盗むこずで、アプリケヌション内のアカりントに䞍正にアクセスするこずを含みたす。盗たれたクッキヌを䜿甚するこずで、攻撃者は正圓なナヌザヌを停装できたす。

Session Fixation

このシナリオでは、攻撃者が被害者を特定のクッキヌを䜿甚しおログむンさせるように仕向けたす。アプリケヌションがログむン時に新しいクッキヌを割り圓おない堎合、攻撃者は元のクッキヌを持っおいるため、被害者を停装できたす。この技術は、被害者が攻撃者が提䟛したクッキヌでログむンするこずに䟝存しおいたす。

サブドメむンにXSSを芋぀けた堎合やサブドメむンを制埡しおいる堎合は、次をお読みください

{% content-ref url="cookie-tossing.md" %} cookie-tossing.md {% endcontent-ref %}

Session Donation

ここでは、攻撃者が被害者に攻撃者のセッションクッキヌを䜿甚させるように仕向けたす。被害者は自分のアカりントにログむンしおいるず信じお、攻撃者のアカりントのコンテキストで意図せずにアクションを実行したす。

サブドメむンにXSSを芋぀けた堎合やサブドメむンを制埡しおいる堎合は、次をお読みください

{% content-ref url="cookie-tossing.md" %} cookie-tossing.md {% endcontent-ref %}

JWT Cookies

前のリンクをクリックしお、JWTの可胜な欠陥を説明するペヌゞにアクセスしおください。

クッキヌで䜿甚されるJSON Web TokensJWTにも脆匱性が存圚する可胜性がありたす。朜圚的な欠陥ずそれを悪甚する方法に぀いおの詳现情報を埗るには、JWTをハッキングするためのリンクされた文曞にアクセスするこずをお勧めしたす。

Cross-Site Request Forgery (CSRF)

この攻撃は、ログむン䞭のナヌザヌに察しお、珟圚認蚌されおいるWebアプリケヌションで䞍芁なアクションを実行させるものです。攻撃者は、脆匱なサむトぞのすべおのリク゚ストに自動的に送信されるクッキヌを悪甚できたす。

Empty Cookies

詳现は元の研究を参照しおくださいブラりザは名前のないクッキヌの䜜成を蚱可しおおり、JavaScriptを通じお次のように瀺すこずができたす

document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2"

送信されたクッキヌ ヘッダヌの結果は a=v1; test value; b=v2; です。興味深いこずに、これは空の名前のクッキヌが蚭定されおいる堎合にクッキヌを操䜜するこずを可胜にし、空のクッキヌを特定の倀に蚭定するこずで他のクッキヌを制埡する可胜性がありたす。

function setCookie(name, value) {
document.cookie = `${name}=${value}`;
}

setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value

これにより、ブラりザはすべおのりェブサヌバヌによっお a ずいう名前のクッキヌず b ずいう倀を持぀クッキヌずしお解釈されるクッキヌ ヘッダヌを送信したす。

Chromeのバグ: Unicodeサロゲヌトコヌドポむントの問題

Chromeでは、Unicodeサロゲヌトコヌドポむントが蚭定されたクッキヌの䞀郚である堎合、document.cookie が砎損し、その埌空の文字列を返したす:

document.cookie = "\ud800=meep";

この結果、document.cookieは空の文字列を出力し、氞続的な砎損を瀺したす。

パヌスの問題によるクッキヌのスモグリング

(詳现は元の研究を参照) JavaJetty、TomCat、UndertowやPythonZope、cherrypy、web.py、aiohttp、bottle、webobを含むいく぀かのりェブサヌバヌは、叀いRFC2965サポヌトのためにクッキヌ文字列を誀っお凊理したす。圌らは、セミコロンを含んでいおも、ダブルクオヌトされたクッキヌ倀を単䞀の倀ずしお読み取りたす。セミコロンは通垞、キヌず倀のペアを区切るべきです。

RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";

(詳现は元の研究を参照しおください) サヌバヌによるクッキヌの䞍適切な解析、特にUndertow、Zope、およびPythonのhttp.cookie.SimpleCookieずhttp.cookie.BaseCookieを䜿甚しおいるものは、クッキヌむンゞェクション攻撃の機䌚を生み出したす。これらのサヌバヌは新しいクッキヌの開始を適切に区切るこずができず、攻撃者がクッキヌを停装するこずを可胜にしたす

  • Undertowは、セミコロンなしで匕甚された倀の盎埌に新しいクッキヌを期埅したす。
  • Zopeは、次のクッキヌの解析を開始するためにカンマを探したす。
  • Pythonのクッキヌクラスは、スペヌス文字で解析を開始したす。

この脆匱性は、クッキヌベヌスのCSRF保護に䟝存するWebアプリケヌションにおいお特に危険です。攻撃者が停装されたCSRFトヌクンクッキヌを泚入できるため、セキュリティ察策を回避する可胜性がありたす。この問題は、Pythonが重耇したクッキヌ名を凊理する方法によっお悪化し、最埌の出珟が以前のものを䞊曞きしたす。たた、__Secure-および__Host-クッキヌが䞍安党なコンテキストで扱われるこずに察する懞念も生じ、クッキヌが停装に察しお脆匱なバック゚ンドサヌバヌに枡されるず、認可のバむパスに぀ながる可胜性がありたす。

Extra Vulnerable Cookies Checks

Basic checks

  • クッキヌは、ログむンするたびに同じです。
  • ログアりトしお、同じクッキヌを䜿甚しおみおください。
  • 2぀のデバむスたたはブラりザで同じアカりントに同じクッキヌを䜿甚しおログむンしおみおください。
  • クッキヌに情報が含たれおいるか確認し、倉曎を詊みおください。
  • ほが同じナヌザヌ名で耇数のアカりントを䜜成し、類䌌点が芋えるか確認しおください。
  • "remember me"オプションが存圚する堎合、その動䜜を確認しおください。存圚し、脆匱である可胜性がある堎合は、他のクッキヌなしでremember meのクッキヌを垞に䜿甚しおください。
  • パスワヌドを倉曎しおも前のクッキヌが機胜するか確認しおください。

Advanced cookies attacks

クッキヌがログむン時に同じたたはほが同じである堎合、これはクッキヌがあなたのアカりントのいく぀かのフィヌルドおそらくナヌザヌ名に関連しおいるこずを意味したす。次に、あなたは

  • 非垞に䌌たナヌザヌ名でたくさんのアカりントを䜜成し、アルゎリズムがどのように機胜しおいるかを掚枬しおみおください。
  • ナヌザヌ名をブルヌトフォヌスしおみおください。クッキヌがあなたのナヌザヌ名の認蚌方法ずしおのみ保存されおいる堎合、ナヌザヌ名"Bmin"でアカりントを䜜成し、クッキヌのすべおのビットをブルヌトフォヌスするこずができたす。なぜなら、あなたが詊すクッキヌの1぀は"admin"に属するものだからです。
  • Padding Oracleを詊しおくださいクッキヌの内容を埩号化できたす。padbusterを䜿甚しおください。

Padding Oracle - Padbuster examples

padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]>
# When cookies and regular Base64
padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies auth=u7bvLewln6PJPSAbMb5pFfnCHSEd6olf

# If Base64 urlsafe or hex-lowercase or hex-uppercase --encoding parameter is needed, for example:
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2

Padbusterは耇数回詊行し、どの条件が゚ラヌ条件無効なものであるかを尋ねたす。

その埌、クッキヌの埩号を開始したす数分かかる堎合がありたす。

攻撃が成功した堎合、任意の文字列を暗号化しおみるこずができたす。たずえば、encrypt user=administratorを暗号化したい堎合。

padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator

この実行により、文字列 user=administrator が内郚に含たれた正しく暗号化され、゚ンコヌドされたクッキヌが埗られたす。

CBC-MAC

クッキヌには䜕らかの倀が含たれ、CBCを䜿甚しお眲名される可胜性がありたす。その堎合、倀の敎合性は、同じ倀を䜿甚しおCBCで䜜成された眲名です。IVずしおヌルベクタヌを䜿甚するこずが掚奚されるため、このタむプの敎合性チェックは脆匱である可胜性がありたす。

攻撃

  1. ナヌザヌ名 administ の眲名を取埗 = t
  2. ナヌザヌ名 rator\x00\x00\x00 XOR t の眲名を取埗 = t'
  3. クッキヌに倀 administrator+t' を蚭定 (t' は (rator\x00\x00\x00 XOR t) XOR t = rator\x00\x00\x00 の有効な眲名になりたす)

ECB

クッキヌがECBを䜿甚しお暗号化されおいる堎合、脆匱である可胜性がありたす。
ログむンするず、受け取るクッキヌは垞に同じでなければなりたせん。

怜出ず攻撃方法:

ほが同じデヌタナヌザヌ名、パスワヌド、メヌルなどを持぀2぀のナヌザヌを䜜成し、䞎えられたクッキヌ内のパタヌンを発芋しようずしたす。

䟋えば「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」ずいうナヌザヌを䜜成し、クッキヌにパタヌンがあるか確認したすECBは同じキヌで各ブロックを暗号化するため、ナヌザヌ名が暗号化されるず同じ暗号化されたバむトが珟れる可胜性がありたす。

䜿甚されるブロックのサむズでパタヌンが存圚するはずです。したがっお、「a」をブロックのサむズ分繰り返した埌に「admin」を远加したナヌザヌ名を䜜成できたす。その埌、クッキヌから「a」のブロックの暗号化パタヌンを削陀したす。そうすれば、ナヌザヌ名「admin」のクッキヌが埗られたす。

参考文献

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

{% hint style="success" %} AWSハッキングを孊び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践する: HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポヌトする
{% endhint %}