入门CSRF

📅 2026/8/18 10:21:35
入门CSRF
CSRF (跨站请求伪造)是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS)但它与XSS非常不同XSS利用站点内的信任用户而CSRF则通过伪装成受信任用户请求受信任的网站。简单的说是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作如发邮件发消息甚至财产操作如转账和购买商品。因为浏览器之前认证过所以被访问的站点会觉得这是真正的用户操作而去运行。题目一POST-CSRF入门站内可以先用默认账号user/user登录。登录后只有两个点值得看一个是主页能提交任意 HTML提交后会写到static/poc.html另一个是/password页面改密码的表单直接 POST 到/change_password没有看到任何 CSRF 防护。结合题面那句“系统每 30 秒会自动检查 html 文件”思路就比较直接了把一个自动提交的表单塞进poc.html目标指向/change_password把管理员密码改成自己已知的值。等巡检用户访问这份 HTML 时浏览器会带着管理员自己的 Cookie 发起请求相当于管理员替我们提交了改密动作。!DOCTYPE htmlhtmlheadtitleCSRF POC/title/headbody//这是一个普通的网页标题叫“CSRF POC”POC 就是“证明概念”的意思证明这个漏洞存在form action/change_password methodPOST//这是一个“表单”你可以理解为一张“申请表”。action/change_password这张表要交到哪个地址去。/change_password就是目标网站修改密码的接口。methodPOST提交方式是用“POST”方式相当于把数据打包好再送过去URL 里看不到input typehidden nameusername valueadmininput typehidden namenew_password valuekaduox//typehidden这是“隐藏字段”。用户看不见这些输入框但它们会随着表单一起提交。nameusername valueadmin相当于在表里写“用户名admin”。namenew_password valuekaduox相当于在表里写“新密码kaduox”scriptdocument.forms[0].submit();/script//script这是一段 JavaScript 脚本网页里的小程序。document.forms[0].submit();意思是“找到这个页面中的第一个表单然后自动点击提交按钮”。大白话页面一加载脚本立刻执行不等用户点任何按钮表单就自己提交了/form/body/html//结束┌──────────────────────────────────────────────────────────┐│ 1. 你把这个 HTML 文件放到网上比如 GitHub Pages 或你的服务器 ││ 2. 你把这个链接发给管理员或者题目平台的“巡检用户”会去访问 ││ 3. 管理员点开这个链接 ││ 4. 页面加载 → 脚本自动执行 → 表单自动提交 ││ 5. 浏览器带着管理员自己的 Cookie向 /change_password 发送 POST ││ 6. 服务器看到的是“管理员本人”在提交于是执行改密操作 ││ 7. 管理员的密码被改成 kaduox ││ 8. 你拿着 admin / kaduox 登录后台 → 拿到 Flag │└──────────────────────────────────────────────────────────┘题目二CSRF 模拟演练场漏洞原理CSRF 攻击的核心逻辑是“盗用用户已认证的会话身份”前提条件用户已成功登录目标系统如银行浏览器保存了有效的认证 Cookie会话未过期。攻击诱导攻击者通过诱导如“领取奖金”“免费礼物”让用户访问恶意网站。伪造请求恶意网站自动向目标系统如银行发送伪造的操作请求如转账给 bob该请求会自动携带用户的认证 Cookie。服务器误判目标系统仅通过 Cookie 验证用户身份未验证请求是否为用户主动发起误以为是用户本人操作从而执行非法转账操作。关键漏洞目标系统缺乏 CSRF 防护机制无法区分“用户主动请求”和“恶意伪造请求”。漏洞修复/规避方法CSRF Token服务器为每个登录用户生成唯一、随机的 CSRF Token嵌入表单或请求头客户端发起请求时必须携带该 Token服务器验证 Token 有效性无效则拒绝请求。配置 SameSite Cookie 属性在目标系统的认证 Cookie 中设置SameSiteStrict完全禁止跨域携带或SameSiteLax仅允许部分安全跨域场景携带阻止浏览器在跨域请求中自动携带认证 Cookie。验证 Referer/Origin 请求头服务器检查请求的 Referer请求来源页面或 Origin请求来源域名仅允许来自可信域名如银行自身域名的请求执行关键操作拒绝跨域恶意请求。关键操作采用双重验证对转账、支付等敏感操作增加二次确认机制如输入支付密码、短信验证码、动态口令即使请求被伪造也需用户额外授权才能完成操作。优先使用 POST 请求并限制请求方法避免用 GET 请求处理敏感操作GET 请求可通过 URL、图片标签等轻易伪造服务器严格限制敏感接口的请求方法拒绝非法请求方法。提示用户安全习惯引导用户不随意点击陌生链接尤其登录银行、支付等系统后及时退出未使用的登录会话降低被诱导攻击的风险。题目三入门 CSRFimg srchttp://hbc2.haobachang.com:50006/transfer.php?to_useruseramount500工作原理步骤说明1admin 查看留言页面2浏览器解析img标签自动加载图片地址3浏览器携带 admin 的 Cookie 发起 GET 请求4服务器接收请求执行转账操作5admin 的钱转给了 user为什么能成功转账接口是 GET 请求参数直接在 URL 里没有 CSRF Token 防护没有验证 Referer 来源Cookie 自动携带服务器认为是 admin 本人操作