目录
一、反射型、存储型、DOM型XSS特点和区别
1、反射型XSS的特点:
①临时性:这种类型的 XSS 攻击是临时性的,一旦用户离开页面,攻击代码就不会继续存在。
②用户触发:通常通过用户点击恶意链接或提交恶意数据到网站,网站在未经充分验证的情况下将这些数据反射回用户浏览器,导致攻击发生。
③不持久化:恶意脚本不是永久存储在服务器上的,而是通过用户的交互行为临时注入到页面中。
2、存储型XSS的特点:
①持久性:这种类型的 XSS 攻击是持久性的,恶意脚本会被存储在服务器端,每次用户加载受影响的页面时都会执行恶意脚本。
②服务器存储:恶意脚本被存储在服务器数据库中,例如论坛帖子、评论等。
③广泛传播:由于存储型 XSS 的持久性,它可以在多个用户之间传播,影响范围更广。
3、DOM型XSS的特点:
①客户端处理:这种类型的 XSS 攻击发生在客户端(浏览器),通常是因为客户端 JavaScript 代码对用户提交的数据处理不当而导致。
②动态生成:恶意脚本不是由服务器直接返回的,而是通过客户端 JavaScript 动态生成的。
③不涉及服务器:虽然数据可能来自于服务器,但实际的恶意脚本是在客户端通过 JavaScript 处理数据时产生的。
4、三种XSS之间的区别:
①反射型 XSS:
临时性,通过用户交互触发。恶意脚本不是存储在服务器上,而是通过用户的交互行为反射到页面中。
②存储型 XSS:
持久性,恶意脚本存储在服务器上。影响范围更广,每次用户加载受影响的页面时都会执行恶意脚本。
③DOM 型 XSS:
发生在客户端,通过客户端 JavaScript 处理数据时产生。恶意脚本不是由服务器直接返回的,而是通过客户端 JavaScript 动态生成的。
二、XSS的fuzz字典或字典生成工具
Xss-Sql-Fuzz:
Xss-Sql-Fuzz包含了预定义的XSS攻击payload,覆盖了反射型、存储型和DOM型XSS的各种情形。该工具不仅可以用于XSS检测,还可以检测SQL注入等其他类型的漏洞。
Fuzz Dict:
Fuzz Dict是一个开源项目,用于生成模糊测试(Fuzz Testing)的自定义字典,可以帮助开发者进行XSS等类型的漏洞测试。
下载地址:TuuuNya/fuzz_dict
Upload-Fuzz-Dic-Builder:
Upload-Fuzz-Dic-Builder是一个文件上传漏洞fuzz字典生成脚本小工具,虽然主要针对文件上传漏洞,但也可以用于生成XSS测试相关的payload。
下载地址:c0ny1/upload-fuzz-dic-builder
三、XSS挑战打靶
靶场链接:https://xss.tesla-space.com/
第一关
源代码分析如下:
将URL修改为“https://xss.tesla-space.com/level1.php?name=<script>alert()</script>”
第二关
查看源代码:
然后,添加“<script>alert()</script>”,发现:
由上图可知,输入的句子会直接被引号框住,因此可以尝试将引号给“消掉”,使用URL“
https://xss.tesla-space.com/level2.php?keyword="> <script>alert()</script> <" ”来构造:
第三关
首先,随机输入密码(这里输入的是1234),并查看源码:
接着,尝试使用第二关的方法进行绕过:
此时,发现无法绕过。接下来,尝试onfocus事件绕过,即添加 ' οnfοcus='alert() '。构造URL“ https://xss.tesla-space.com/level3.php?keyword=' οnfοcus='alert() ' ”,再点击搜索栏:
第四关
来到第四关,下面是代码分析:
此时,尝试使用第三关类似的onfocus事件绕过,即添加 " οnfοcus='alert() "。构造URL“ https://xss.tesla-space.com/level4.php" οnfοcus='alert() " ”,再点击搜索栏:
第五关
来到第五关,同样先分析第五关源代码:
这里,同样尝试使用第四关的方法:
发现无法行通。下面,尝试a href属性,即添加“ "> <a href=javascript:alert()>xxx</a> <" ”。构造“ https://xss.tesla-space.com/level6.php?keyword="> <a href=javascript:alert()>xxx</a> <" ”
点击标签“XXX”,即可触发事件:
四、浏览器解析机制的总结
浏览器的解析分为以下几个过程:
①加载过程:
当用户在浏览器中输入URL后,浏览器首先会发起DNS查询以获取目标服务器的IP地址。
浏览器通过TCP/IP协议建立连接,并发送HTTP请求给服务器。服务器响应请求,返回HTML文档。
②解析HTML:
浏览器开始接收HTML文件,并几乎立即开始解析它,构建DOM树(Document Object Model)。浏览器遇到<link>
标签引用外部CSS文件或者<script>
标签引用外部JavaScript文件时,会发起额外的网络请求来获取这些资源。
③加载CSS:
CSS文件被加载后,浏览器解析它们以生成CSSOM(CSS Object Model)。浏览器将DOM树与CSSOM合并,创建一个渲染树(Render Tree),其中包含了页面上每个可见元素的样式信息。
④执行JavaScript:
JavaScript代码可以修改DOM树和CSSOM,因此JavaScript的执行可能会影响渲染树的构造。脚本可以是内联的,也可以是外部文件的形式;浏览器会暂停HTML解析来执行脚本,这可能导致阻塞渲染。
⑤布局和绘制:
渲染树构建完成后,浏览器进行布局阶段(Layout),确定每个元素在页面上的位置和大小。接着是绘制阶段(Painting),浏览器把每个可见元素绘制到屏幕上。
⑥交互:
页面完全加载后,用户可以与页面进行交互,如点击按钮、填写表单等。这些操作可能会触发JavaScript事件处理器,从而改变DOM树,重新渲染页面。