毕业实训-Day4

一、反射型、存储型、DOM型XSS的特点和区别

1. 特点

反射型 XSS (Reflected XSS)

  • 即时性:攻击脚本是即时注入并立即执行的。当用户点击恶意链接或提交含有恶意代码的表单时,服务器将这些数据反射回页面,从而触发脚本。
  • 无持久性:脚本不会被存储在服务器上,只是在单个请求的响应中出现。这意味着每次攻击都需要用户触发恶意链接或提交表单。
  • 依赖用户交互:攻击通常需要用户点击恶意链接或访问恶意网址才能执行。

存储型 XSS (Stored XSS)

  • 持久性:攻击脚本被存储在服务器上(例如,数据库、日志文件或其他持久存储中),因此,当用户访问受影响的页面时,脚本会被持续执行。
  • 广泛影响:一旦脚本被存储,任何访问相关页面的用户都会受到影响。这使得存储型 XSS 更具破坏性,因为它不依赖于特定的用户交互来触发。
  • 更隐蔽:由于脚本存储在服务器上,攻击者可以在较长时间内持续影响用户,且较难被检测和修复。

DOM 型 XSS (DOM-based XSS)

  • 客户端处理:脚本的注入和执行完全发生在客户端浏览器中,不依赖于服务器端的响应。攻击者通过操控客户端 JavaScript 来注入恶意代码。
  • 无服务器干预:与存储型和反射型 XSS 不同,DOM 型 XSS 完全在客户端进行,服务器端不会看到恶意脚本。
  • 依赖客户端脚本:攻击脚本通常利用页面中存在的客户端脚本漏洞或不安全的 DOM 操作来注入和执行。

2. 区别

执行机制

  • 反射型 XSS

    • 执行时机:攻击脚本在用户发送请求并收到服务器响应时执行。
    • 依赖点:服务器反射用户输入的数据(如 URL 参数)到响应中,并直接执行恶意代码。
  • 存储型 XSS

    • 执行时机:攻击脚本在存储在服务器端的内容(如数据库或日志文件)被用户访问时执行。
    • 依赖点:恶意脚本被存储在服务器上,当用户访问含有这些存储内容的页面时,脚本被执行。
  • DOM 型 XSS

    • 执行时机:攻击脚本在客户端浏览器中执行,与服务器端响应无关。
    • 依赖点:攻击脚本通过客户端 JavaScript 和 DOM 操作被注入和执行,完全在浏览器端进行。

存储方式

  • 反射型 XSS

    • 存储:恶意代码不被存储在服务器上,只在请求响应的瞬间存在。
  • 存储型 XSS

    • 存储:恶意代码被存储在服务器端(如数据库、日志等),可以被长期保留和多次触发。
  • DOM 型 XSS

    • 存储:没有服务器端存储,所有的脚本注入和执行都是在客户端完成的。

触发方式

  • 反射型 XSS

    • 触发:通常需要用户点击恶意链接、提交表单或在请求中包含恶意数据。
  • 存储型 XSS

    • 触发:当用户访问包含恶意脚本的页面时触发,脚本在存储内容中长期存在。
  • DOM 型 XSS

    • 触发:通过客户端脚本中的漏洞(如不安全的 DOM 操作)注入和执行,通常不需要用户的直接交互。

持久性

  • 反射型 XSS

    • 持久性:攻击只有在当前请求的响应中有效,攻击结束后恶意脚本不再存在。
  • 存储型 XSS

    • 持久性:攻击脚本存储在服务器上,对所有访问相关内容的用户都有长期影响。
  • DOM 型 XSS

    • 持久性:脚本在客户端存在和执行,不依赖服务器端的存储和响应。

安全防范

  • 反射型 XSS

    • 防范:对用户输入进行适当的过滤和编码,确保在返回响应时脚本不会被执行。
  • 存储型 XSS

    • 防范:对所有用户输入进行严格的验证和编码,防止恶意内容被存储。
  • DOM 型 XSS

    • 防范:审查和改进客户端 JavaScript 代码,确保安全地处理和操作 DOM,不允许恶意代码注入。

二、XSS挑战靶场打靶

1. 第一关

根据URL,猜测name后面的内容可以做插入

构建payload

<script>alert('1')</script>

2. 第二关

查看源码

发现输入的语句被赋值给了vlaue,并且在input标签里面,所以闭合value和input标签就可以正常弹窗了

构造payload

 "><script>alert('1');</script><”

3. 第三关

查看源码,发现写入的js语句的<>以及部分符号都被实体化了

利用onfocus事件绕过

构造payload

'onfocus=javascript:alert()'

4. 第四关

查看源码,发现<>被注释掉了

双引号闭合,<input>标签,所以我们还能继续利用onfocus事件

构建payload

"onfocus=javascript:alert()"

5. 第五关

查看源码,发现”script”被替换成了“scr_ipt”

使用a href标签法

构建payload

 "> <a href=javascript:alert()>111</a> <"

三、XSS的fuzz字典

https://github.com/TheKingOfDuck/fuzzDicts

四、HTML解析机制

浏览器将收到的HTML、CSS、JavaScript等代码转化为用户可见的网页,这个过程就是浏览器解析机制。

1. HTML解析

  • 构建DOM树: 浏览器会将HTML代码解析成DOM树,DOM树是HTML文档的树状表示,每个节点代表一个HTML元素。
  • 解析过程:
    • 从上到下,逐行解析HTML代码。
    • 遇到<符号,表示开始一个新标签。
    • 遇到>符号,表示标签结束。
    • 遇到属性,将属性添加到对应的节点。
    • 遇到文本内容,添加到对应的文本节点。
  • DOM树的作用:
    • 提供了对HTML文档结构的编程接口。
    • JavaScript可以通过DOM API操作DOM树,实现动态网页效果。

2. CSS解析

  • 构建CSSOM树: 浏览器会将CSS样式表解析成CSSOM树,CSSOM树是CSS样式规则的树状表示。
  • 解析过程:
    • 从上到下,逐行解析CSS代码。
    • 识别选择器、属性和值。
    • 建立选择器和属性之间的对应关系。
  • CSSOM树的作用:
    • 描述了页面元素的样式。
    • 浏览器根据CSSOM树来渲染页面。

3. 渲染树的构建

  • 合并DOM树和CSSOM树: 浏览器将DOM树和CSSOM树合并,生成渲染树。
  • 渲染树: 渲染树包含了页面中所有可见元素的样式信息。
  • 渲染树的作用:
    • 确定页面中每个元素的位置和样式。
    • 为后续的布局和绘制提供基础。

4. 布局

  • 计算元素的位置和大小: 浏览器根据渲染树,计算出每个元素在页面中的确切位置和大小。
  • 布局过程:
    • 从根节点开始,递归计算每个节点的位置和大小。
    • 考虑元素的盒模型、浮动、定位等属性。

5. 绘制

  • 将像素绘制到屏幕: 浏览器根据布局结果,将每个元素的像素绘制到屏幕上。
  • 绘制过程:
    • 从渲染树的根节点开始,按照文档流的顺序绘制每个节点。
    • 对于复杂效果,可能需要多次绘制。

6. JavaScript的执行

  • JavaScript引擎: 浏览器内置JavaScript引擎,负责执行JavaScript代码。
  • 执行过程:
    • JavaScript代码可以操作DOM、CSSOM和渲染树。
    • JavaScript代码的执行可能触发重新布局和绘制。

7. 影响解析过程的因素

  • 网络状况: 网络速度会影响资源加载速度,从而影响页面渲染速度。
  • 代码质量: 代码的书写质量、优化程度会影响解析和渲染效率。
  • 浏览器性能: 不同浏览器的解析引擎性能不同,会影响页面渲染速度。

8. 浏览器优化

  • 减少HTTP请求: 合并文件、使用雪碧图、启用gzip压缩。
  • 优化JavaScript: 延迟加载、最小化代码、避免全局变量。
  • 优化CSS: 减少样式表大小、使用CSS预处理器、避免使用过多的选择器。
  • 合理使用图片: 选择合适的图片格式、压缩图片、使用响应式图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值