09.进阶 1:输出存在于 HTML 节点属性中,但是不再 on 属性中(IMG ALT)
这个案例是 XSS(跨站脚本攻击)的进阶形式,展示了一种输出存在于 HTML 节点属性中,但不再 on 属性中的漏洞类型。
#
示例代码:{ DefaultQuery: "json={\"value\":\"value=visitor-name\"}", Path: "/attr/alt/json", Title: "进阶1:输出存在于HTML节点属性中,但不再on属性中(IMG ALT)", Handler: func(writer http.ResponseWriter, request *http.Request) { unsafeTemplateRender(writer, request, `<!doctype html><html><head> <title>Example DEMO</title> <!-- ... 省略其他标签 ... --></head>
<body><div> Hello Visitor! <br> Here are photo for U! <br> <img style='width: 100px' alt='{{.value}}' src="/static/logo.png" onclick='javascript:alert("Welcome CLICK ME!")'/></div></body></html>`, map[string]any{ "value": LoadFromGetJSONParam(request, "json", "value"), }) writer.Header().Set("Content-Type", "text/html") }, RiskDetected: true,}
#
攻击示例:攻击者可以构造以下恶意 URL 来利用漏洞:
http://127.0.0.1:8787/xss/attr/alt/json?json=%7B%22value%22%3A%22%27+onmouseover%3D%27alert%28123%29%22%7D
在上述攻击示例中,攻击者通过在json
参数中注入%27+onmouseover%3D%27alert%28123%29
,将恶意代码嵌入到 ALT 属性中。当用户浏览到包含这个 IMG 标签的页面时,鼠标悬停在图像上时,浏览器会执行嵌入的 JavaScript 代码,弹出一个弹窗,显示“123”。
防御措施:
要防范这种类型的漏洞,开发者需要对从用户输入获取的数据进行适当的转义和过滤,确保用户提供的内容不会被解释为 HTML 或 JavaScript 代码。这可以通过使用安全的 HTML 编码函数来实现。