当前位置:七道奇文章资讯安全技术网络技术
日期:2010-02-28 04:33:00  来源:本站整理

冲破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的办法名和属性名太长!瞧瞧这些“糟糕”的名字:

[1] [2] [3]  下一页


  以上是“冲破XSS字符数目限制履行肆意JS代码[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 冲破XSS字符数目限制履行肆意JS代码
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .