作业一、总结反射型、存储型、DOM型XSS特点和区别
特点:
反射型XSS
攻击代码通过URL参数传递给服务器。
当受害者点击一个包含恶意URL的链接时,服务器会将URL中的参数反射回响应中,而浏览器会执行其中的恶意脚本。
通常是一次性的,即只有在受害者访问恶意链接时才会触发。
存储型XSS
攻击代码被保存在目标服务器的数据存储中。
每当用户查看受影响的内容时,恶意脚本都会被加载和执行。
是持久性的,只要数据存在就会一直生效
DOM型XSS
攻击代码不会经过服务器端处理,而是直接在客户端(用户的浏览器)通过修改DOM(文档对象模型)来执行。
这种类型的XSS利用了JavaScript在客户端处理数据的方式。
区别:
反射型XSS 不持久且需要用户交互才能触发。
存储型XSS 持久,一旦存储则每次加载相关数据时都会触发。
DOM型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挑战靶场打靶,要求通过5关以上
level1
检查网页源代码,发现关键函数和注入点
在地址栏中尝试输入?name=<script>alert()</script>
注入成功
level2
查看源代码
显然可以根据输入框进行xss注入,但由于value后跟转义字符,所以需要进行绕过。尝试输入
"><script>alert()</script><"
注入成功
level3
尝试使用上一关的内容进行绕过,失败。
检查源码,发现被转义了
尝试使用onfocus,获得焦点事件
尝试输入,' οnfοcus=javascript:alert() '
注入成功。
level4
上一关使用,单引号做转义,本关通过检查源码知,为双引号。
因此可以尝试输入" οnfοcus=javascript:alert() "
level5
尝试输入"><script>alert()</script><",失败。
检查源码发现,script被强转了。onfocus同样被强转了
尝试使用a标签的herf属性,尝试输入"><a href="javascript:alert();">xx</a><"
点击链接,显示注入成功
level6
使用上一关的方式,发现script,onfocus,herf均被强转,但多次尝试后发现,通过使用大写的方式,可以避免被转义。
于是尝试输入"><SCRIPT>alert()</SCRIPT><"
注入成功
作业四、浏览器解析机制
浏览器解析机制主要包括以下几个步骤:
请求获取:
用户输入URL或者点击链接。
浏览器发起HTTP(S)请求以获取资源。
接收响应:
服务器响应浏览器的请求,返回HTML文档或其他类型的内容。
解析HTML:
浏览器从上到下解析HTML文档。
构建DOM树(Document Object Model):将HTML标签解析为节点结构。
处理<script>和<link>标签,加载外部JavaScript和CSS文件。
CSS解析与样式计算:
加载并解析CSS规则,创建CSSOM(CSS Object Model)。
结合DOM和CSSOM生成渲染树(Render Tree),其中包含可见元素及其样式属性。
布局构建:
根据渲染树进行布局,确定每个元素的位置和尺寸。
绘制:
将布局后的元素绘制到屏幕上。
事件处理与交互:
解析并执行JavaScript代码。
处理用户的交互行为,如点击、滚动等。
JavaScript可以修改DOM、CSSOM和触发重排(reflow)和重绘(repaint)。
性能优化:
浏览器会尽可能地避免重排和重绘,提高页面加载速度。
使用缓存来减少网络请求。