引言

在 Web 应用的安全体系中,浏览器实施的“同源策略”(Same-Origin Policy)是保障用户数据安全的核心基石。它如同一道无形的防火墙,严格限制不同源的文档或脚本之间进行交互,有效防止了恶意的跨站数据窃取。然而,当应用逻辑存在缺陷,未能对请求的来源和意图进行严格校验时,攻击者便能利用用户已登录的身份,诱导其浏览器在不知情的情况下发起非本意的操作,这就是“跨站请求伪造”(CSRF)攻击。

这篇文章将深入剖析 CSRF 漏洞的完整攻击链。我将从同源策略的基本原理讲起,揭示 CSRF 是如何绕过这一安全机制的。随后,将通过一系列模拟靶场的实战演练,详细演示两种最常见的攻击手法:

  1. GET 型 CSRF:利用简单的 URL 链接即可触发恶意操作。
  2. POST 型 CSRF:通过构造恶意 HTML 页面,利用 Burp Suite 等专业工具生成 Payload,执行更复杂的请求。

无论是篡改用户个人资料,还是进行恶意的资金转账,本文将一步步拆解攻击者的视角与操作步骤,帮助大家理解 CSRF 的危害、成因及防御要点。


同源策略

同源策略介绍

同源策略:浏览器的核心安全规则,用来阻止不同网站之间非法互相访问数据,防止跨站窃取信息、CSRF、XSS 等攻击。

同源策略比较

同源策略:需要对比两者中的【域名】【端口】【协议】三者完全相同才可以认为是同源的。

比较下方表格中哪个链接与此链接同源 http://www.example.com/index/index.php

是否同源 原因
http://test.example.com/admin/index.php 域名不同
https://www.example.com/admin/index.php 协议不同
http://www.example.com:8080/admin/index.php 端口不同
http://www.example.com/test/index.php 三者相同

跨站请求伪造

漏洞介绍

跨站请求伪造(Cross Site Request Forgery) 是一种通过挟持当前用户已登录的Web应用程序从而实现非用户本意的操作的攻击方法。简单说就是利用用户已登录的身份,诱导用户在不知情的情况下,在目标网站执行非自愿操作。

具体过程如下:

  1. 你登录了个人后台 / 论坛 / 支付网站,浏览器保存了登录 Cookie。
  2. 你点开攻击者发的一张图片、链接、恶意网页。
  3. 这个页面偷偷向目标网站发起请求(比如改密码、转账、发帖子、退出登录)。
  4. 浏览器自动带上你的登录 Cookie,网站以为是你本人操作,请求直接生效。

漏洞危害

CSRF 能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全等等等等。可以说 CSRF 能够做什么,取决于你在网站里能做什么操作。

漏洞成因

CSRF 漏洞一般是由于没有检查 Referer 以及未在头部设置 token 造成的。

漏洞要素

  1. 操作:你想让受害者做什么,转账、修改密码等。
  2. 认证:基于 cookie 的会话处理,因为要携带 Cookie 进行访问,其他认证字段是无法携带的,所以需要那个应用程序仅通过 cookie 进行会话处理。
  3. 没有不可预测的参数:因为要事先构造请求,所以不能含有不可预测的参数,比如密码等。

GET 型 CSRF

由于不可能给大家找真实的授权的靶机,我就找个靶场给大家演示一下吧

受害者视角

  1. 打开靶场,登录。

    image-20260729000904593

  2. 查看个人信息,看到自己的信息。

    image-20260729000926808

攻击者视角

  1. 打开无痕浏览器,攻击者 B(hacker/123456)也登录网站,可以看到自己的个人信息。

    image-20260729001245835

  2. 在更新个人资料的地方,点击【通过GET更新】个人资料,获取到 URL。

    image-20260729001324505

更新个人资料的 URL 如下:

1
http://e9fb9eb7ddf3.target.yijinglab.com/profile.php?action=update&email=hacker@evil.com&bio=专业黑客
  1. 攻击者构造 CSRF 攻击的 payload:
1
http://e9fb9eb7ddf3.target.yijinglab.com/profile.php?action=update&email=hack@qq.com&bio=你被黑客攻击了

攻击结果

黑客将构造的 payload 发送给受害者,受害者点击访问。

image-20260729001726437


POST 型 CSRF

受害者视角

  1. 打开靶场,登录。

    image-20260729002249293

  2. 查看个人信息,看到自己的信息。

    image-20260729002502203

攻击者视角

  1. 使用用户名 hacker 密码 123456 登录后进入个人中心编辑资料。

    image-20260729002450247

  2. 选择 POST 型 CSRF 漏洞部分,修改个人简介,并且使用 BP 抓包。

    image-20260729002800330

  3. 使用 BURP 构造恶意 POC。

    image-20260729003009879

  4. 复制 POC 内容,保存到本地为 1.html。

    image-20260729002956898

攻击结果

  1. 将 1.html 文件,发送给受害者,诱导点击提交。

    image-20260729003201274

  2. 可以发现邮箱和个人简介被修改了。

    image-20260729003221296


CSRF 的其他操作

  1. 打开靶场,使用【hacker】用户登录,密码 123456,可以看到余额是 500 元。

    image-20260729003351686

  2. 选择【快速转账】填写给【hacker】用户转账 200 元。

    image-20260729003727909

  3. 点击【立即转账】并且抓取对应的数据包。

    image-20260729003710949

  4. 使用 BP 生成对应的 POC。

    image-20260729003828092

  5. 将 POC 复制到自己创建的 1.html 文件中,并且保存。

    image-20260729003936226

  6. 使用【victim】用户登录系统,可以看到余额是 1000 元。

    image-20260729003325186

  7. 诱导【victim】用户点击 1.html 文件。

    image-20260729004127621

  8. 刷新页面发现少了 200 元。

    image-20260729004139606

  9. 切换到【hacker】用户,发现余额多了 200 元。

    image-20260729004158460


浏览器跨域信任问题解决方法

Edge

在地址栏输入:

1
edge://flags/#block-insecure-private-network-requests

Chrome

在谷歌浏览器地址栏输入:

1
chrome://flags/#allow-insecure-private-network-requests

然后将 Allow insecure private network requests 设置为 Enabled

Happy Hacking 🚀