CSRF跨站请求伪造基础

也被称为One Click Attack或Session Riding。又常缩写为XSRF。

是一种对网站的恶意利用,与XSS的不同是,XSS攻击利用的是站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。

CSRF的原理

攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作,包括:盗取目标用户的账户,以目标用户的名义发送邮件信息,转移虚拟货币等。泄露目标用户多的个人隐私并威胁其财产安全。

例如:

你登录了网站 A(比如银行后台),浏览器保存了你登录后的 Cookie。

攻击者诱导你访问恶意网站 B。网站 B 在后台悄悄发起一个针对网站 A 的请求 (例如转账、改密码)。

浏览器会自动带上你在 A 站点的 Cookie ,网站 A 误以为是你本人发起请求,执行操作。

核心:利用浏览器自动携带 Cookie 的特性,冒用受害者身份发起请求;攻击者拿不到 Cookie,只是借用身份。

CSRF漏洞攻击过程的关键点:

目标用户已经登录了网站,能够执行网站的功能。

目标用户访问了攻击者构造的URL。

例如:

你想给某位用户转账 100 元,那么单击 "转账" 按钮后,发出的 HTTP 请求会与 pay.php?user=xx&money=100 类似。而攻击者构造链接 pay.php?user=hack&money=100,当目标用户访问了该 URL 后,就会自动向攻击者的账号转账 100 元,而且这只涉及目标用户的操作,攻击者并没有获取目标用户的 Cookie 或其他信息。

CSRF练习

使用用户密码登录该账户后会进入一个添加用户的管理界面

1.抓包捕获正常添加用户请求

在页面填写用户名、密码并点击提交,使用 Burp Suite 拦截表单提交数据包。

正常业务请求:POST /adduser.php,携带参数 username=teest2&password=12345,浏览器自动附带当前登录状态的PHPSESSID会话 Cookie。

2.利用 Burp 自动生成 CSRF POC HTML

1.在捕获到的请求上右键选择:相关工具(Engagement tools) → 生成CSRF POC

2.Burp 自动生成一段 HTML 代码:内含自动提交的 Form 表单,目标地址、表单参数和正常抓包请求完全一致,并附带 JS 实现页面加载后自动提交表单。

CSRF POC = 用于复现 CSRF 漏洞的概念验证代码,证明目标站点存在 CSRF 漏洞 。

原理:该 HTML 页面会在打开时,静默向目标网站发起添加用户的 POST 请求。

关键点:HTML 页面本身不携带 Cookie,Cookie 由访问页面的浏览器自动附加。

3.部署 POC 页面,同一浏览器访问

将生成的 CSRF 攻击 HTML 文件放到另一台虚拟主机(恶意站点),攻击者通过聊天、邮件等方式诱导已经登录后台管理系统 的管理员,在同一个浏览器中访问该 html 地址。页面加载后自动提交伪造表单发起新增用户请求,浏览器会自动携带目标网站的登录会话 Cookie,服务端仅凭 Session 判断身份,误认为是管理员主动发起操作,最终执行添加用户的恶意行为。

前提条件:浏览器此时仍然保持登录目标后台(192.168.143.150)。

当浏览器打开恶意页面:

页面自动执行 JS 提交表单,跨站向adduser.php发起新增用户请求;浏览器自动带上目标站点的登录 Cookie,模拟合法用户操作。

4.验证漏洞效果

请求发送完成后,目标网站提示 test6添加成功。

服务器识别请求携带合法会话 Cookie,认定是已登录管理员发起操作,成功创建攻击者指定的用户账户。

总结:

登录处理逻辑

isset($_POST'loginsubmit')判断页面是否收到登录表单提交(用户点击登录按钮)。

数据库查询到匹配用户,登录成功,给会话变量赋值:$_SESSION'isadmin' = 'admin';该数据会保存在服务器端 Session 文件,浏览器只持有对应的PHPSESSID Cookie。

页面权限鉴权逻辑

每次访问该页面时,读取当前会话中的 isadmin:如果值等于 admin:鉴权通过,展示添加用户功能入口,如果不是 admin:提示 "请先登录",禁止访问管理功能。

漏洞成因:目标网站没有部署 CSRF 防护机制 (无 CSRF Token、未校验 Origin/Referer 头),服务器仅依靠 Cookie 鉴别用户身份。

CSRF 攻击核心逻辑:

攻击者无法获取用户 Cookie,但是诱导用户在已登录状态访问恶意页面 ,驱使浏览器自动跨站发起请求,借用用户身份执行业务操作。

修复建议: 后端增加 CSRF 随机 Token 校验、校验请求 Origin/Referer、配置 Cookie SameSite 属性,敏感操作增加二次密码 / 验证码验证。

CSRF--增加referer的检查

Referer:来源页面地址
记录:用户是从哪个页面点击、跳转,访问当前接口的。

同样的操作,但是不能执行

1、这次 CSRF 请求里:$_SERVER'HTTP_REFERER' = "http://192.168.143.1/stu/src.html"

$_SERVER'HTTP_HOST' = "192.168.143.150:8003"

2、自动拼接出来的正则/^http:\/\/192.168.143.150:8003/i

3、匹配对比:待匹配字符串:http://192.168.143.1/stu/src.html

开头是:http://192.168.143.1

正则要求开头:http://192.168.143.150:8003

字符串开头不一致,匹配失败
preg_match() 返回 0

!0 条件成立 → 执行 exit("Referer error");

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端