2024.8.29
目录
4. XSS挑战靶场打靶(https://xss.tesla-space.com/)
今日作业:
1. 总结反射型、存储型、DOM型XSS特点和区别
2. 上网搜索一份XSS 的fuzz字典或字典生成工具(可选)
3. 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。(https://xss.tesla-space.com/)
4. 总结浏览器解析机制,若不能理解,解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因。(可选)
1.课上
xss漏洞
跨站脚本攻击
xss分类
存储型XSS:
存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这便是存储型XSS。
反射型XSS:
反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。
DOM型XSS:
不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model ,DOM)的一种漏洞, dom - xss是通过url传入参数去控制触发的。
注意:大体上只分为存储型XSS和反射型XSS,反射型XSS包括DOM型XSS
浏览器解析
HTML解析
这里有三种情况可以容纳字符实体,“数据状态中的字符引用”,“RCDATA状态中的字符引用”和“属性值状态中的字符引用”
URL解析
不能对协议类型进行任何的编码操作,不然URL解析器会认为它无类型
javascript解析
unicode不可以对特殊符号进行编码,例如:' " \n
pikachu-反射型xss打靶演示
F12即可看到源代码,框中右键单击选择检查即可定位
这时在框中输入弹窗代码
<script>alert('1')</script>
发现长度不够
手动把length改成100,即可输入完整
弹窗成功
2.反射型、存储型、DOM型XSS特点和区别
反射型XSS(Reflected XSS)
特点:
- 非持久性:攻击载荷(payload)不会存储在目标服务器上,而是通过URL参数、表单字段或HTTP头等方式传送到受害者的浏览器并执行。
- 特定性:被攻击对象是特定的,通常需要用户点击一个包含恶意脚本的链接才能触发攻击。
- 前端执行:恶意脚本在受害者的浏览器前端执行,不涉及服务器端的直接交互。
危害:
- 窃取用户数据,如cookie、会话令牌等。
- 冒充用户身份进行非法操作。
存储型XSS(Stored XSS)
特点:
- 持久性:攻击脚本被永久地存放在目标服务器的数据库或文件中,每当用户访问包含该脚本的页面时,脚本都会被执行。
- 非特定性:攻击者将存储型XSS代码写进有漏洞的网站上后,所有访问该页面的用户都可能成为受害者。
- 隐蔽性高:由于攻击脚本存储在服务器上,因此很难被用户直接发现。
危害:
- 危害面更广,可以影响大量用户。
- 可能导致用户机器成为DDoS攻击的肉鸡。
- 盗取用户敏感私密信息。
DOM型XSS(DOM-based XSS)
特点:
- 客户端执行:恶意脚本不是通过服务器响应传送到用户浏览器,而是通过浏览器自身的DOM(文档对象模型)操作来触发执行。
- 不依赖服务器:攻击过程完全在客户端进行,不涉及服务器端的任何改变。
- 隐蔽性强:由于攻击发生在客户端,服务器端的日志可能不会记录任何异常,使得检测和追踪变得更加困难。
危害:
- 窃取用户的敏感信息。
- 修改页面内容,误导用户。
- 进行其他恶意活动,如钓鱼攻击。
总结
3.XSS 的fuzz字典
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
这里选择第一个进行下载
4. XSS挑战靶场打靶(https://xss.tesla-space.com/)
js代码
<script>alert(0)</script>
第一关
寻找注入点,页面没有用户可输入的地方,查看url
把name传入的参数直接令为js代码,即可通关
第二关
F12 注意到提交内容为 input 标签的 value
<>都被编码成html的字符实体,接着往下看可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回的。但是问题是这里的js代码在标签属性值中,浏览器是无法执行的
因此构造 payload 时将 input 标签闭合之后在写 js 代码
第三关
直接插入我们的代码进行尝试
" οnclick="alert()
我们的 “ 被实体编码了, 要用其他方法进行注入,这里把"改成' ,这样点击输入框就可以触发了,即可通关
第四关
首先寻找注入点,输入<script>alert()</script>试试
发现我们输入的<>被过滤掉了,然后我们可以将我们的js代码编写到onclick属性中试试,通关了
第五关
尝试注入发现 script 和 on 替换为 scr_pt 和 o_n
尝试闭合input标签使用a标签伪协议
"><a href=javascript:alert(123)>123
成功通关
5. 总结浏览器解析机制
浏览器解析机制是浏览器将用户输入的URL或HTML文档转换成可视化网页的过程,这一过程涉及多个复杂步骤和组件的协同工作。
1. URL解析与缓存检查
- URL解析:浏览器首先解析输入的URL,识别出协议(如HTTP、HTTPS)、域名、端口号(默认HTTP为80,HTTPS为443)和路径等信息。
- 缓存检查:在发送网络请求前,浏览器会检查本地缓存(包括浏览器缓存、系统缓存、ISP缓存等)中是否已有对应资源的副本。如果找到且未过期,则直接从缓存中加载资源,以节省时间和带宽。
2. DNS域名解析
- 如果本地缓存中没有找到所需资源,浏览器会进行DNS查询,以获取域名对应的IP地址。DNS查询通常涉及递归查询过程,通过多个DNS服务器最终找到目标IP地址。
3. 建立TCP连接(HTTPS还需TLS握手)
- 浏览器使用TCP协议与服务器建立连接,以便传输数据。对于HTTPS协议,还需要进行TLS握手过程,以确保数据传输的安全性。
4. 发送HTTP请求
- 浏览器构建HTTP请求报文,并通过TCP连接发送给服务器。请求报文包括请求行、请求头和请求正文(如有)。
5. 服务器处理请求并返回响应
- 服务器接收请求后,根据请求的内容进行相应的处理(如查询数据库、执行脚本等),并构建HTTP响应报文返回给浏览器。响应报文包括状态码、响应头和响应体。
6. 浏览器解析响应内容
- 浏览器接收到响应后,开始解析响应内容,主要包括HTML文档的解析和CSS、JavaScript等资源的加载与解析。
HTML文档的解析
- 构建DOM树:浏览器将HTML文档中的标签转换为DOM(文档对象模型)节点,构建成DOM树。DOM树是页面结构的内存表示,用于后续的渲染和交互。
- 构建渲染树:浏览器根据CSS样式信息和DOM树构建渲染树(Render Tree)。渲染树只包含需要显示的节点和样式信息,用于指导页面的布局和绘制。
CSS和JavaScript的解析
- CSS解析:浏览器解析CSS文件或样式元素中的样式规则,并计算每个元素的最终样式。这些样式信息将用于构建渲染树。
- JavaScript解析:JavaScript脚本通常在DOM树构建完成后执行,用于修改DOM树或实现页面的交互功能。JavaScript的执行可能会阻塞DOM树的构建和渲染树的渲染。
7. 布局与绘制
- 布局(Reflow/Relayout):浏览器根据渲染树中的节点信息和样式信息计算每个节点的几何位置和大小,确定它们在页面上的布局。
- 绘制(Repaint):浏览器遍历渲染树,使用UI后端层将每个节点绘制到屏幕上。绘制过程包括填充颜色、绘制边框、文本等。
8. 渲染完成
- 当所有资源都加载完成且页面布局和绘制都完成后,用户就可以在浏览器中看到完整的网页了。
优化策略
为了减少回流(Reflow)和重绘(Repaint)的次数,提高页面渲染性能,可以采取以下优化策略:
- 合并多次DOM和样式的修改。
- 将需要多次重排的元素设置为绝对定位或固定定位。
- 在内存中多次操作节点后再添加到文档中。
- 缓存引起浏览器重排的属性值到变量中。
通过这些步骤和优化策略,浏览器能够高效地解析和渲染网页内容,为用户提供流畅的浏览体验。