第四天作业

1. 总结反射型、存储型、DOM型XSS特点和区别

反射型xss也称作非持久型、参数型跨站脚本。

主要用于将恶意脚本附加到URL地址的参数中。

产生层面:前端

漏洞特征:一次性的、前端执行、不会储存在后端数据库

危害等级:中

反射型XSS形成的一个过程

反射型 XSS 的攻击步骤:

攻击者构造出特殊的 URL,其中包含恶意代码。

用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。

用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。

恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

储存型(Stored Cross-site Scripting)

此类XSS不需要用户单击特定URL就能执行跨站脚本。

攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中。

当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

产生层面:后端

漏洞特征:持久性的、前端执行、储存在后端数据库

危害等级:高

存储型 XSS 常出现在网站的留言版、评论、博客日志等交互处

存储型XSS数据交互过程:

用户输入数据->后端执行php代码-> 存入数据库某张表 ->返回数据给php页面->回显前端

 函数:

die()//函数输出一条消息,并退出当前脚本

trim()//函数从字符串的两端删除空白字符和其他预定义字符

stripslashes()//删除反斜杠

mysql_real_escape_string()//转义 SQL 语句中使用的字符串中的特殊字符

mysql_query(query) //mysql_query() 函数执行一条 MySQL 查询

mysql_error()//返回上一个 MySQL 操作产生的文本错误信息

存储型 XSS 的攻击步骤:

攻击者将恶意代码提交到目标网站的数据库中。

用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。

用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。

恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指

定的操作。

这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等

DOM型XSS

产生层面:前端、特殊的反射型XSS

漏洞特征:一次性的、前端执行、不会储存在后端数据库、程序执行不依赖

于服务器端的数据

web server不参与,仅仅涉及到浏览器的XSS。

危害等级:中

DOM型XSS原理:

DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析。

用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的过滤,应用程序就可能受到基于DOM的XSS攻击。

什么是DOM(Document Object Model):

DOM是JS操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个JS对象,从而可以用脚本进行各种操作(比如增删内容)

DOM节点:

元素节点:在“购物清单”例子中,<body>、<p>、<ul>之类的元素在文档中的布局形成了文档的结构,它们即是元素节点。

文本节点:文档通常会包含一些内容,这些内容多数由文本提供,如前面的例子中,<p>包含着文本“欢迎购买” ,它就是一个文本节点。

属性节点:元素或多或少都有一些属性,属性用于对元素做出更具体的描述

DOM型原理:

XSS原理客户端的脚本程序可以通过DOM动态地检查和修改页面内容。

程序执行不依赖于服务器端的数据,从客户端获得DOM中的数据并在本地执行。

浏览器用户可以操纵DOM中的一些对象,例如URL、location等。

用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的过滤和消毒,应用程序就可能受到基于DOM的XSS攻击。

三种类型的XSS区别:

与之前两类XSS漏洞不同的是:

漏洞发生原因跟服务器解析无关,纯粹是JS代码读取了URL内容导致。

dom-xss取决于输出位置,并不取决于输出环境

因此检测JS代码中可能触发DOM型XSS的属性如下:

1、document.referer 属性

2、window.name 属性

3、location 属性

4、innerHTML 属性

5、documen.write 属性

2. 上网搜索一份XSS 的fuzz字典或字典生成工具(可选)

GitHub - oldboot/FuzzDicts: FuzzDicts 字典,一个就够了。

https://github.com/oldboot/FuzzDicts

3. 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。(https://xss.tesla-space.com/)

第一关:

1)

2)在网页右键选择查看网页源代码

3)可见JavaScript脚本把alert弹窗设置为了下一关的入口,绑定给了test。

我们修改网页url把test替换为<script>alert()</script>

第二关:

1)


2)在网页右键选择查看网页源代码

3)可见test被绑定给了页面的输入框,为了实现我们的JavaScript代码就必须先闭合test外的两个双引号“”和input的两个书名号><

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

第三关:

1)

2)在网页右键选择查看网页源代码

3)发现不通过,观察源代码可见我们输入的书名号被htmlspecialchars函数改成了文本的形式,但是输入的单引号‘没有被修改。

只用单引号,利用onmouseover函数构建一个新的测试代码

' οnmοuseοver=javascript:alert() '

第四关:

1)

2)在网页右键选择查看网页源代码

3)可见中间的try harder!为输入框内容,会被h2打印出来。使用了双引号

我们构建与第三关所用类似的代码

" οnmοuseοver=javascript:alert() "

第五关:

1)

2)在网页右键选择查看网页源代码

3)查看源代码可见我们写入的onmouseover函数被添加一个下划线屏蔽掉了。

既然不准我们使用onmouseover函数,我们就换一种方法插入我们要输入的代码。

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

出现了我们输入的a标签xss,点击就可以通过此关卡。

第六关:

1)

2)查看源码

3)尝试之前使用的方法发现失败

3)只能另外再用别的方法解题,尝试利用大小写解开。

"> <sCript>alert()</sCript> <"

第七关:
1)

2)在网页右键选择查看网页源代码

3)把在第六关所用的测试步骤简化为一条代码

" OnMouseOver <sCriPt> <a hReF=javascript:alert()>

4)输出后的结果在网页里变成了

"" mouseover <> <a =java:alert()>"

5)用双写法来应对。原理是输入oonnmouseover,系统检测到on关键词删去后,剩下的字符组成onmouseover生效。

" oonnmouseover=javascrscriptipt:alert() "

4. 总结浏览器解析机制,

浏览器解析机制是指浏览器如何将用户输入的网页地址(URL)解析为实际可显示的网页内容的过程。这个过程涉及多个步骤,从用户输入URL开始,到浏览器显示网页结束。以下是浏览器解析的主要步骤:

1. URL 解析

用户输入:当用户在浏览器地址栏中输入一个URL时,浏览器首先会解析这个URL,确定要访问的资源位置。URL通常包括协议(如http://或https://)、域名(如www.example.com)、路径、查询参数等。

DNS 解析:浏览器将域名发送给DNS服务器,DNS服务器返回该域名对应的IP地址,浏览器使用这个IP地址与目标服务器建立连接。

2. 建立连接

TCP/IP 连接:浏览器通过TCP/IP协议与目标服务器建立连接。如果使用HTTPS协议,还会执行TLS/SSL握手以确保连接安全。

请求资源:浏览器向服务器发送一个HTTP或HTTPS请求,要求获取网页资源(如HTML文件、CSS样式表、JavaScript文件等)。

3. 接收和处理响应

服务器响应:服务器处理浏览器的请求,并返回相应的内容,如HTML文档、图片、视频、CSS、JavaScript等。响应还可能包含HTTP状态码,用于指示请求的结果(如200 OK,404 Not Found)。

内容解码:如果服务器响应是经过压缩或编码的(如Gzip压缩),浏览器会先对其进行解码。

4. 解析与渲染

HTML 解析:浏览器开始解析接收到的HTML文档,构建DOM(文档对象模型)树结构。HTML文档中的标签和元素会被逐一解析,并加入到DOM树中。

CSS 解析:同时,浏览器还会解析与HTML相关联的CSS文件,构建CSSOM(CSS对象模型)树,以确定各个元素的样式。

JavaScript 执行:在解析HTML的过程中,如果遇到JavaScript代码或引用的外部JavaScript文件,浏览器会暂停HTML解析,执行JavaScript代码。JavaScript可能会动态地修改DOM和CSSOM树。

布局(Layout):浏览器根据构建的DOM树和CSSOM树来计算每个元素在页面上的位置和大小,这个过程称为布局。

绘制(Painting):布局完成后,浏览器将页面内容绘制到屏幕上,包括文本、图片、背景等。

复合(Compositing):最终,浏览器将各个层(Layer)组合成最终的页面,并显示给用户。

5. 优化与更新

渲染优化:现代浏览器会对渲染过程进行优化,例如减少重绘(Repaint)和重排(Reflow)次数,以提高页面加载和交互的性能。

事件处理与交互:浏览器会持续监听用户的交互(如点击、输入等)和异步事件(如XHR、Fetch等),并实时更新页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值