zoukankan      html  css  js  c++  java
  • xss绕过过滤方法

    很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成&lt;以及&gt;,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了。这个貌似很彻底,因为一旦<>被转换掉,什么<script src=1.js></script>就会转换成“&lt;script src=1.js&gt;&lt;/script&gt;”,不能执行,因此,很多人认为只要用户的输入没有构成<>,就不能闭合前后的标签,其语句当然也不会有害。

    但是,万事总有可能,只要有一定的条件,我们就可以构造经过编码后的语句来进行XSS。

    1转义字符

    首先要认识一下“”,这个不是斜杠么。对的,斜杠在JAVASCRIPT有着特殊的用途,它是转义的符号。例如,我们把我们XSS语句转换成16进制,这里是<script>alert(‘poruin’)</script>,我用在CHA88那里淘过来的脚本工具来转换,如图:(工具地址:http://tools88.com/safe/xss.php)

    结果如下

    x3Cx73x63x72x69x70x74x3Ex61x6Cx65x72x74x28x27x70x6Fx72x75x69x6Ex27x29x3Cx2Fx73x63x72x69x70x74x3E

    这些就是经过编码后的字符,因为前面的斜杠缘故,所以后面的这些字符在JAVASCRIPT中都会被还原。

    我们再来看一下测试用的index.asp

    <form name=form>

    <input type=text name=text1>

    <input type=submit name=submit>

    </form>

    <%

    if request("text1")<> "" then

    a=replace(replace(request("text1"),"<","&lt;"),">","&gt;")

    end if

    %>

    <script>

    a="<%=a%>"

    document.write(a)

    </script>

    很简单的内容,接受用户的数据后过滤<>,再用JAVASCRIPT显示出来,直接输入XSS的测试语句看看,被转换掉了吧。再来输入经过16进制转换后的字符,这些字符都可以轻松的逃过过滤,完整进入代码中,经过JAVASCRIPT还原之后,正确解释出来,如图

    而不但是十六进制可以,八进制同样奏效,转换后代码如下:

    741631431621511601647614115414516216450471601571621651511564751745716314316215116016476

    二.UBB标签

    UBB标签是目前广泛运用到论坛,留言簿,以及其他网站系统的一种编码标签,类似[img]url[/img]这样的,用户在中间输入地址后即可,在发表的时候系统会自动改成<img src=”url”></img>。这个URL就是用户输入的图片地址,XSS攻击中,可以利用这个特点来达到无需用户输入<>就能执行由用户所输入的代码,我们只要在输入网址的地方输入:

    x"/**/onerror="alert('poruin')

    那么经过转换后就变成了

    <img src="x"/**/onerror="alert('poruin')"></img>

    在JS中空格可以用/**/转换,如图:

    三.JS还原函数

    JS中的编码还原函数最常用的就是String.fromCharCode了,这个函数用于ascii码的还原,一般来说,这个函数都要配合EVAL来使用才有效果。

    在跨站中,String.fromCharCode主要是使到一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为ASCII码,然后再用String.fromCharCode还原,因为大多数的过滤系统都不会把String.fromCharCode加以过滤,例如关键字alert被过滤掉,那就可以这么利用:

    <img src="x"/**/onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,112,111,114,117,105,110,39,41))"></img>

    执行效果如上图一样,没有关键字同样执行想要执行的代码。

  • 相关阅读:
    cPanel设置自定义404错误页
    jquery鼠标移入某区域屏蔽鼠标滚轮 滚动滚动条
    阻止子元素继承父元素事件(郁闷我一晚上的问题!)
    告别码农,成为真正的程序员
    PHP中数组合并的两种方法及区别介绍
    理解OAuth 2.0[摘]
    mysql之触发器trigger 详解
    ThinkPHP Where 条件中使用表达式
    linux下利用curl监控网页shell脚本
    XUtils 3 使用
  • 原文地址:https://www.cnblogs.com/bl8ck/p/9610301.html
Copyright © 2011-2022 走看看