Hbuilder中如何快速输入注释标签_探寻如何绕过WAF的XSS检测机制

baa9c731eae7a9cb5c4d6322eccd0f4b.gif

e843d413fd5fd838b2ddd0d9e59ed1ee.png一、前言

本文提出了一种明确定义的方法,即通过探测假设出检测恶意字符串的规则并编写Payload,来绕过跨站脚本攻击(XSS)的安全防范机制。我们提出的方法共包括三个阶段:确定Payload结构、探测以及混淆。

确定指定上下文的各种Payload结构,为我们提供了最佳的测试思路。探测的下一个阶段,就是针对目标的安全机制测试各种字符串,并分析目标的响应,从而根据分析结果做出假设。

最后,如果需要,可以对Payload进行模糊处理和其他调整。
本文假设各位读者已经掌握XSS、HTML和JavaScript的相关知识。在整篇文章中,使用{string}来表示Payload方案的组成部分,使用{?string}表示可选的组成部分。主要字符(Primary Character)是指必须包含在Payload中的字符。建议在使用URL不安全字符(例如:+和&)之前,对其先进行URL编码。在探测时,应该使用无害的字符串,而不是{javascript}。

e843d413fd5fd838b2ddd0d9e59ed1ee.png二、简介

跨站脚本漏洞(XSS)是最常见的Web应用程序漏洞之一。可以通过清理用户输入、实现基于上下文的转义后输出、正确使用文档对象模型(DOM)、实施适当的跨源资源共享(CORS)策略和其他安全实践,来实现对该类型漏洞的防范。尽管这些预防措施已经成为公开的知识,但很多组织还会使用Web应用程序防火墙(WAF)或自定义过滤器,作为防范XSS的双保险,以保护Web应用程序免受人为漏洞或新发现的攻击媒介所引入的漏洞的利用。尽管WAF的各大厂商仍在尝试引入机器学习,但正则表达式仍然是目前最常用的检测恶意字符串的方法。在本文中,我们将探讨一些与常见WAF所使用正则表达式不匹配的XSS Payload构造方法。

e843d413fd5fd838b2ddd0d9e59ed1ee.png三、HTML上下文

当用户输入反射在网页的HTML代码中时,我们称其在HTML上下文中。HTML上下文可以进一步根据反射的位置,划分成子上下文。

· 内部标签:

· 外部标签:You entered $input

3.1 外部标签

针对这一上下文,主要的字符就是

· 

· 

· x

· 

· 

· 

如果安全机制不允许此类探测机制,那么就不能实现绕过。由于误报率较高,因此不应提倡在WAF上采用这种限制性规则。

如果上述任何探测未被阻止,那么可以使用多种Payload方案来构造Payload。

3.1.1 Payload方案1

,//,Space,Tab,LF}

在找到{tag}的适当值后,下一步是猜测正则表达式用于匹配标签和Event Handler之间的过滤器。可以使用下面的探测方式:

· 

· 

· 

· 

· 

·  – 如果失败,正则表达式为[\s\n\r+]+

· 

该组成部分(即Event Handler)是Payload中最关键的部分之一。它通常与on\w+这样的正则表达式,或on(load|click|error|show)这样的黑名单相匹配。第一个正则表达式是非常严格的,无法被绕过。但第二种黑名单类型模式通常可以借助比较不常用的Event Handler实现绕过,这些Event Handler可能不在黑名单之中。我们可以通过两个简单的方法来识别所使用的方法类型:

· 

· 

如果正则表达式是on\w+,那么就无法绕过,因为所有Event Handler都以on开头。面对这种情况,我们应该继续下一个Payload方案。如果正则表达式遵循黑名单的方法,则需要查找未列入黑名单的Event Handler。如果所有Event Handler都被列入黑名单之中,则应继续执行下一个Payload方案。

根据我对WAF的研究经验,我发现下列几个Event Handler通常会在黑名单中缺席:

onauxclick

ondblclick

oncontextmenu

onmouseleave

ontouchcancel

与=相关的过滤器测试过程,类似于前面所讨论的过程,并且仅当安全机制阻止

下一个组成部分是要执行的JavaScript代码。这是Payload中的活动部分,但不需要对用于匹配它的正则表达式进行假设,因为JavaScript代码可以是任意代码,因此无法预先定义出它的固定模式并进行匹配。

此时,Payload的所有组成部分都已经完成,只需要关闭Payload。这可以通过以下方式来完成:

应该注意的是,HTML规范中允许这样的形式,这意味着,只要有一个HTML标签,例如“”就是有效的。HTML标签的这一属性,允许攻击者可以通过上述方式实现对HTML标签的注入。

3.1.2 Payload方案2

e843d413fd5fd838b2ddd0d9e59ed1ee.png五、在实际场景中实现WAF绕过

在我们的研究过程中,共绕过了8个WAF。我们遵循负责任的漏洞披露原则,及时将漏洞通知了厂商,因此一些绕过方法可能已经被修复。下面是绕过的WAF、Payload以及绕过技术列表。

· WAF名称:Cloudflare

· Payload:click

· 绕过技术:Non-white Space Filler

· WAF名称:Wordfence

· Payload:click

· 绕过技术:数字字符编码

· WAF名称:Barracuda

· Payload:click

· 绕过技术:数字字符编码

· WAF名称:Akamai

· Payload:click

· 绕过技术:借助黑名单和函数调用混淆利用Event Handler

· WAF名称:Comodo

· Payload:click

· 绕过技术:借助黑名单和函数调用混淆利用Event Handler

· WAF名称:F5

· Payload:click

· 绕过技术:借助黑名单和函数调用混淆利用Event Handler

· WAF名称:ModSecurity

· Payload:

· 绕过技术:借助黑名单利用标签(或Event Handler?)

· WAF名称:dotdefender

· Payload:

· 绕过技术:借助黑名单、函数调用混淆和备用标签结尾利用标签

e843d413fd5fd838b2ddd0d9e59ed1ee.png六、参考

[1] HTML规范(https://www.w3.org/TR/html52/)

[2] 数字字符引用(https://en.wikipedia.org/wiki/Numeric_character_reference)

f0b11a01a33011ea37924c8dc0699329.png

e92cbdce03bc820902faf82f4da2ba6b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值