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");

相关推荐
console.log('npc')22 分钟前
第 1 章 项目概述与环境搭建
前端·人工智能·大模型
定栓23 分钟前
Webpack迁到Vite第七节(二):全家桶移除 — Babel 全家桶深度分析
前端·webpack·node.js
IT_陈寒31 分钟前
React组件莫名重渲染?你可能忘了这个小细节
前端·人工智能·后端
鶴哥只手遮天42 分钟前
React 19.3.1 源码深度剖析-第 12 章(下)RSC 与 Flight 协议
前端·react.js·开源
deli00743 分钟前
TCP 三次握手到底发几个包?丢包重传动画实测一遍
前端
盟接之桥1 小时前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
巴勒个啦1 小时前
Prompt Engineering 实战:5 个让 AI 生成生产级业务代码的工程模式
java·前端
去伪存真1 小时前
AI时代,古法编程的码农路在何方?
前端
计算机魔术师1 小时前
从7月绕过沙盒到9月再曝违规,OpenAI的AI安全防线在漏什么
前端
我的div丢了肿么办1 小时前
element-plus表格使用:filter-method过滤导致出现无数据
前端·javascript·vue.js