欢迎光临
我们一直在努力

如何从一名小白成为网安大神(第十九天)

一、学习CSRF 漏洞

(一)CSRF 是什么

全称:Cross-Site Request Forgery,跨站请求伪造。

核心:

  • 用户已经登录目标网站(Cookie 有效、未过期);

  • 目标网站没有校验请求来源 / 身份凭证;

  • 存在能执行敏感操作的无 Token GET/POST 请求;

  • 用户点开攻击者构造的恶意链接 / 页面。

  • (二)漏洞原理拆解

    浏览器机制:访问任意网站时,会自动带上该域名下所有有效 Cookie。流程:

  • 用户登录 bank.com,浏览器保存登录 Cookie;

  • 攻击者制作恶意页面 hack.html,内含自动转账请求;

  • 用户点开恶意页面;

  • 浏览器发起请求 bank.com/transfer?to=攻击者&money=1000,自动带上银行登录 Cookie;

  • 银行服务端只校验 Cookie,判断是合法用户,执行转账。

  • CSRF 只能发请求,不能获取响应内容,所以无法窃取页面数据。

    (三)两种攻击 payload

    1. GET 型 CSRF(最简单)

    http://bank.com/transfer?account=attacker&amount=1000

    恶意构造:

    <a href="http://bank.com/transfer?account=attacker&amount=1000">免费领红包</a>

  • 自动执行(图片加载触发请求)
  • <img src="http://bank.com/transfer?account=attacker&amount=1000" width="0" height="0">

    用户打开页面,图片自动加载,请求自动发送。

    2. POST 型 CSRF(表单自动提交)

    后台敏感操作是 POST 提交,不能用 img,用隐藏表单 + 自动 JS 提交:

    <!DOCTYPE html>
    <html>
    <body>
    <form action="http://bank.com/transfer" method="POST" id="csrf_form">
    <input type="hidden" name="account" value="attacker">
    <input type="hidden" name="amount" value="1000">
    </form>
    <script>
    // 页面加载自动提交表单
    document.getElementById("csrf_form").submit();
    </script>
    </body>
    </html>

    用户访问页面无需点击,表单自动 POST 发包。

    (四)CSRF 漏洞挖掘思路(实战找漏洞)

    1. 优先寻找敏感操作接口

    • 转账、充值、修改密码、修改手机号、绑定邮箱、删除账号、发布文章、管理员后台操作

    2. 判断是否存在 CSRF

    测试步骤
  • 登录目标站点,抓敏感操作请求(Burp Suite);

  • 删除请求里的 Token / 校验字段(csrf_token、token、_token 等);

  • 重放请求,看是否仍能成功执行;

  • 若删除 Token 依然生效 → 存在 CSRF;

  • 再校验 Referer / Origin 头:修改 Referer 为其他域名,请求成功则双重漏洞。

  • 两种常见校验绕过场景

  • 无任何校验:直接存在 CSRF;

  • 仅校验 Referer 头,可绕过

    • 后端判断逻辑:if(referer contains "xxx.com")

    • 绕过方式:攻击者域名包含目标域名,如 xxx.com.hack.com

  • 空 Referer 放行:页面用 img、iframe 发送请求时 Referer 为空,后台不拦截即可利用。

  • (五)工具实操:Burp Suite CSRF 测试

  • Proxy 抓包登录后的敏感请求;
  • 右键 — Generate CSRF PoC;
  • Burp 自动生成自动提交的 HTML 恶意页面;
  • 复制 HTML,本地保存打开,在已登录浏览器访问,验证漏洞是否生效。
  • (六)靶场练习推荐(由浅入深)

  • DVWA(入门)
    • 安全级别 Low/Medium/High 逐层学习绕过方式
  • WebGoat
    • CSRF 完整交互实验
  • PortSwigger Web Security Academy(最推荐)
    • CSRF 全系列靶机:基础、Token 绕过、Referer 绕过、JSON CSRF、SameSite Cookie 漏洞
  • Pikachu 漏洞靶场
    • GET/POST 两种 CSRF 实例
  • DVWA CSRF 简单解析

    • Low:无任何防护,直接 payload 利用;
    • Medium:校验 Referer,检测是否包含主机名;
    • High:使用 CSRF Token,每次请求随机,无法简单构造 payload;
    • Impossible:增加旧密码二次验证,彻底杜绝。

    (七)高级拓展:JSON CSRF / CORS 配合 CSRF

    1. JSON 表单无 Token

    接口接收 Content-Type: application/json POST 数据,无 CSRF Token,可通过表单提交 json 触发。

    2. CORS 配置不当辅助危害

    服务端配置 Access-Control-Allow-Origin: *,配合 CSRF 可读取接口响应,扩大危害。

    (八)完整防御方案

    方案 1:CSRF Token(最主流、最安全)

  • 用户登录后,服务端生成单次有效随机 Token,存入 Session;
  • 页面所有敏感表单 / 请求携带该 Token(隐藏 input、请求头);
  • 后端校验请求携带 Token 和 Session 内 Token 是否一致,不一致拒绝执行;
  • 每次操作后刷新 Token,防止重复利用。
  • 方案 2:SameSite Cookie 属性(浏览器层防护)

    Set-Cookie 增加参数:

    Set-Cookie: sessionid=xxx; SameSite=Strict; Secure; HttpOnly

    • SameSite=Strict:跨站请求完全不携带 Cookie;
    • SameSite=Lax:GET 跨站不带 Cookie,基础防御;配合 HTTPS + Secure,只有 HTTPS 才会发送 Cookie。

    方案 3:校验 Origin / Referer 请求头

    后端校验请求来源域名,只信任本站域名;缺点:可被部分场景绕过,不能单独作为唯一防御,需搭配 Token。

    方案 4:敏感操作增加二次验证

    修改密码、转账、绑定手机必须输入短信验证码、原密码,就算 CSRF 发起请求,无验证码无法执行。

    禁止使用的无效防御

    仅使用 Referer 校验、仅前端 JS 校验 Token(前端校验可被绕过)。

    赞(0)
    未经允许不得转载:171主机测评 » 如何从一名小白成为网安大神(第十九天)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址