标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-3234] 作者: 小螺号 发表于: [2022-12-28]
本文共 [346] 位读者顶过
Cookie是网络服务器生成并随每个请求发送的小块信息。Web浏览器将它们收到的cookie存储预定的时间段,或存储用户在网站上的会话时长。 [出自:jiwo.org] Cookies有助于将用户信息告知网站,使网站能够个性化用户体验。Cookie主要用于会话管理、个性化和跟踪。 浏览器中使用最多的会话存储机制是cookie存储。由于HTTP是一种无状态协议,它不存储对同一用户发送的请求的任何引用,因此创建会话cookie并将其附加到每个HTTP请求,以便可以使用cookie识别用户。Cookie可以由服务器设置,方法是在HTTP响应中包含Set-Cookie标头或通过JavaScript。 让我们从下图了解cookies是如何设置的:
如果服务器想要跟踪来自特定设备的用户阅读的博客名称,它会使用cookie将博客名称保存到用户的机器上。这是通过在每次阅读博客时将HTTP响应中*Set-Cookie标头中的cookie发送到浏览器来完成的。*浏览器将其保存在设备上,下次用户从同一台机器访问该站点时,浏览器将发送保存的cookie。这样服务器就可以跟踪用户阅读过的博客,并使用这些数据在他们每次访问时显示类似的博客。 WebCookie通常是恶意用户的主要攻击媒介,应用程序应始终尽职尽责地保护cookie。 保护Cookie及其反问题为了保护cookie数据,设置了许多属性,如Secure、HttpOnly、Domain、Path、Same-Site、Expires。这里我们将重点关注HttpOnly属性。 HttpOnly是包含在Set-CookieHTTP响应标头中的*标志。*在生成cookie时使用HttpOnly标志有助于降低客户端脚本访问受保护cookie的风险。 HttpOnlycookie从浏览器发送到服务器,但在浏览器中它们不能被JavaScript读取。 因此,即使存在跨站点脚本(XSS)漏洞并且用户无意中点击了利用该漏洞的链接,浏览器也不会向第三方泄露cookie。 但是,仍然可以覆盖标记为HttpOnly的cookie 事实证明,HttpOnly标志在某些浏览器中可以被JavaScript覆盖,攻击者可以利用这种覆盖可能性来发起会话固定攻击。 Cookie溢出浏览器只能存储有限数量的cookie。 一个域可以存储的cookie数量因浏览器而异,最多只能存储几百个cookie。 当写入更多cookie时,最旧的cookie将被删除。通过设置许多cookie,应用程序可以使浏览器删除旧的cookie。 这适用于JavaScript,它还会删除HttpOnlycookie。因此,脚本可能会通过生成数百个垃圾cookie来清除HttpOnlycookie。HttpOnlycookie然后可以通过设置一个具有相同名称但不是HttpOnly的新cookie来成功覆盖。 当JavaScript可以用HttpOnly标志覆盖cookie时,攻击者可以在跨站点脚本利用的情况下通过HttpOnlycookie发起会话固定攻击。作为会话固定攻击的结果,攻击者可以冒充受害者。在这种情况下,如果成功登录后应用程序中没有重新生成会话,JavaScript可以覆盖某些浏览器中的HttpOnly标志,这可以利用成功登录后应用程序中不重新生成会话的优势,以便最终启动一个会话固定攻击。 示例攻击场景:下面是利用存储型跨站脚本执行CookieJar溢出攻击的场景。
3.如上所述,浏览器只存储几百个cookie,旧的cookie连同应用程序的会话cookie将被删除。这是对HTTPS会话完整性的轻微违反,可能会产生重大后果。 4.当应用程序重新加载时,用户被抛出会话。 5.这可以被进一步利用来执行会话固定。 通过注入以下脚本,可以删除旧的会话cookie并设置新的会话cookie: <script>for(leti=0;i<700;i++){document。cookie=`cookie${i}=${i};Secure`; document。cookie="session_id=random_value_set_by_attacker"</script> 6.如果应用程序接受攻击者设置的这个cookie,攻击者就可以成功登录并完全控制用户的账户。 下面的截图显示了JavaScript负载被注入并存储在应用程序中:
JavaScript负载已被执行,并出现警告弹出窗口,表明该应用程序易受存储的跨站点脚本攻击:
下面的屏幕截图显示,在执行JavaScript负载后生成了大约700个垃圾cookie,这些cookie存储在浏览器中,并将HttpOnly属性设置为False:
在此应用程序中,观察到旧的会话cookie已被删除,并且用户被抛出会话。 |