一、前语
本文提出了一种清晰界说的办法,即通过勘探假定出检测歹意字符串的规矩并编写Payload,来绕过跨站脚本进犯(XSS)的安全防备机制。咱们提出的办法共包含三个阶段:确认Payload结构、勘探以及混杂。
确认指定上下文的各种Payload结构,为咱们供给了更佳的测验思路。勘探的下一个阶段,便是针对方针的安全机制测验各种字符串,并剖析方针的呼应,然后依据剖析成果做出假定。
最终,假如需求,能够对Payload进行含糊处理和其他调整。本文假定各位读者现已把握XSS、HTML和JavaScript的相关常识。在整篇文章中,运用{string}来表明Payload计划的组成部分,运用{?string}表明可选的组成部分。首要字符(Primary Character)是指有必要包含在Payload中的字符。主张在运用URL不安全字符(例如:+和&)之前,对其先进行URL编码。在勘探时,应该运用无害的字符串,而不是{javascript}。
二、简介
跨站脚本缝隙(XSS)是最常见的Web应用程序缝隙之一。能够通过整理用户输入、完结依据上下文的转义后输出、正确运用文档目标模型(DOM)、施行恰当的跨源资源共享(CORS)战略和其他安全实践,来完结对该类型缝隙的防备。虽然这些预防措施现已成为揭露的常识,但许多安排还会运用Web应用程序防火墙(WAF)或自界说过滤器,作为防备XSS的双保险,以维护Web应用程序免受人为缝隙或新发现的进犯前言所引进的缝隙的运用。虽然WAF的各大厂商仍在测验引进机器学习,但正则表达式仍然是现在最常用的检测歹意字符串的办法。在本文中,咱们将评论一些与常见WAF所运用正则表达式不匹配的XSS Payload结构办法。
三、HTML上下文
当用户输入反射在网页的HTML代码中时,咱们称其在HTML上下文中。HTML上下文能够进一步依据反射的方位,划分红子上下文。
· 内部标签:
· 外部标签:You entered $input
3.1 外部标签
针对这一上下文,首要的字符便是
·
·
· x
·
·
·
假如安全机制不答应此类勘探机制,那么就不能完结绕过。由于误报率较高,因而不该发起在WAF上选用这种限制性规矩。
假如上述任何勘探未被阻挠,那么能够运用多种Payload计划来结构Payload。
3.1.1 Payload计划1
,//,Space,Tab,LF}
在找到{tag}的恰当值后,下一步是猜想正则表达式用于匹配标签和Event Handler之间的过滤器。能够运用下面的勘探办法:
·
·
·
·
·
· – 假如失利,正则表达式为[snr+]+
·
该组成部分(即Event Handler)是Payload中最要害的部分之一。它一般与onw+这样的正则表达式,或on(load|click|error|show)这样的黑名单相匹配。之一个正则表达式是十分严厉的,无法被绕过。但第二种黑名单类型办法一般能够凭借比较不常用的Event Handler完结绕过,这些Event Handler或许不在黑名单之中。咱们能够通过两个简略的办法来辨认所运用的办法类型:
·
·
假如正则表达式是onw+,那么就无法绕过,由于一切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
,//,Space,Tab,LF}
为了测验过滤器与完毕字符串,咱们选用了与上一种计划相似的办法。有必要留意的是,?能够在URL的结尾运用,来代替完毕标签。当读取到?字符时,都会将其视为URL的一部分,直至遇到下一个>。假如运用标签,很或许会被大多数安全规矩检测到。
运用标签的Payload,能够运用相似的Payload计划来制造:
,//,Space,Tab,LF}
3.1.3 Payload计划3
这种Payload计划有两种办法,分别是原型和通过混杂后的变体。
原型一般与办法相匹配,例如:href[s]{0,}=[s]{0,}javascript:,其结构如下:
,//,Space,Tab,LF}
通过混杂后的变体具有以下结构:
,//,Space,Tab,LF}
这两个变体之间的明显差异是{special}组成部分以及{quote}。{special}指的是字符串JavaScript的混杂后版别,能够运用换行符和水平制表符对其进行混杂,如下所示:
j%0aAv%0dasCr%09ipt:
J%0aa%0av%0aa%0as%0ac%0ar%0ai%0ap%0aT%0a:
J%0aa%0dv%09a%0as%0dc%09r%0ai%0dp%09T%0d%0a:
在某些状况下,数字字符编码也可用于躲避检测。能够运用十进制或十六进制。
Javascript:
javascript:
明显,假如有需求,这两种混杂技能能够一同运用。[1][2][3]黑客接单网