一、反射型、存储型、DOM型XSS特点和区别
反射型XSS
- 特点:
- 非持久性:攻击脚本不会存储在目标服务器上。
- 即时性:攻击发生在服务器立即将脚本反射回客户端时。
- 需要用户交互:通常通过诱使用户点击链接或访问特定URL来触发。
存储型XSS
- 特点:
- 持久性:攻击脚本存储在目标服务器上,如数据库、留言板等。
- 自动化攻击:用户访问受感染的页面时,无需交互即可触发脚本。
- 影响广泛:任何访问受感染页面的用户都可能遭受攻击。
DOM型XSS
- 特点:
- 不涉及服务器:攻击完全在客户端进行,不涉及服务器的响应。
- 基于DOM:攻击发生在客户端代码处理DOM元素和属性时。
- 多样性:攻击向量依赖于客户端代码的具体实现
区别
- 数据存储:
- 反射型:不存储在服务器上,通过请求直接反射。
- 存储型:存储在服务器上,可能是数据库或其他永久存储介质。
- DOM型:不通过服务器存储,直接在客户端的DOM中处理。
- 触发方式:
- 反射型和存储型:通常需要用户与链接或页面进行交互。
- DOM型:可能在用户仅仅浏览页面时就会触发,取决于客户端代码。
- 防御措施:
- 反射型和存储型:主要通过服务器端输入验证和输出编码来防御。
- DOM型:需要确保客户端代码对所有用户输入进行适当的清理和处理。
二、上网搜索一份XSS 的fuzz字典或字典生成工具
fuzz字典下载地址
https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/TuuuNya/fuzz_dict
https://github.com/jas502n/fuzz-wooyun-org
三、 到XSS挑战靶场打靶(https://xss.tesla-space.com/)
第一关
直接在url中插入<script>alert(1)</script>,改变name值,成功过关。
第二关
尝试第一关的方法,不行。
输入的脚本语句中“<>"被实体转义了,应该闭合input标签
输入"> <script>alert()</script> <",成功过关
第三关
查看源码与第二关一样
用第二关的方法,发现不行。
h2 和 input 都使用了 htmlspecialchars (),该函数会将特殊字符进行转义
换种绕过方法,构造事件onmouseout,' οnmοuseοver='alert(/xss/)
第四关
检查页面代码
尝试"> <script>alert()</script> <",发现不行
尝试' οnmοuseοver='alert(/xss/)
查看源码发现外围是双引号,尝试" οnmοuseοver='alert(666)'",成功过关。
第五关
尝试<script></script>,查看代码发现scr和ipt中间有了个下划线,对script进行了过滤
在这里学到使用 a 标签的 href 导入 js 代码进行注入,"><a href=javascript:alert(666)>666,过关成功