Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1202858
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-27 10:46:11

老外也挺热衷于炒作概念,一有点什么技巧,就喜欢自己冠个名字。

出于对作者的尊重,我还是保留这个名字吧

原文参考:

http://www.webappsec.org/lists/websecurity/archive/2010-01/msg00150.html

乍一看,好像和以前 css history hack 差不多,其实原理还是不一样的。

浏览器的 history 对象是比较特别的一个东西,与浏览历史不同,这个对象不是保存在本地的那个,也没那么多内容。

history
对象是浏览器在生命周期中,比如tab页,访问的历史记录,用于提供"前进""后退"等操作。

firebug里可以看到这个对象有以下几个属性:

history 对象里保存的url是一个list,这个list出于同源策略(SOP)的原因是不可读的。

但是 history.length 却是可读的,XSHM就是利用 history.length 可读,同时一些url发生变化时对length长度改变的特点来完成信息刺探的。

具体如下:
Browser History  is a global  list of pages  that have been visited using a browser tab. 
By pressing the back and forward buttons of a browser, a user jumps through her browser 
history.  If  a  page  contains  IFRAME,  any  location  changes  inside  IFRAME  are  also 
recorded  in  the browser's  history. Consequently, opening  the  same URL multiple  times 
will insert only one entry into the history list.  
If a user opens Page A and this page uses 
the HTTP Redirect directive to open Page B, only Page B will be stored in the browser‟s 
history. 

注意最后加粗的这句,如果发生了重定向,那么history对象只会增加重定向后指向的最终页面相同的页面不会重复进入history对象的list

利用这个特性,就可以实施许多跨域的刺探了

Algorithm: 
1.  Create IFRAME with src=Page B 
2.  Remember the current value of history.length  
3.  Change src of IFRAME to Page A 
4.  If the value of history.length is the same– then the CONDITION is TRUE 

比如作者的例子,检测用户是否有登录:


点击(此处)折叠或打开

  1. Appendix 1
  2. Login Detection Script for Internet Explorer
  3. Cross-Site Login Detection
  • 利用类似的方法,作者举了很多实际应用的例子,在某些情况下,配合其他漏洞使用,还是有一定作用的。

    对此感兴趣的朋友可以仔细读读作者的paper

    阅读(2956) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~