XSS(跨站脚本攻击)的主要类别和区别
一、反射型 XSS
特点:
- 非持久性攻击:攻击脚本是通过用户请求的参数带入服务器,服务器解析后响应给客户端,从而在客户端触发攻击。
- 通常需要诱骗用户点击恶意链接或提交特定表单才能触发攻击。
- 攻击的影响范围相对较小,主要取决于用户是否点击恶意链接或提交恶意表单。
举例:
攻击者构造一个恶意链接,其中包含恶意脚本,当用户点击这个链接时,服务器接收请求并将恶意脚本包含在响应中返回给用户浏览器执行。
二、存储型 XSS
特点:
- 持久性攻击:攻击者将恶意脚本存储到目标服务器上,如存储在数据库、文件系统或其他可持久存储的地方。
- 一旦恶意脚本被存储,任何访问受影响页面的用户都可能受到攻击,无需用户进行特定操作来触发攻击。
- 攻击的危害较大,因为恶意脚本会持续存在并影响多个用户。
举例:
攻击者在论坛上发布一篇带有恶意脚本的帖子,当其他用户浏览该帖子时,服务器将恶意脚本包含在页面中返回给用户,导致用户浏览器执行恶意脚本。
三、DOM 型 XSS
特点:
- 通过修改页面的 DOM(文档对象模型)结构来执行恶意脚本,攻击代码不经过服务器。
- 通常是由于客户端 JavaScript 代码对用户输入处理不当导致的。
- 攻击的触发取决于客户端的操作和页面的逻辑,与服务器的交互相对较少。
举例:
网页中的 JavaScript 代码从 URL 参数中获取数据并直接插入到页面中,如果没有对用户输入进行适当的过滤和转义,攻击者可以构造恶意的 URL 参数来触发 DOM 型 XSS 攻击。
三者区别:
- 存储方式:反射型 XSS 攻击脚本不存储在服务器上;存储型 XSS 攻击脚本存储在服务器上;DOM 型 XSS 攻击脚本不经过服务器存储,而是通过修改客户端 DOM 结构触发。
- 触发方式:反射型 XSS 需要诱骗用户点击恶意链接或提交恶意表单;存储型 XSS 无需用户特定操作,只要访问受影响页面即可触发;DOM 型 XSS 取决于客户端页面的逻辑和操作。
- 危害程度:存储型 XSS 通常危害较大,因为它可以影响多个用户且持续存在;反射型 XSS 和 DOM 型 XSS 的危害相对较小,但也可能造成严重后果,具体取决于攻击场景。
XSS 的fuzz字典或字典生成工具
同学推荐的一份字典
fuzzDicts/easyXssPayload/easyXssPayload.txt at master · TheKingOfDuck/fuzzDicts · GitHub
XSS靶场打靶
第一关
整个界面只有name像是变量,发现可以更改,故进行payload注入
轻松通关
第二关
开发者模式查看源码发现输入框内输入的值是一个value值,故使标签闭合即可
"><script>alert(1)</script>
闭合前面的双引号和<>
第三关
和上一关一样的思路,但发现网页对括号进行了转义
构建payload:
' onfocus='alert(123)'
第四关
和上一关一摸一样的思路
payload:
" onmouseover=alert(9) "
第五关
和上一关一样的思路常识,发现被加了下划线
多试几个payload
发现a标签的herf可以绕过检测
'"><a href='javascript:alert(123);'>点击我</a>
第六关
还是和上一关一样的思路
发现可以使用大小写混合绕过
'"><a HREF='javascript:alert(123);'>点击我</a>
总结浏览器解析机制
浏览器解析机制总结
一、HTML 解析
- 词法分析:浏览器首先将接收到的 HTML 文档进行词法分析,将文档分解成一个个的标记(token),如标签、属性名、属性值、文本内容等。
- 语法分析:对这些标记进行语法分析,构建成一棵 DOM(文档对象模型)树。DOM 树以树状结构表示 HTML 文档的内容,每个节点对应一个 HTML 元素。
- 错误处理:在解析过程中,如果遇到语法错误,浏览器会尽量进行错误恢复,以确保页面能够部分显示。但严重的错误可能导致页面显示不正常。
二、CSS 解析
- 下载 CSS 文件:浏览器在解析 HTML 文档的同时,会识别并下载页面中引用的 CSS 文件。
- 解析 CSS 规则:对 CSS 文件进行解析,将其分解成一个个的 CSS 规则。每个规则由选择器和声明块组成,声明块包含多个属性和值。
- 构建 CSSOM(CSS 对象模型)树:根据解析后的 CSS 规则构建 CSSOM 树,该树与 DOM 树相对应,描述了每个 HTML 元素的样式信息。
三、JavaScript 解析和执行
- 下载 JavaScript 文件:当浏览器遇到
<script>
标签时,会下载相应的 JavaScript 文件。 - 解析和编译:对 JavaScript 代码进行解析和编译,将其转换为可执行的机器代码。
- 执行代码:按照代码的顺序依次执行 JavaScript 代码。JavaScript 可以操作 DOM 树和 CSSOM 树,改变页面的结构和样式。
四、页面渲染
- 构建渲染树:结合 DOM 树和 CSSOM 树构建渲染树,渲染树只包含需要显示在页面上的元素和它们的样式信息。
- 布局计算:计算每个元素在页面上的位置和大小,确定它们的布局。
- 绘制:根据布局信息,将元素绘制到屏幕上,形成最终的页面显示。
五、资源加载和异步处理
- 资源加载:浏览器在解析页面的过程中,会同时加载图片、视频、音频等其他资源。这些资源的加载不会阻塞页面的解析和渲染,可以提高页面的加载速度。
- 异步处理:JavaScript 可以使用异步编程技术,如回调函数、Promise、async/await 等,来处理耗时的操作,避免阻塞页面的渲染。例如,在加载数据时,可以使用异步请求,让页面在等待数据的同时继续渲染其他部分。
成功与不成功的原因分析(5条)
1. 例1
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
-
- 不执行:
- 先进行
html
解码,但是未进行html
编码,所以不解码。 - 然后进行
url
解码,但是不对协议解码,所以无法识别协议,所以无法执行。
2. 例4
<div><img src=x onerror=alert(4)></div>
-
- 不执行:
- html解码不对
"("
、")"
进行解码
3. 例8
<button onclick="confirm('8\u0027);">Button</button>
-
- 不执行:
- 当
' "
作为边界符时候,javascript解码不对'
、"
、进行解码。
4. 例12
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
-
- 不执行:
- 全都可以解码,确实没错。
- 但是解码之后变成了
alert(12)
,12
是字符串但是外面没有引号,语法错误
5. 例5
<textarea><script>alert(5)</script></textarea>
-
- 不执行:
<textarea> </textarea>
标签内只能是字符串,都不会执行。