hacktricks/pentesting-web/hacking-with-cookies/cookie-tossing.md
2023-08-03 19:12:22 +00:00

6.7 KiB
Raw Blame History

☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

描述

如果攻击者能够控制公司的子域或域名,或者在子域中找到 XSS 漏洞,他将能够执行此攻击。

正如在 Cookie Hacking 部分中所指出的,当将 cookie 设置为一个域(指定域)时,它将在该域和子域中使用

{% hint style="danger" %} 因此,攻击者将能够在域和子域中设置特定的 cookie类似于 document.cookie="session=1234; Path=/app/login; domain=.example.com" {% endhint %}

这可能是危险的,因为攻击者可能能够:

  • 将受害者的 cookie 固定到攻击者的帐户,因此如果用户没有注意到,他将在攻击者的帐户中执行操作,攻击者可能会获取一些有趣的信息(检查用户在平台上的搜索历史记录,受害者可能在帐户中设置他的信用卡...
  • 如果登录后 cookie 没有更改,攻击者可以只是固定一个 cookie,等待受害者登录,然后使用该 cookie 作为受害者登录
  • 如果cookie 设置了一些初始值(例如在 flask 中,cookie 可能会设置会话的 CSRF 令牌,并且该值在受害者登录后将保持不变),攻击者可以设置这个已知值,然后滥用它(在这种情况下,攻击者可以让用户执行 CSRF 请求,因为他知道 CSRF 令牌)。

当浏览器接收到两个具有相同名称的 cookie部分影响相同范围(域、子域和路径)时,浏览器将在两个 cookie 的值都有效的情况下发送两个值的 cookie

根据谁拥有最具体的路径或哪个是最旧的,浏览器将首先设置 cookie 的值,然后设置另一个值,如下所示:Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;

大多数网站只会使用第一个值。因此,如果攻击者想要设置一个 cookie最好在另一个 cookie 被设置之前设置它,或者使用更具体的路径设置它。

{% hint style="warning" %} 此外,能够在更具体的路径中设置 cookie非常有趣,因为你将能够让受害者使用他的 cookie除了在发送恶意 cookie 的特定路径之外。 {% endhint %}

绕过保护

对此攻击的可能保护措施是,Web 服务器不接受具有相同名称但具有不同值的两个 cookie 的请求

为了绕过攻击者在受害者已经获得 cookie 后设置 cookie 的情况,攻击者可以引起cookie 溢出,然后一旦合法 cookie 被删除,设置恶意 cookie

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

另一个有用的绕过方法是对 cookie 的名称进行URL 编码,因为某些保护会检查请求中是否存在两个具有相同名称的 cookie然后服务器将解码 cookie 的名称。

Cookie Tossing 攻击也可以用于执行Cookie 炸弹攻击:

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

防御措施

  • 如果 cookie 名称具有此前缀,它只会在 Set-Cookie 指令中被接受,如果它标记为 Secure从安全来源发送不包括 Domain 属性,并且具有设置为 / 的 Path 属性
  • 这样可以防止子域强制将 cookie 强制到顶级域,因为这些 cookie 可以被视为“域锁定”

参考资料

☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥