第四次作业

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

XSS(跨站脚本攻击,Cross-Site Scripting)是一种安全漏洞,攻击者通过在网页中注入恶意脚本代码,通常是 JavaScript,使这些脚本在其他用户的浏览器中执行,从而窃取信息、操控网页内容或进行其他恶意操作。XSS 漏洞通常发生在网页没有正确过滤用户输入时。

1.1反射型XSS特点

即时触发:恶意脚本在用户点击恶意链接或提交表单时立即执行。
无持久性:恶意代码不会存储在服务器端,而是反射在URL或请求参数中,影响当前请求。
依赖用户输入:攻击通常通过用户输入的参数(如查询字符串)来注入恶意脚本。
无持久存储:攻击者需要诱使用户点击特制的链接或提交特定的表单,恶意代码不会长期存储在服务器上。

1.2存储型XSS特点

持久性:恶意脚本被存储在服务器端(如数据库、日志或用户资料中),并在后续请求中执行。
自动执行:当受害者访问存储了恶意脚本的页面时,脚本会自动在其浏览器中执行。
广泛影响:攻击一旦成功,所有访问该页面的用户都可能受到影响。
持续存在:恶意脚本在服务器中长期存在,除非被手动清除。

1.3DOM型XSS特点

客户端处理:恶意脚本注入和执行完全发生在客户端,浏览器的 Document Object Model(DOM)被直接操控。
无服务器存储:与存储型 XSS 不同,DOM 型 XSS 不涉及服务器端存储或处理,恶意代码通过客户端的 JavaScript 动态生成和执行。
依赖客户端脚本:攻击依赖于网页上的客户端脚本对输入的处理和 DOM 操作。攻击者通常通过篡改 URL 或请求数据来触发恶意脚本。
动态脚本执行:恶意代码可以通过修改网页的 DOM 元素(如插入恶意 HTML 或修改现有内容)来执行。
变动性:由于脚本是动态生成的,攻击方式可能因不同网页结构和客户端脚本而有所不同。

这种类型的 XSS 漏洞通常涉及到不安全的 DOM 操作,例如直接将用户输入插入到网页的 DOM 中,而没有进行适当的过滤或转义。

1.4区别总结

反射型 XSS:恶意脚本通过用户的输入(如 URL 参数)立即反射回网页,只有在用户点击特定链接或提交表单时才会执行。攻击是一次性的,且不在服务器端存储。

存储型 XSS:恶意脚本被持久存储在服务器(如数据库或日志)中,并在用户访问受感染的页面时自动执行。攻击的影响范围较广,可能影响所有访问该页面的用户。

DOM 型 XSS:恶意脚本通过操作网页的 DOM 元素实现,所有注入和执行均在客户端进行。攻击通常依赖于不安全的客户端 JavaScript 代码,脚本是动态生成的,不涉及服务器端存储。

(二)XSS的fuzz字典

XSS(跨站脚本攻击)的 fuzz 字典是一个包含多种可能触发 XSS 漏洞的字符串和负载的集合。这些字典用于模糊测试,以检测应用程序是否容易受到 XSS 攻击。典型的 XSS fuzz 字典包括:
常见的 XSS Payloads:如 <script>alert('XSS')</script>、<img src="x" onerror="alert('XSS')">
编码变种:URL 编码、HTML 实体编码等,如 %3Cscript%3Ealert(‘XSS’)%3C/script%3E
事件处理程序:如 <div onmouseover="alert('XSS')">hover me</div>
HTML 标签和属性注入:如 <iframe src="javascript:alert('XSS')"></iframe>
这些字典条目帮助识别和利用潜在的 XSS 漏洞。

XSS的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挑战靶场打靶

Level 1

第一关,F12查看源代码,发现可以直接利用无需进行闭合
直接上payload,插入一段js代码:<script>alert(1)</script>
通关在这里插入图片描述
成功通关

Level 2

首先用一下上一题的方法,发现没过,查看网站源码
在这里插入图片描述
观察前端源代码,发现这里要执行xss的话应该闭合input标签,要闭合input标签的话得用上">,插入"> <script>alert()</script> <"试试
在这里插入图片描述
成功通过

Level 3

查看网站源码,发现与第二关没有区别
在这里插入图片描述尝试输入一下第二关的payload

">  <script>alert()</script>  <"

在这里插入图片描述
发现被转义了,想到我们可以利用onfocus事件绕过,onfocus事件在元素获得焦点时触发,最常与 input、select 和 a标签一起使用,以上面图片的html标签input为例,input标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码.输入' onfocus=javascript:alert() ',再点击输入框触发onfocus事件试试
在这里插入图片描述
成功绕过<>号的过滤执行js,所以onfocus可以绕过html实体化(即<>号的过滤)

Level 4

查看一下网站源码
在这里插入图片描述
用上一关的payload试试,输完查看源码发现外围是双引号,于是把payload改成了“onfocus=javascript:alert() ”
在这里插入图片描述
成功

Level 5

先试了上一关的payload
在这里插入图片描述
在这里插入图片描述

这里on被替换成了o_n
这里想到了用a href标签法,href属性的意思是 当标签a被点击的时候,就会触发执行转跳,我们可以l利用触发执行一段js代码,这里还得添加一个“> 和<"闭合前面的标签
于是我们输入"> <a href=javascript:alert()>xxx</a> <"试试
在这里插入图片描述
点击xxx,触发a标签href属性
在这里插入图片描述

Level 6

首先查看一下源码
在这里插入图片描述
没看出来什么,输入一下关键字测试onfocus <script> <a href=javascript:alert()>
在这里插入图片描述
发现加了很多下划线,尝试一下大小写绕过
在这里插入图片描述
大小写没有被过滤掉,所以这题能用大小写进行绕过,输入"> <a hRef=javascript:alert()>x</a> <"试试
在这里插入图片描述
点击X完成
在这里插入图片描述

Level 7

首先查看一下源码,输入关键字" OnFocus <sCriPt> <a hReF=javascript:alert()>试试
在这里插入图片描述
发现这里面进行了小写转化,想到可以利用双拼写绕过
我们输入"> <a hrehreff=javasscriptcript:alert()>x</a> <"成功
在这里插入图片描述

Level 8

看一下源码
在这里插入图片描述
先用关键字测试了一下" OnMouseOver <sCriPt> <a hReF=javascript:alert()>
在这里插入图片描述
发现再中间添加了下划线,变成了小写。说明大小写方法和双写法都不管用了
但可以看到这一次的代码被直接放到了href链接下,猜测可能这次并不需要像之前一下闭合代码。直接构造alert函数输入javascript:alert(),这里还要用在线工具Unicode编码后得到&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;
在这里插入图片描述
在这里插入图片描述

(四)总结浏览器解析机制

浏览器解析机制是将 HTML、CSS 和 JavaScript 代码转换为可视化页面的过程。

1、HTML 解析
DOM 树构建:浏览器从上到下逐行解析 HTML 文档,逐步构建 DOM(文档对象模型)树。每个HTML元素都作为一个节点添加到 DOM 树中。

遇到外部资源:如果解析到外部资源(如 <script>、<link>、<img> 标签),浏览器会异步请求这些资源,但 <script> 标签默认会阻塞解析,直到脚本执行完毕。

修复不完整标记:浏览器具有容错机制,如果遇到不完整或错误的 HTML 代码,会自动修复以确保页面尽可能正确地渲染。

2、CSS 解析
CSSOM 树构建:浏览器解析所有样式表(内部、外部、内联),生成 CSSOM(CSS 对象模型)树。CSSOM树与DOM 树结合,决定最终的样式和布局。

层叠与继承:解析过程中,浏览器会计算每个元素的最终样式,考虑层叠规则(优先级、重要性、顺序)和继承属性。

3、JavaScript 解析
阻塞与执行:JavaScript解析和执行在默认情况下会阻塞HTML的解析。因此,浏览器通常会在解析完JavaScript代码后再继续解析HTML。

与 DOM 的交互:JavaScript可以修改 DOM 树结构或内容,因此必须等到 DOM 树基本构建完毕后再执行。如果脚本位于页面底部,则不需要等待其他资源加载完成即可操 DOM。

4、渲染树构建
渲染树生成:浏览器结合DOM树和CSSOM树,生成渲染树。渲染树包含页面中所有可见元素及其样式属性。

布局计算:渲染树完成后,浏览器会计算每个元素的位置和大小,称为布局阶段。

5、绘制与合成
绘制:浏览器将渲染树中的每个节点绘制到屏幕上,这包括文本、颜色、图像等。

合成层:对于复杂的页面,浏览器可能会将不同的部分分层渲染,然后将这些层合成到一起,提高性能和响应速度。

6、浏览器优化
懒加载:浏览器会推迟加载未在当前视口的资源以加快初始渲染速度。

异步与延迟脚本:可以通过async或defer属性使脚本加载与解析不阻塞页面渲染。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值