15.Cookie 中的 XSS
这个案例展示了一种称为 "Cookie 中的 XSS" 的漏洞类型。攻击者可以通过在 Cookie 中注入恶意代码,从而在用户的浏览器上下文中执行攻击。
示例代码:
该漏洞的出现是因为应用程序在设置 Cookie 时没有对用户输入进行正确的过滤和验证,导致恶意用户可以注入恶意代码到 Cookie 中。
{
DefaultQuery: "",
Path: "/cookie/name",
Title: "Cookie 中的 XSS",
Handler: func(writer http.ResponseWriter, request *http.Request) {
raw, _ := utils.HttpDumpWithBody(request, true)
xCname := lowhttp.GetHTTPPacketCookieFirst(raw, "xCname")
if xCname == "" && lowhttp.GetHTTPRequestQueryParam(raw, "skip") != "1" {
http.SetCookie(writer, &http.Cookie{
Name: "xCname",
Value: "UserAdmin",
})
writer.Header().Set("Location", "/xss/cookie/name?skip=1")
writer.WriteHeader(302)
return
}
unsafeTemplateRender(writer, request, `<!doctype html>
<html>
<head>
<title>Example DEMO</title>
<!-- ... 省略其他标签 ... -->
</head>
<body>
<div>
Here are photo for U! <br>
<img style='width: 100px' src="/static/logo.png" onclick='{{ .code }}'/>
<script>const name = "Admin";
console.info("Hello" + `+"`{{ .name }}: ${name}`"+`);
</script>
</div>
</body>
</html>`, map[string]any{
"name": xCname,
})
writer.Header().Set("Content-Type", "text/html")
},
RiskDetected: true,
}
攻击示例:
通过在 Cookie 中构造特定的参数,攻击者可以注入恶意脚本代码,从而实现 XSS 攻击。
Cookie: xCname=`%2balert('XSS Attack!')%2b`
在上述攻击示例中,攻击者将 xCname Cookie 值设置为 %2balert('XSS Attack!')%2b,这是一个经过 URL 编码的恶意代码。当用户访问带有恶意 Cookie 的页面时,恶意代码会在用户的浏览器上下文中执行,弹出一个弹窗,显示 "XSS Attack!"。
#修改后标签(Cookie)
<div>
Here are photo for U! <br>
<img style='width: 100px' src="/static/logo.png" onclick='<no value>'/>
<script>const name = "Admin";
console.info("Hello" + ``+alert('XSS Attack!')+`: ${name}`);</script>
</div>
防御措施:
开发者应当在设置 Cookie 时对用户输入进行适当的过滤和验证,以防止恶意代码的注入和执行。