目录
三,XSS靶场挑战(https://xss.tesla-space.com/)
一,总结反射型、存储型、DOM型XSS特点和区别
反射型XSS
- 特点:
- 攻击者通过构造恶意URL参数来实施攻击
- 用户点击恶意链接后,恶意代码会被发送到服务器
- 服务器生成包含恶意代码的响应并返回给客户端
- 客户端执行恶意代码
- 区别:
- 需要用户点击恶意链接才能触发
- 依赖服务器端的响应生成恶意内容
存储型XSS
- 特点:
- 恶意代码存储在服务器数据库中
- 当用户访问包含恶意代码的页面时触发
- 可以影响所有访问该页面的用户
- 区别:
- 不需要用户点击链接
- 恶意代码存储在服务器上,可以长期有效
DOM型XSS
- 特点:
- 恶意代码直接在客户端JavaScript中执行
- 不需要服务器响应或数据存储
- 依赖URL参数或DOM操作生成恶意代码
- 区别:
- 不涉及服务器响应
- 代码直接在浏览器中执行
- 可能需要用户点击或交互触发
总结
- 反射型和存储型XSS都需要服务器参与,而DOM型XSS则完全在客户端完成
- 反射型XSS需要用户点击,存储型XSS可以持续影响多个用户,DOM型XSS可能需要用户交互
- 防御策略也各异,反射型和存储型XSS需要服务器端保护,DOM型XSS需要客户端安全措施
二,fuzz字典
1、XSS的fuzz字典
fuzz字典是fuzzing测试(模糊测试)中用于生成输入数据的重要资源,它包含了各种可能的输入值,这些值被fuzzing工具发送到目标系统以检测潜在的漏洞。对于XSS漏洞的检测,fuzz字典通常包含各种可能导致XSS攻击的字符串,如HTML标签、JavaScript代码片段等。
以下是一些常用的XSS fuzz字典资源:
- FuzzDB:一个包含各种安全测试字典的集合,其中包括了针对XSS的fuzz字典。可以从FuzzDB的GitHub仓库获取。
- AwesomeXSS:一个包含XSS相关资源(包括fuzz字典)的集合,由安全研究员s0md3v维护。可以从AwesomeXSS的GitHub仓库获取。
- SecLists:一个包含各种安全测试字典和资源的集合,其中包括了针对XSS的fuzz字典。可以从SecLists的GitHub仓库获取。
2、XSS的fuzz字典生成工具
除了直接使用现成的fuzz字典外,还可以使用一些工具来生成自定义的fuzz字典,以满足特定的测试需求。以下是一些常用的XSS fuzz字典生成工具:
- Crunch:Crunch是一种强大的密码和fuzz字典生成工具,可以根据用户指定的规则生成各种复杂的字符串组合。它非常适合在渗透测试阶段用于生成爆破密码或fuzz测试数据。Crunch的使用需要一定的命令行操作基础,但它提供了非常灵活的配置选项,可以生成高度定制化的fuzz字典。
- upload-fuzz-dic-builder:这是一个针对文件上传漏洞的fuzz字典生成工具,但同样可以生成适用于XSS测试的fuzz字典。该工具可以根据上传点的相关信息(如允许的上传后缀、后端语言、中间件等)来生成精确的fuzz字典。使用Python编写,可以在Python环境下运行。工具的安装和使用方法可以从GitHub仓库获取。
3、使用建议
- 选择合适的fuzz字典:根据测试目标和场景选择合适的fuzz字典,可以提高测试的效率和准确性。
- 自定义fuzz字典:如果现成的fuzz字典无法满足测试需求,可以考虑使用fuzz字典生成工具来生成自定义的fuzz字典。
- 结合fuzzing工具使用:将fuzz字典与fuzzing工具(如Wfuzz、ffuf等)结合使用,可以自动化地执行模糊测试过程,提高测试效率。
- 分析测试结果:在fuzzing测试完成后,需要仔细分析测试结果中的响应、时间和状态代码等信息,以确定是否存在潜在的XSS漏洞。
三,XSS靶场挑战(https://xss.tesla-space.com/)
1,level1
发现更改level1.php?name=后的字段,刷新后会改变payload的长度,表示该字段的字长
根据源代码可知当有个弹窗就会执行函数,最后得到我们想要的“完成的不错”
输入 <script>alert(123)</script>
2,level2
按照上一关输入<script>alert(123)</script>,发现无效
查看页面源代码
发现我们输入的数据被写入了value里,可以添加 "> 来闭合前面的
输入"><script>alert(123)</script>//即可
3,level3
输入上一关的结果后查看源代码
使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为HTML实体,防止浏览器将其作为HTML元素
但是默认是只编码双引号的,而且单引号无论如何都不转义。
所以输入'οnclick='alert(123),网页的表单输入框的就会被添加 onclick属性,我们点击一下,输入框即可过关
4,level4
查看源码发现和第三关差不多只是在第三关的基础上添加了对 尖括号的过滤
输入" οnclick="alert(123)过关
5,level5
这关过滤了 on 和 <script,需要使用其他payload
javascript:alert(123) 使用了java伪协议
输入"><iframe src="javascript:alert(1)"></iframe>
"><a href="javascript:alert(1)"> 即可过关
6,level6
出现了更多的过滤,但是大小写可以绕过
输入"><a HrEf="javascript:alert(1)">后点击链接即可
7,level7
这次把我们的输入强制换成了小写,但是过滤不严谨,可以双写绕过
输入"><scscriptript>alert(1)</sscriptcript>即可