在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

admin 2024年10月20日00:58:34评论14 views字数 1964阅读6分32秒阅读模式
正文部分

常见的两种登录校验模式(仅限于cookie)

绑定模式

首先前端通过js设置了一个sessionid,当用户进行登录后,会将其数据核sessionid进行绑定,后续的访问全都通过sessionid进行鉴权

例如:下面只是做一些登录机制的演示,平台并不存在漏洞,请不要进行非法测试

这里在发送登录请求的时候是将SESSIONID通过cookie字段进行发送,登录成功后,将数据和该SESSIONID进行了绑定,后续访问需要授权的资源直接使用SEESIONID=fkalis进行访问即可

在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

返回模式

前端不会设置sessionid,当用户登录后,后端校验完毕,使用Set-Cookie请求头设置一个sessionid,后续的访问全部通过该设置的sessionid进行鉴权

这里在发送登录请求的时候没有携带SESSIONID,当登录成功后,后端会返回随机的cookie,并且使用Set-Cookie进行设置

在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

理解漏洞产生的场景

对于上述两种模式中,一般只有第一种满足使用cookie溢出+xss实现任意用户接管,只有当SESSIONID在前端进行设置的时候,如果存在xss,我们就可以使用该方法进一步提升漏洞的危害!

HttpOnly的作用

httponly字段存在,该cookie参数就无法通过js进行获取,所以就无法通过xss来获取到鉴权的键值对,导致无法接管

什么是 Cookie Jar 溢出攻击

在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

Cookie Jar 溢出攻击利用浏览器强制执行的有限 Cookie 存储容量,尤其是在 Chrome 中。浏览器只能为每个域存储一定数量的 Cookie。这种攻击的工作原理是淹没浏览器的 cookie 存储,强制驱逐(删除)旧 cookie 为新 cookie 腾出空间。

此攻击的目标是驱逐关键 Cookie,例如 PHPSESSID,它保存用户的会话 ID,并将其替换为攻击者控制的会话 ID。一旦合法会话 cookie 消失,用户就会有效地从其有效会话中注销,攻击者的会话 ID 将取而代之,从而使攻击者能够完全控制用户的会话。

当与 XSS(跨站点脚本)结合使用时,这种攻击变得更加强大。使用 XSS,攻击者可以在受害者的浏览器中运行恶意 JavaScript 代码,从而自动溢出 cookie。JavaScript 会快速创建新的 Cookie,直到浏览器的 Cookie jar 已满,从而强制驱逐 PHPSESSID 等合法 Cookie,并将其替换为预定义的恶意会话 ID。

这种攻击最令人担忧的方面之一是,即使在现代版本的 Chrome 中 — 无论底层操作系统如何 — 您都可以覆盖设置了 HttpOnly 标志的 cookie。这意味着,即使是旨在防止 JavaScript 访问的 Cookie,也可以通过溢出来逐出和替换,从而使 HttpOnly 标志在这种情况下无效。

XSS + Cookie Jar 溢出攻击流程

1.通过xss构造poc实现cookie溢出,诱导管理员点击,
2.管理员点击后,导致当前cookie被从浏览器缓存中进行删除,管理员退出登录,并且将当前浏览器的cookie设置为了注入的cookie值
3.管理员再次登录时候会携带我们注入的cookie值,并且登录成功后会将数据和cookie值进行绑定
4.由于我们事先就知道这个cookie值,使用注入的cookie值实现接管

漏洞复现

案例参考:Akash c 

漏洞poc

<img src="x" onerror="for(let i=999;i--;)document.cookie=`c${i}=${i};Secure`;document.cookie='PHPSESSID=x';">
  • 第 1 步:损坏的图像 触发了执行 JavaScript 的onerror事件。
  • 第 2 步:该脚本快速创建了 999 个 cookie,其名称为c0``c1``c2``c998``Secure...一直到 .每个 cookie 都被标记为并填充了浏览器的 cookie jar。
  • 第 3 步:一旦 cookie jar 装满,合法的 cookie 就会由于溢出而从浏览器的存储中被驱逐。
  • 第 4 步:然后,脚本注入我自己的会话 ID PHPSESSID=x,将合法会话 ID 替换为由我控制的会话 ID。

管理员点击后会进行退出登录

一旦合法会话 cookie 被驱逐并替换为我的攻击者控制的会话 ID,受害者基本上就被注销了。

在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

再次登录会携带我们注入的cookie

当他们再次登录时,他们使用我的会话 ID 进行身份验证。

在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

通过cookie实现任意用户接管

这意味着我现在可以访问他们的会话并控制他们的帐户,而无需他们的密码或凭证。此外,我使用注入的会话 Cookie 生成了私有 API 密钥,如下所示。

在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管

知识星球

 

原文始发于微信公众号(fkalis):【海外SRC赏金挖掘】在HttpOnly存在的情况下,XSS如何实现任意用户接管--XSS结合Cookie溢出实现任意用户接管

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月20日00:58:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在HttpOnly存在的情况下,XSS如何实现任意用户接管XSS结合Cookie溢出实现任意用户接管http://cn-sec.com/archives/3291237.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息