csrf学习2,漏洞挖掘与防御

一、CSRF漏洞挖掘
1. CSRF漏洞原理
  • 根本原因:当网站接口被第三方网站调用时,用户的cookie被直接利用
  • 关键验证点:请求是否从系统自身的前端页面发起,而非其他域名下的请求
  • 典型场景:转账、修改密码、修改手机号等敏感操作接口需要特别防护
2. 确定接口方法
  • 核心标准:在第三方网站发起对目标接口的请求时,业务能执行成功即存在漏洞
  • 敏感接口:主要关注转账、密码修改等高危操作接口,公开查询类接口无需拦截
  • 验证方法:无需输入密码等二次验证的情况下调用成功即判定为漏洞
3. 操作方法
  • 步骤1:通过正常操作获取目标接口地址和参数(如转账金额、账号等)
  • 步骤2:构造第三方网页发起相同请求(如将表单保存为独立HTML文件)
  • 步骤3:验证业务是否执行成功(如余额是否变化)
  • 关键点:请求必须从非目标域名下发起才能验证跨站特性
4. 检测工具
1)Burp Suite
  • 使用流程:
    • 配置代理捕获目标请求
    • 右键选择"Generate CSRF PoC"
    • 保存生成的HTML文件并在非目标域名下访问
  • 验证方法:通过余额变化等业务表现确认漏洞存在
  • 特点:需要人工参与验证的半自动化工具
2)CSRFTester

  • 工作原理:监听指定端口并分析请求
  • 使用方式:需要手动配置代理和浏览器设置
  • 输出结果:生成可用于验证的PoC代码
3)Bolt
  • 特点:全自动化扫描工具
  • 命令格式:bolt.py -u <目标URL>
  • 输出标识:"Insecure form(s) found"表示存在漏洞
  • 优势:可批量扫描多个接口
4)云端产品
  • 代表产品:腾讯云VSS、阿里云漏洞扫描等
  • 检测能力:覆盖OWASP TOP 10漏洞包括CSRF
  • 特点:商业付费服务,适合企业级应用
  • 优势:无需本地部署,支持HTTPS扫描
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

CSRF漏洞原理

漏洞发生的根本原因是网站接口被第三方调用时Cookie被直接利用,关键在于请求是否从系统自身前端发起

域名验证逻辑(合法请求需来自自身域名)

⭐⭐

漏洞检测思路

在第三方网站发起敏感接口请求(如转账、修改密码),若业务执行成功则存在漏洞

敏感接口界定(公开API无需拦截,仅关注转账/密码修改等高危操作)

⭐⭐⭐

手动检测方法

1. 抓取目标接口请求参数 2. 在第三方网页构造相同请求 3. 验证业务是否被执行

请求伪造方式(需区分本地文件与跨站请求的等效性)

⭐⭐⭐⭐

工具辅助检测(半自动)

Burp Suite生成CSRF PoC:右键请求→Engagement Tools→Generate CSRF PoC→本地HTML触发验证

代理配置要点(默认监听8080端口,需关闭代理避免干扰)

⭐⭐⭐

全自动化工具

Bolt工具:批量扫描接口,输出不安全表单列表

云服务扫描(阿里云/腾讯云等付费漏洞扫描服务支持CSRF检测)

⭐⭐⭐⭐

防御措施

验证请求来源(Referer/Origin头)、添加CSRF Token、关键操作二次认证

误拦截风险(需排除公开API避免功能异常)

⭐⭐⭐

一、CSRF漏洞防御
1. 防御思路
1)防御思路概述
  • 概述: CSRF漏洞防御主要有两个方向,一是识别请求来源,二是让前端页面与伪造请求变得不一样。
2)识别请求来源
  • 识别请求来源: 通过判断请求是否来自自己的网站来区分合法与非法请求。
3)使用Referer字段
  • Referer字段: HTTP请求头中的一个字段,用于标识请求的来源页面。通过检查Referer字段,可以判断请求是否来自自己的网站。
4)Referer字段的作用
  • 作用:
    • 跟踪来源: 用于统计访问来源,如访问统计、广告效果跟踪等。
    • 安全防御: 在CSRF防御中,通过检查Referer字段,可以拒绝来自第三方网站的请求。
5)服务端拦截与判断
  • 服务端拦截与判断:
    • 实现方式: 在后端代码中加入拦截器或过滤器,从HTTP请求头中获取Referer字段的值,并进行判断。
    • 判断逻辑: 如果Referer字段的值不是自己的域名,则认为请求来自第三方网站,对于敏感接口,可以拒绝该请求,从而防止CSRF攻击。
  • 示例: 通过在后端设置拦截器,检查每个请求的Referer字段,对于非自己域名的请求进行拦截和拒绝。
2. 案例分析
1)抓包尝试修改密码接口
  • 靶场部署与登录
    • 靶场部署: 我们之前已经讲过DVWA靶场的部署方法。
    • 登录方式: 使用admin默认的password密码登录。
  • 安全级别与漏洞场景
    • 安全级别:
      • Low级别: 没有任何安全防护措施,可以随意调用。
      • 场景: 修改密码,只需输入两次新密码即可。
    • 漏洞利用: 如果接口存在CSRF漏洞,攻击者可以在自己的网站植入代码,调用目标网站的修改密码接口。
  • Medium级别的安全措施
    • 防护措施: 检查HTTP Referer字段是否包含当前域名(如localhost)。
    • 源码分析:
      • 代码逻辑: 使用stripos($_SERVER['HTTP_REFERER'],$_SERVER['SERVER_NAME'])检查Referer字段。
      • 判断条件: 如果Referer不包含当前域名,则认为是非法请求。
    • 绕过方法: HTTP请求包可以任意修改,包括Referer字段,可以将其修改为包含当前域名以骗过服务器。
  • High级别的安全措施
    • 更高级别的防护: 使用Anti-CSRF Token进行校验。
    • 源码分析:
      • Token校验: checkToken($_REQUEST['user_token'],$_SESSION['session_token'], 'index.php')。
      • Token生成: generateSessionToken()。
  • 防御思路
    • 区分请求来源:
      • 问题: 如何区分请求是来自自己的前端页面还是第三方网站?
      • 方法: 通过在请求中添加无法伪造的标识(如Token)来区分。
    • 总结:
      • Referer字段: 可以作为基础校验,但不安全,因为可以伪造。
      • Token机制: 更安全的防护方式,通过Token校验请求的合法性。
3. 第二种方案
1)CSRF Token

CSRF Token(跨站请求伪造令牌)是一种用于保护Web应用程序免受CSRF攻击的安全机制。CSRF攻击是一种恶意攻击,攻击者利用已登录用户的身份,发起伪造的请求,从而执行未经授权的操作。

CSRF Token的工作原理:

  1. 令牌生成:当用户加载需要进行安全操作的网页(例如提交表单)时,服务器会生成一个唯一的CSRF令牌,并将其发送到客户端(通常保存在一个隐藏的表单字段或cookie中)。

  2. 令牌提交:当用户提交表单或发起更改服务器状态的请求(例如提交数据)时,CSRF令牌会随请求一起发送。

  3. 验证令牌:服务器会检查提交的CSRF令牌是否与之前发送的令牌一致。如果匹配,说明请求是合法的;如果不匹配,说明请求可能是伪造的,服务器会拒绝该请求。

CSRF Token使用示例:

  • 服务器在渲染表单时,发送一个CSRF令牌:

    <form method="POST" action="/submit">
        <input type="hidden" name="csrf_token" value="unique_token_value">
        <!-- 其他表单字段 -->
        <button type="submit">提交</button>
    </form>
    
  • 当表单提交时,服务器会检查csrf_token字段的值是否正确。

CSRF Token的作用:

  • 防止攻击:CSRF令牌防止恶意请求伪装成用户请求,确保请求是真正由用户发起的。

  • 安全验证:令牌的验证过程确保请求是由与页面交互的合法用户发起的,而不是恶意网站伪造的请求。

  • CSRF Token步骤一
    • 步骤一: 用户使用用户名密码登录,服务端下发一个随机的token字段给客户端,并且服务端把这个字段保存在session中。
    • 实现方式: 使用session_start()开启会话,检查$_SESSION['token']是否存在,若不存在则生成一个新的token并保存到session中。
  • CSRF Token步骤二
    
    • 步骤二: 客户端把这个token保存起来,放到隐藏字段。
    • 保存位置: 最好不要放到cookie里面,因为cookie是明文的,容易被窃取。建议放到隐藏字段中。
  • CSRF Token步骤三
    • 步骤三: 用户在登陆状态下,在之后访问的时候,都要携带这个token字段。
    • 携带方式: 在表单中添加一个隐藏的input字段,字段名为user_token,值为服务端下发的token。
  • CSRF Token步骤四
    
    • 步骤四: 服务端从session中拿出token值进行对比,如果一致,说明请求合法。
    • 对比方式: 使用hash_equals()函数比较$_SESSION['token']和$_POST['token'],若一致则执行业务逻辑,否则返回错误。
  • CSRF Token步骤五
    • 步骤五: 用户退出,session销毁,token失效。
    • 失效方式: 用户退出时销毁session,使token失效,防止token被滥用。
2)问题
  • 问题: 即使使用了CSRF Token,是否就100%安全了?
  • 答案: 不一定。如果网站存在其他漏洞(如XSS漏洞),攻击者仍可能利用这些漏洞获取到user token,从而进行CSRF攻击。因此,CSRF Token并不是终极的解决方案,需要结合其他安全措施共同防护。
4. 应用案例
1)Reflected Cross Site Scripting (XSS)案例
  • XSS攻击: Reflected XSS是一种跨站脚本攻击,攻击者通过注入恶意脚本,使用户在访问特定页面时执行该脚本,从而窃取信息或进行其他恶意操作。
  • 安全级别: 提到某个安全级别对于任何攻击方式来说都是安全的,但具体级别未详细说明。
2)Cross Site Request Forgery (CSRF)案例与二次验证
  • CSRF攻击: 攻击者诱导用户访问恶意页面,利用用户已登录的身份,向目标网站发送未经授权的请求,如修改密码。
  • 二次验证: 在进行敏感操作(如修改密码)时,要求用户再次输入当前密码,以验证身份。这是一种增强安全性的措施。
3)二次验证的其他方法
  • 验证码: 通过识别图片中的特定元素或按特定顺序点击汉字等方式,增加自动化攻击的难度。
  • 滑动解锁: 相对安全的验证方式,但仍非100%安全。
  • 短信验证: 在修改绑定手机号等场景中,要求旧手机号接收短信验证码,以确认身份。
4)敏感操作与二次验证
  • 敏感操作: 如删除网盘文件、清空回收站等,这些操作一旦执行,可能无法恢复。
  • 二次验证的必要性: 对于这类敏感操作,必须确保是账号拥有者本人在操作,可以通过扫码、人脸识别加活体检测等方式进行二次验证。
5)谷歌recapture人机验证机制
  • recapture机制: 谷歌的一种人机验证机制,当系统检测到异常操作(如爬虫或代码操作)时,会弹出人机验证界面,要求用户完成特定任务(如找出图片中的特定元素)。
  • 目的: 通过增加自动化攻击的难度,保护网站免受恶意攻击。
  • 应用场景: 适用于操作比较奇怪的IP,或尝试修改多个账号密码等异常行为。
5. 验证码
1)浏览器对验证码的影响
  • 火狐浏览器与验证码: 使用火狐浏览器时,验证码功能正常。
  • 谷歌浏览器与验证码: 在谷歌浏览器中,尝试进行相同操作(如登录、提交等),但验证码可能不奏效。演示中,尽管进行了提交操作,但余额并未减少。
  • 原因分析: 可能是由于浏览器之间的兼容性差异或安全设置不同导致的。谷歌浏览器可能对某些验证码的实现方式有特定的处理机制,导致验证码功能失效。
2)验证码的重要性与类型
  • 验证码的重要性: 验证码是一种安全措施,用于防止非法攻击,如暴力破解、跨站脚本攻击(XSS)等。它要求用户输入特定的字符或完成特定的操作,以证明其是人类而非自动化脚本。
  • 验证码的类型: 验证码有多种类型,如图片验证码(如示例中的“米饭12

    ⊗\otimes⊗

    ”)、人脸识别验证码(如ppt_content中的“人脸识别认证”)、IP验证码(如“reCAPTCHA(IP验证)”)等。
  • reCAPTCHA(IP验证)说明: 这是一种通过选择包含特定元素(如火警栓)的图片来完成的验证码。它结合了图片识别和人工智能技术,旨在提高验证的准确性和用户体验。
3)跨站脚本攻击(XSS)与验证码
  • XSS攻击: 跨站脚本攻击是一种常见的网络安全威胁,攻击者通过在网页中注入恶意脚本,试图窃取用户的敏感信息或执行其他恶意操作。
  • 验证码与XSS防御: 验证码可以作为防御XSS攻击的一种手段。通过要求用户输入验证码,可以确保提交请求的是人类用户而非自动化脚本,从而降低XSS攻击的风险。
  • DVWA中的XSS演示: 在DVWA(Damn Vulnerable Web Application)中,有一个关于反射型跨站脚本攻击(Reflected XSS)的演示。通过输入特定的恶意脚本,可以在用户的浏览器中执行该脚本,从而窃取信息或执行其他恶意操作。而验证码的引入,可以有效防止这种攻击的发生。
6. 浏览器Referrer Policy策略
1)Referrer Policy简介
  • Referrer Policy定义: Referrer Policy是浏览器的一个安全策略,用于控制页面在请求资源时是否携带referrer信息。
  • 作用: 控制页面在跨站请求时是否带上来源信息,有助于防止CSRF等安全威胁。
2)strict-origin-when-cross-origin策略
  • 策略描述: 当设置为strict-origin-when-cross-origin时,浏览器在跨域请求时,只会发送origin部分,不会发送完整的URL路径和参数。
  • 效果: 若请求为跨站请求且只携带域名,无其他参数,增强安全性。
3)Referrer Policy对浏览器行为的影响
  • 跨站请求行为: 在strict-origin-when-cross-origin策略下,若从一个域名访问另一个域名的接口,浏览器只会发送域名,不会发送路径和参数。
  • 安全意义: 此策略有助于防止CSRF攻击,因为攻击者无法获取完整的请求URL和参数。
4)Referrer Policy的防御作用
  • 防御CSRF: 通过设置严格的Referrer Policy,可以有效防止跨站请求伪造(CSRF)攻击。
  • 实际应用: 在金融、网银等敏感领域,建议采用严格的Referrer Policy以增强安全性。
5)Referrer Policy配置与效果
  • 配置方法: 在HTTP响应头中设置Referrer-Policy字段,如strict-origin-when-cross-origin。
  • 效果展示: 配置后,浏览器在跨域请求时只会携带域名,提高安全性,但可能影响部分功能的正常使用(如需要完整URL的路径和参数的功能)。
7. 浏览器保护措施
1)浏览器的基本安全保护措施
  • 基本安全保护: 一些浏览器具有基本的安全保护措施,如防止CSR漏洞等。
  • 实例说明: 火狐浏览器在此课程中未做校验,以便讲解CSR漏洞;但其他浏览器可能已有此类保护。
2)网站开发者的用户保护措施
  • 用户保护: 网站开发者应采取多种措施来保护用户,如二次验证、人脸识别等。
  • 实例说明: 通过reCAPTCHA(IP验证)等方式进行安全校验,增加非法攻击的难度。
3)用户自身的安全注意事项
  • 用户注意: 如果网站缺乏安全措施,用户应自行注意并采取措施保护自身安全。
  • 提醒: 用户在使用网站时,应留意网站的安全性,避免在不安全的网站上进行敏感操作。
  • 不要随便去访问一些不安全的网站,也不要去随便点开别人在QQ,微信或者QQ邮箱里面发给你的一些链接,因为。你可能真的在不知不觉中一点开这个链接csr的攻击就发生了啊,顺便呢
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

CSR漏洞修复与防御

识别请求来源与添加特殊参数

识别请求来源的方法与实现

- 识别请求来源

利用HTTP头字段referral

referral字段的作用与伪造风险

- 添加特殊参数

使用token进行身份验证

token的生成、存储与验证流程

浏览器安全策略

谷歌浏览器的referral policy

不同浏览器对跨站请求的处理差异

- referral policy

strict origin when cross origin策略

该策略对跨站请求的影响

二次验证方法

验证码、短信验证、人脸识别等

二次验证的应用场景与实现方式

- 验证码

图片验证、滑动解锁等

验证码的破解难度与安全性

- 短信验证

修改绑定手机号时的短信验证

短信验证的流程与安全性

- 人脸识别

扫码验证、活体检测等

人脸识别的技术原理与应用

用户安全建议

避免访问不安全网站与点击不明链接

用户行为对安全的影响

- 不安全网站

可能存在的安全风险

如何识别与避免访问不安全网站

- 不明链接

链接中的潜在威胁

如何处理不明链接以确保安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值