Set-Cookie 不设置 Cookie



有一款著名的谷歌XSS游戏(https://xss-game.appspot.com/)它允许您学习如何查找和利用XSS漏洞。在用户注入脚本以弹出JavaScriptalert()之后,将进入下一个级别。

以前,升级到下一个级别并没有造成问题,但现在这个游戏中似乎出现了问题,因为即使在屏幕上显示警报后,当你试图移动下一个时,也会出现以下消息:

根据您的浏览器cookie,您似乎还没有通过游戏的前一级别。请返回上一级并完成挑战。

让我们试着弄清楚发生了什么。

站点的源代码(game.js, lines 11-24(显示以下代码负责移动到下一个级别:

function levelSolved() {
if (!userOpenedAlert) {
return;
}
var oReq = new XMLHttpRequest();
oReq.onload = function () { 
if (oReq.readyState != 4) return;
document.getElementById('next-controls').style.display = "block";
eval(oReq.responseText);
};
oReq.open("GET", window.location.toString() + '/record', true);
oReq.send();
}

请求https://xss-game.appspot.com/level1/record如下所示:

General:
Request URL: https://xss-game.appspot.com/level1/record
Request Method: GET
Status Code: 200 
Referrer Policy: strict-origin-when-cross-origin
Response Headers:
alt-svc: h3=":443"; ma=2592000
cache-control: no-cache
content-length: 0
content-type: text/html; charset=utf-8
date: Wed, 31 Aug 2022 18:14:26 GMT
expires: Wed, 31 Aug 2022 18:14:26 GMT
server: Google Frontend
set-cookie: level1=f148716ef4ed1ba0f192cde4618f8dc5; Path=/; Expires=Wed, 22 Jul 2022 12:34:56 GMT; HttpOnly
x-cloud-trace-context: 31ad2e6a5cdd8b63c39bad66e783535b;o=1
Request Headers:
:authority: xss-game.appspot.com
:method: GET
:path: /level1/record
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: q=0.9,en-US;q=0.8,en;q=0.7
sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36

因此,正如您所看到的,Set-Cookie响应头应该设置cookie。如果浏览器手动设置此cookie,那么一切都开始正常工作,并且可以顺利升级到下一个级别。

实际上,问题是为什么Set-Cookie标头在这种情况下不起作用?该请求不是跨源的,您甚至可以不将其作为XMLHttpRequest执行,而是作为常规GET请求执行,但这无论如何都不起作用。

让我们帮助谷歌修复这个游戏;(

服务器在cookie中发送Expires=Wed, 22 Jul 2022 12:34:56 GMT。所以没有理由设置这个已经过期的cookie

最新更新