目录导航
在我开始解释我们如何绕过 HttpOnly 标志之前,让我们讨论一下HttpOnly是什么:
HttpOnly是包含在 Set-Cookie HTTP 响应标头中的附加标志。Set-Cookie的HttpOnly标志时产生一个Cookie可以帮助减轻客户端脚本的风险访问受保护的cookie,如果仅Http标志(可选)被包括在HTTP响应报头中,Cookie无法通过客户端访问脚本,如果浏览器支持这个标志。因此,即使存在跨站脚本(XSS)漏洞,并且用户意外访问了利用此漏洞的链接,浏览器也不会将 cookie 泄露给第三方。
如果浏览器不支持HttpOnly并且网站尝试设置HttpOnly cookie,则浏览器将忽略HttpOnly标志,从而创建传统的、脚本可访问的 cookie。因此,cookie(通常是您的会话 cookie)变得容易被恶意脚本窃取修改。——来源
在使用Higgsx进行 Web 应用程序评估时,我们发现存储的跨站点脚本(XSS)是一个很好的发现,但由于会话 cookie 上的 HttpOnly 标志 – ci_session ,我们无法进一步升级它:

有几种众所周知的绕过 HttpOnly 标志的方法:
- 如果目标接受 TRACE 方法,则窃取它,在这种情况下,启用了 TRACE 方法,但现代 Web 浏览器默认不再支持它,因此使用 TRACE 方法利用它是没有意义的。
- 从响应中获取 HttpOnly cookie,这对我们不起作用 — https://www.shorebreaksecurity.com/blog/xss-exploitation-with-xhr-response-chaining/
在挣扎了几个小时后,我们有了一个新的想法……
那么,为什么是phpinfo?
我正在测试的几乎每个网站(当然,基于PHP)都有phpinfo文件。
如果您打算在错误赏金计划中报告它们,则仅通过查找phpinfo不会获得错误赏金,因为在大多数情况下影响非常小。
经过一些目录和文件枚举,我们遇到了info.php文件:

phpinfo 最有趣的部分是它读取每个 cookie,甚至是 HttpOnly 的。

使用 info.php 文件窃取 ci_session
我们在名称字段中发现了XSS,现在我们可以滥用XSS来加载我们的 JavaScript,它使用XMLHttpRequest()读取info.php并发送它
我们创建了这个读取 info.php 的JS代码,获取值“ HTTP_COOKIE ”并将其发送回我们的服务器。
info.js文件:

gist.github.com/ls4cfk/0deb122d4e2e24ac66cd74d3edf956bf
创建 JavaScript 文件后,我们可以在姓氏字段中注入 Payload(我们的案例很容易受到攻击):

这是我们的请求,包含info.php内容(在base64 中)

而通过简单解码base64数据,我们可以看到
ci_session

获得ci_session 后,我们可以访问管理员帐户并从用户那里提升我们的权限。
PS JavaScript 可以进一步改进,请随时贡献
PS2 Tomcat 有可以以相同方式使用的示例
/examples/servlets/servlet/SessionExample

转载请注明出处及链接