7.1 KiB
Cookie Tossing
{% 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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Description
공격자가 서브도메인이나 회사의 도메인을 제어하거나 서브도메인에서 XSS를 발견할 수 있다면 이 공격을 수행할 수 있습니다.
쿠키 해킹 섹션에서 언급했듯이, 쿠키가 도메인에 설정되면(지정된 경우) 도메인과 서브도메인에서 사용됩니다.
{% hint style="danger" %}
따라서, 공격자는 특정 쿠키를 도메인과 서브도메인에 설정할 수 있습니다. 예를 들어 document.cookie="session=1234; Path=/app/login; domain=.example.com"
{% endhint %}
이것은 위험할 수 있습니다. 공격자는 다음과 같은 작업을 수행할 수 있습니다:
- 피해자의 쿠키를 공격자의 계정에 고정시켜서 사용자가 이를 인지하지 못하면, 공격자의 계정에서 행동을 수행하게 됩니다. 공격자는 흥미로운 정보를 얻을 수 있습니다(플랫폼에서 사용자의 검색 기록 확인, 피해자가 계정에 신용카드를 설정할 수 있음...)
- 쿠키가 로그인 후 변경되지 않는 경우, 공격자는 **쿠키를 고정(session-fixation)**하고 피해자가 로그인할 때까지 기다린 후 그 쿠키를 사용하여 피해자로 로그인할 수 있습니다.
- 때때로, 세션 쿠키가 변경되더라도 공격자는 이전 쿠키를 사용하고 새로운 쿠키도 받을 수 있습니다.
- 쿠키가 초기 값을 설정하는 경우(예: 플라스크에서 쿠키가 세션의 CSRF 토큰을 설정하고 이 값이 피해자가 로그인한 후에도 유지되는 경우), 공격자는 이 알려진 값을 설정한 후 이를 악용할 수 있습니다(이 시나리오에서 공격자는 CSRF 토큰을 알고 있으므로 사용자가 CSRF 요청을 수행하게 만들 수 있습니다).
- 값을 설정하는 것처럼, 공격자는 서버에서 생성된 인증되지 않은 쿠키를 얻고, 그로부터 CSRF 토큰을 얻어 사용할 수도 있습니다.
Cookie Order
브라우저가 같은 이름의 두 쿠키를 수신하고 동일한 범위(도메인, 서브도메인 및 경로)에 부분적으로 영향을 미치는 경우, 브라우저는 요청에 대해 두 쿠키의 값을 모두 보냅니다.
가장 구체적인 경로를 가진 쿠키가 먼저 설정되고, 그 다음 다른 쿠키의 값이 설정됩니다. 예: Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;
대부분의 웹사이트는 첫 번째 값만 사용합니다. 따라서 공격자가 쿠키를 설정하려면 다른 쿠키가 설정되기 전에 설정하거나 더 구체적인 경로로 설정하는 것이 좋습니다.
{% hint style="warning" %} 또한, 더 구체적인 경로에 쿠키를 설정할 수 있는 능력은 매우 흥미롭습니다. 피해자가 자신의 쿠키로 작업하게 할 수 있지만 악성 쿠키가 설정된 특정 경로에서는 이전에 설정된 쿠키가 전송됩니다. {% endhint %}
Protection Bypass
이 공격에 대한 가능한 보호 방법은 웹 서버가 같은 이름의 두 쿠키를 두 개의 다른 값으로 수락하지 않는 것입니다.
공격자가 피해자에게 이미 쿠키가 제공된 후 쿠키를 설정하는 시나리오를 우회하기 위해, 공격자는 쿠키 오버플로우를 유발할 수 있으며, 그런 다음 정상 쿠키가 삭제되면 악성 쿠키를 설정할 수 있습니다.
{% content-ref url="cookie-jar-overflow.md" %} cookie-jar-overflow.md {% endcontent-ref %}
또 다른 유용한 우회 방법은 쿠키 이름을 URL 인코딩하는 것입니다. 일부 보호는 요청에서 같은 이름의 두 쿠키를 확인하고 서버는 쿠키 이름을 디코딩합니다.
Cookie Bomb
Cookie Tossing 공격은 Cookie Bomb 공격을 수행하는 데에도 사용될 수 있습니다:
{% content-ref url="cookie-bomb.md" %} cookie-bomb.md {% endcontent-ref %}
Defenses
쿠키 이름에 접두사 __Host
사용
- 쿠키 이름에 이 접두사가 있는 경우, Secure로 표시되고, 안전한 출처에서 전송되며, Domain 속성이 포함되지 않고, Path 속성이 /로 설정된 경우에만 Set-Cookie 지시문에서 수락됩니다.
- 이것은 서브도메인이 쿠키를 최상위 도메인으로 강제 설정하는 것을 방지합니다. 이러한 쿠키는 "도메인 잠금"으로 간주될 수 있습니다.
References
- @blueminimal
- https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers
- https://github.blog/2013-04-09-yummy-cookies-across-domains/
- Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities
{% 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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.