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 时对用户输入进行适当的过滤和验证,以防止恶意代码的注入和执行。