5.1 - Web漏洞 - XSS漏洞详解

news2024/11/16 21:24:23

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

XSS漏洞

  • 一、什么是XSS?
  • 二、XSS概述
  • 三、靶场练习
  • 四、XSS使用步骤
  • 五、XSS攻击类型
  • 六、XSS流量特征
  • 七、XSS的危害
  • 八、XSS的防御
    • 1、实体转换
    • 2、字符过滤

一、什么是XSS?

首先,我们通过一个案例来认识一下XSS:

1)下面这几行PHP代码,功能很简单:获取「地址栏」的参数,然后打印出来。

在这里插入图片描述

2)我们访问这个页面,提交「value参数」,页面就会显示出我们提交的内容:

在这里插入图片描述
3)如果我们提交JS代码,页面就会执行我们提交的代码,比如下面这样「弹窗」,就是触发了XSS漏洞:

在这里插入图片描述

看到这里,你已经对XSS有了一个基本的了解,接下来,我们正式认识一下XSS漏洞。


二、XSS概述

XSS(Cross Site Scripting)也叫跨站脚本攻击。利用浏览器的「解析漏洞」,在前端页面执行JS代码。

原理:尖括号<>是HTML标签的语法,网页中插入的包含尖括号<>的内容都会被浏览器当做HTML标签来解析,如果插入的标签中包含JavaScript代码,浏览器也会执行它。

XSS的核心是「参数可控」,就是用户可以控制提交的参数内容,在提交的内容中构造出前端可以执行的JavaScript代码。

弹窗是XSS最基础的一种「触发形式」,常用来验证XSS漏洞是否存在。我们可以通过修改提交的代码,执行其他操作,比如获取cookie,记录键盘等。

由于XSS执行的是JS代码,所以它主要是作用在「前端浏览器」,受害的是网站用户而不是服务器本身。


三、靶场练习

接下来,我们通过XSS-Game靶场,来学习一下XSS的使用技巧和绕过技巧。

XSS使用的第一步是寻找「输入和输出点」,也就是用户从什么地方输入内容?输入的内容会输出到页面的什么位置?

以第一关为例,用户从地址栏输入名字,输入的名字会显示在欢迎用户的位置,那输入和输出点就是下图中标记的地方:

在这里插入图片描述

找到输入点以后,第二步就是查看「网页源代码」,分析输出点的代码有没有被「过滤」,如果内容被输出到属性当中,还要考虑怎么去「闭合」

这里我输入了一个基础符号,从源代码可以看到,内容没有被过滤,而且是输出到标签里面,也不用考虑闭合。

在这里插入图片描述

这里要提示一点:右键检查并不能有效的查看过滤情况,一定要用网页源代码。

分析完输出点,第三步就可以提交JS代码来验证XSS是否存在,最常用的验证方式就是用 alert() 进行「弹窗测试」,如果页面弹窗,就证明存在XSS。

在这里插入图片描述
确定注入点存在后,第四步就是利用了,这里我们的目的是学习,就不给大家演示了。

XSS-Game 靶场的其他关卡可以看我的另一篇文章: XSS-Game靶场通关教程

初学者建议过前十关或前十三关,做完靶场后,我们总结一下XSS的使用步骤。


四、XSS使用步骤

XSS使用的关键在于「输入和输出」,输入是指用户可以提交代码的功能点,输出是用户提交的内容被输出到了页面的什么位置。

1)寻找输入点和输出位置
2)打开网页源代码,分析输出位置的代码,构造闭合脚本。
3)利用altet(1)进行弹窗测试,确认XSS注入点是否存在.
4)利用注入点完成各种操作。


五、XSS攻击类型

根据XSS代码插入的位置,可以将XSS分为三种类型:反射型、存储型、DOM型。

1)「反射型XSS」通过url提交XSS代码,服务器响应回来的代码被插入到HTML页面的标签或属性中,这种类型通常是一次性的,也就是非持久型XSS。

反射型XSS参考练习靶场

2)「存储型XSS」会将XSS代码写入后台的数据库,服务器从数据库中查询数据再展示到页面中,这种类型可以一直触发,也叫持久型XSS。

存储型XSS参考练习靶场

3)「DOM型XSS」会将XSS代码插入到HTML页面的DOM树里面,通常不与服务器交互。

DOM型XSS参考练习靶场

提示:DOM树从网页的根节点开始,逐级向下表示网页的结构。根节点对应的是HTML文档的标签,下面是标签,然后是标签和标签,接着是一些标记,最后是文本节点。这些节点可以相互包含和嵌套,形成一个树状结构。

六、XSS流量特征

XSS的payload通常会包含以下特征:

  1. <script></script>标签
  2. 标签的一些事件,比如:onclick、ondbclick、onload、onchange、onmouseover、onerror、onblur等。
  3. 标签的超链接属性,比如:href、src。

七、XSS的危害

XSS控制浏览器进行操作,受限于浏览器的权限,主要通过JS代码来发挥作用,常见的危害有以下几种:

  1. 获取cookie,比如获取管理员Cookie,进行越权。
  2. 钓鱼网站,比如写一个假的登录页面,获取用户的登录信息,再跳转到真实的网站。
  3. DDOS,比如在网站植入JS代码,向指定网站发送请求,当用户数量大了以后,就能实现DDOS。
  4. 网页挂马、挖矿等
  5. 删除、修改文章等数据
  6. 劫持用户Web行为,渗透内网
  7. Web2.0蠕虫
  8. 蠕虫式DDOS
  9. 蠕虫式挂马、刷广告、刷流量

八、XSS的防御

XSS的防御手段主要有两种:实体转换和字符过滤

1、实体转换

使用htmlspecialchars()函数把内容中的预定义字符转换成HTML实体,转换后的字符会被当做转译字符输出在页面,而不是被当成代码执行。

预定义的字符有5个: ><'"&

我们修改一下文章开头的代码,打印之前先转译内容,会发现页面不再弹窗,<> 被转换了 &lt;&gt;

在这里插入图片描述

2、字符过滤

转换成HTML实体后,还是存在绕过的可能性。

htmlspecialchars() 默认只过滤双引号,可以用单引号绕过。

即使过滤了单引号, htmlspecialchars() 也只能过滤 ><'"& 这5个预定义字符,JavaScript:alert(1) 这种伪协议仍然可以绕过,因此,转换内容后,还要配合正则表达式过滤更多的字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-table动态表头数据渲染

desc&#xff1a;el-table的数据是后端动态返回的&#xff0c;包括表头的情况下如何进行渲染 // 第一页的数据 {"code": 1,"message": "查询成功","data": {"current": 1,"size": 10,"total": 41,"…

企业如何通过CRM系统做好客户管理?

企业如何通过CRM系统做好客户管理&#xff1f; CRM客户管理作为一种综合性的管理思想&#xff0c;可以帮助我们更好地了解客户需求和行为&#xff0c;制定更加精准的销售和服务策略&#xff0c;提高客户满意度和忠诚度&#xff0c;从而实现可持续发展。 接下来将给大家详细介…

SQL——事务

&#x1f388; 什么是事务 &#x1f4a7; 概念 事务是用于保证数据的一致性,它由一组相关的DML&#xff08;增、删、改&#xff09;语句&#xff0c;该组的DML语句要么全部成功&#xff0c;要么全部失败。使用事务可以确保数据库的一致性和完整性&#xff0c;避免数据出现异常…

“微商城”项目(5登录和注册)

1.我的信息 在pages\User.vue文件中编写HTML结构代码&#xff0c;示例代码如下。 <template><div class"member"><div class"header-con"><router-link :to"{ name: login }" class"mui-navigate-right">&l…

段 寄 存 器-汇编复习(5)

图解演示8086CPU CS执行过程和逻辑 段 寄 存 器 8086CPU 在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。这里,需要看一下,是什么部件提供段地址。段地址在 8086CPU 的段寄存器中存放。8086CPU 有 4 个段存器: CS、DS、SS、ES。当80…

力扣刷题笔记——动态规划

动态规划基础 简称DP&#xff0c;如果某⼀问题有很多重叠⼦问题&#xff0c;使⽤动态规划是最有效的。 动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的 1. 确定dp 数组&#xff08; dp table &#xff09;以及下标的含义 2. 确定递推公式 3. dp 数组如何初始化 4. 确定遍…

深度学习的分割方法

FCN&#xff1a;基于深度学习的语义分割模型 语义分割的定义&#xff1a;对像素进行精细化的分类。 用深度学习来解决语义分割&#xff0c;所面临的主要问题是&#xff1a; 早期的深度模型用于分类&#xff0c;输出一维向量&#xff0c;无法分割 深度模型不够精细 动机 如…

谈谈互联网广告拍卖机制的发展:从GSP到DeepAuction

广告作为各互联网公司收入的大头&#xff0c;其拍卖机制设计因此也是关乎营收最为核心的方面。所谓的广告拍卖机制设计是指如何将有限的广告位分配给合适的广告&#xff0c;从而达到客户、平台以及用户三方的价值最优。 当前的广告拍卖被建模为暗拍的形式&#xff0c;即N个广告…

ROS:launch启动文件的使用方法

目录 一、launch文件结构二、launch文件语法2.1根元素2.2参数设置2.3重映射、嵌套 三、示例3.1示例一3.2示例二3.3示例三3.4示例四 一、launch文件结构 由XML语言写的&#xff0c;可实现多个节点的配置和启动。 不再需要打开多个终端用多个rosrun命令来启动不同的节点了 可自动…

Swift 周报 第三十期

文章目录 前言新闻和社区App、App 内购买项目和订阅即将实行税率调整码出新宇宙Apple 公证服务更新Apple 设计大奖入围名单公布 提案通过的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十一期&#xff0c;每个模块已初步成型。各位读者…

C++进阶 —— C++11新增容器

目录 一&#xff0c;array 二&#xff0c;forward_list 三&#xff0c;unordered unordered_set unordered_multiset unordered_map unordered_multimap 静态数组array、forward_list、unordered系列&#xff1b; 一&#xff0c;array array是固定大小尺寸的序列容器&am…

2023年6月东莞/惠州/深圳CPDA数据分析师认证招生

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

实战:Spring Cloud Stream消息驱动框架整合rabbitMq

文章目录 前言Spring Cloud Stream简析Spring Cloud Stream与rabbitmq整合1、添加pom依赖2、application.yml增加mq配置3、定义输入输出信道4、使用输入输出信道收发消息5、模拟正常消息消费6、模拟异常消息 前言 相信很多同学都开发过WEB服务&#xff0c;在WEB服务的开发中一…

Web端3D模型轻量化工具如何实现建筑行业“数字化”建设?

随着数字化技术的飞速发展&#xff0c;建筑行业也在不断寻找新的技术手段来提供高产能和建筑质量。其中&#xff0c;Web端3D模型轻量化工具HOOPS Communicator SDK在建筑行业中的应用不断地得到了市场的广泛注意和应用。本文将深入探讨HOOPS Communicator在建筑行业中的应用及其…

转动的车轮-第14届蓝桥杯国赛Scratch真题初中级组第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第144讲。 转动的车轮&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第2题…

Python数据攻略-DataFrame的数据操作

大家好&#xff0c;我是Mr数据杨&#xff0c;今天我们就来谈谈Python中的数据访问和修改。 首先&#xff0c;你们一定都听过《三国演义》吧&#xff0c;里面的人物和事情其实就像我们Python中的数据。比如曹操就像我们的数据元素&#xff0c;他的性格特点、军事才能等就像我们…

5年开发经验,看完这份37W字Java高性能架构,终于拿到架构师薪资

其实现在很多的开发人员并不能解决从架构的角度全方位地了解在Java编程过程中各阶段会出现的典型问题&#xff0c;更没办法深入到底层原理了解问题出现的原因&#xff01; 且随着当下面试越来越深入到底层&#xff0c;如果大家对于底层的原理不了解的话&#xff0c;是很难做出…

JDK11+mybatis-plus+shardingsphere分库分表

1、引入jar dynamic-datasource-spring-boot-starter&#xff1a;2.5.6 sharding-jdbc-spring-boot-starter&#xff1a;4.1.1 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId>&…

微调样本质量胜于数量 LIMA: Less Is More for Alignment

1、总体介绍 大型语言模型的训练分为两个阶段&#xff1a;&#xff08;1&#xff09;从原始文本中进行无监督的预训练&#xff0c;以学习通用的表征&#xff1b;&#xff08;2&#xff09;大规模的指令学习和强化学习&#xff0c;以更好地适应最终任务和用户的偏好。 作者通过…