冲破XSS字符数目限制履行肆意JS代码[网络技术]
本文“冲破XSS字符数目限制履行肆意JS代码[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Author:luoluo
[目录]
1. 综述
2. 冲破办法
2.1 操纵HTML上下文中其他可以掌握的数据
2.2 操纵URL中的数据
2.3 JS上下文的操纵
2.4 操纵浏览器特点在跨域的页面之间传送数据
2.4.1 document.referrer
2.4.2 剪切板clipboardData
2.4.3 窗口名window.name
2.5 以上的方法结合利用
3. 后记
4. 参考
1、综述
有些XSS漏洞由于字符数目有限制而没法有效的操纵,只能弹出一个对话框来YY,本文主
要谈论若何冲破字符数目的限制举行有效的操纵,这里对有效操纵的定义是可以不受限制执
行肆意JS.关于跨站师们来说,研究极度情形下XSS操纵的大概性是一种爱好;关于产品安全
人员来说,不受限制的操纵的大概是供应应开辟人员最有力的证据,要求他们器重并修补这些
极度情形下的XSS漏洞.
冲破的办法有很多种,但是冲破的思惟基本都一样,那就是履行可以掌握的不受限制的数
据.
2、冲破办法
2.1 操纵HTML上下文中其他可以掌握的数据
假如存在XSS漏洞的页面HTML上下文还有其他可以掌握的数据,那么可以通过JS得到该数
据通过eval大概document.write/innerHTML等方法履行该数据,从而到达冲破XSS字符数目限
制的目的,下面例子假定div元素的内部数据可以掌握,但是该数据已经被HTML编码过:
--code-------------------------------------------------------------------------
alert(/xss/);
-------------------------------------------------------------------------------
由于XSS点有字符数目限制,所以这里只能弹框,那么我们可以把XSS的Payload通过escape
编码后作为安全的数据,输出到可控的安全数据位置,然后在XSS点履行可控的安全数据:
--code-------------------------------------------------------------------------
eval(unescape(x.innerHTML));
-------------------------------------------------------------------------------
长度:28 + len(id)
由于x内部的数据没有字符数目的限制,那么从而可以到达履行肆意JS的目的.
2.2 操纵URL中的数据
假如页面里不存在上一节所说的可控HTML上下文数据怎么办?有些数据是我们无条件可
控的,第一个想到的就是URL,通过在URL的尾部参数构造要履行的代码,然后在XSS点通过
document.URL/location.href等方法得到代码数据履行,这里假定代码从第80个字符开始到
最后:
--code-------------------------------------------------------------------------
http://www.xssedsite.com/xssed.php?x=1....&alert(document.cookie)
eval(document.URL.substr(80));
-------------------------------------------------------------------------------
长度:30
--code-------------------------------------------------------------------------
eval(location.href.substr(80));
-------------------------------------------------------------------------------
长度:31
上面两个例子比较,前一个例子更短,那么有没有办法更短呢?通过查阅JavaScript手册
的String的办法可以发现,切割字符串有一个更短的函数slice,5个字符比substr还要短一个
字符:
--code-------------------------------------------------------------------------
eval(document.URL.slice(80));
-------------------------------------------------------------------------------
长度:29
--code-------------------------------------------------------------------------
eval(location.href.slice(80));
-------------------------------------------------------------------------------
长度:30
那么还有没有办法更短呢?答案是YES,查阅一下MSND里的location对象的参考你会发现
有个hash成员,获得#之后的数据,那么我们可以把要履行的代码放在#背面,然后通过hash获
得代码履行,由于得到的数据是#开首的,所以只需求slice一个字符便可以拿到代码:
--code-------------------------------------------------------------------------
http://www.xssedsite.com/xssed.php?x=1....#alert(document.cookie)
eval(location.hash.slice(1));
-------------------------------------------------------------------------------
长度:29
这样比上面的例子又少了一个字符.那么还可以更短么?
2.3 JS上下文的操纵
为什么我如此痛楚?那是因为JS和DHTML的办法名和属性名太长!瞧瞧这些“糟糕”的名字:
以上是“冲破XSS字符数目限制履行肆意JS代码[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |