[红日安全]Web安全Day3 - CSRF实战攻防
字数 2293 2025-08-25 22:58:20

CSRF实战攻防教学文档

1. CSRF漏洞基础

1.1 CSRF漏洞简介

CSRF(跨站请求伪造)是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密等)。

与XSS的区别:CSRF没有盗取cookie而是直接利用。

1.2 CSRF漏洞分类

1.2.1 GET型CSRF

  • 只需要构造URL,诱导受害者访问利用
  • 示例:http://example.com/transfer?amount=1000&to=attacker

1.2.2 POST型CSRF

  • 需要构造自动提交或点击提交的表单
  • 诱导受害者访问或点击利用

1.3 CSRF漏洞危害

  • 未验证Referer或使用Token导致用户/管理员可被CSRF执行添加、修改、删除等操作
  • 可能导致账户接管、数据泄露、资金损失等严重后果

1.4 CSRF漏洞修复方案

  1. 添加随机token值并验证
  2. 验证Referer
  3. 关键请求使用验证码功能
  4. SameSite Cookie属性

2. CSRF漏洞利用方法

2.1 利用思路

  1. 寻找增删改的操作点
  2. 构造HTML表单
  3. 修改表单参数
  4. 诱导受害者访问/点击
  5. 验证操作是否成功执行

2.2 工具使用

2.2.1 BurpSuite

  1. 抓取目标请求
  2. 右击选择"Engagement tools" → "Generate CSRF PoC"
  3. 生成攻击脚本
    • "Test in browser"用于本地测试
    • "Copy HTML"用于攻击他人
  4. 可伪装为中奖页面等诱骗点击

2.2.2 CSRFTester

  1. 下载并运行(监听8008端口)
  2. 设置浏览器代理为8008
  3. 点击"Start Recording"开始检测
  4. 过滤无用数据包
  5. 点击"Generate HTML"生成攻击脚本

3. CSRF实战案例

3.1 DVWA靶场

3.1.1 环境搭建

  1. 下载DVWA:https://codeload.github.com/ethicalhack3r/DVWA/zip/master
  2. 修改config/config.inc.php.distconfig.inc.php
  3. 配置数据库密码
  4. 默认账号:admin/password

3.1.2 Low级别

  • 漏洞分析:无任何防御措施
  • 利用步骤
    1. 抓取修改密码请求
    2. 使用Burp生成CSRF PoC
    3. 构造HTML文件
    4. 受害者访问即修改密码

3.1.3 Medium级别

  • 漏洞分析:检查Referer是否包含主机名
  • 绕过方法
    1. 构造恶意页面
    2. 抓包修改Referer添加localhost
    3. 示例:Referer: http://localhost/attacker.html

3.1.4 High级别

  • 防御机制:Anti-CSRF token
  • 绕过方法
    1. 使用iframe嵌入目标页面获取token
    2. 通过JavaScript自动提交表单
    3. 关键代码:
    <iframe src="目标URL" id="hack" style="display:none;"></iframe>
    <script>
      function attack() {
        document.getElementsByName('user_token')[0].value = 
          document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
        document.getElementById("transfer").submit();
      }
    </script>
    

3.2 骑士CMS

3.2.1 环境搭建

  1. 下载地址:http://www.74cms.com/download/load/id/155.html
  2. 使用phpstudy搭建

3.2.2 利用过程

  1. 抓取添加管理员请求
  2. 生成CSRF PoC
  3. 伪装为中奖页面
  4. 可使用短域名进一步伪装
  5. 诱导管理员访问创建攻击者账户

3.2.3 关联漏洞

  • 代码执行漏洞:index.php?m=Admin&c=Tpl&a=set&tpl_dir=a'.${phpinfo()}.'

3.3 phpMyAdmin

3.3.1 环境搭建

  • 使用VulnSpy在线靶机:https://www.vulnspy.com/?u=pmasa-2017-9
  • 默认账号:root/toor

3.3.2 利用过程

  1. 构造修改密码的SQL:SET password=PASSWORD('attacker_pass');
  2. 生成GET型CSRF URL:
    http://target/pma/sql.php?db=mysql&table=user&sql_query=SET%20password%20=%20PASSWORD(%27attacker_pass%27)
    
  3. 使用短域名伪装
  4. 诱导管理员访问

4. 防御措施详解

4.1 Token防御机制

  • 每次会话生成唯一token
  • 表单提交必须携带有效token
  • 服务器端验证token有效性

4.2 Referer验证

  • 检查请求来源是否为可信域名
  • 注意:可被绕过(如存在开放重定向)

4.3 验证码

  • 关键操作要求输入验证码
  • 增加自动化攻击难度

4.4 SameSite Cookie

  • 设置Cookie的SameSite属性为Strict或Lax
  • 防止跨站请求携带认证Cookie

5. 高级绕过技术

5.1 绕过Referer检查

  • 利用子域名或相似域名
  • 利用浏览器漏洞或特性

5.2 窃取Token

  • 结合XSS漏洞获取token
  • 使用iframe嵌套窃取

5.3 点击劫持

  • 透明iframe覆盖诱骗点击
  • 结合社会工程学

6. 参考资源

  1. FreeBuf文章:https://www.freebuf.com/articles/web/118352.html
  2. OWASP CSRFTester:https://www.owasp.org/index.php/File:CSRFTester-1.0.zip
  3. 骑士CMS漏洞分析:http://www.yqxiaojunjie.com/index.php/archives/341/

本教学文档涵盖了CSRF漏洞的基础知识、利用方法、实战案例和防御措施,重点突出了不同场景下的攻击技术和防御方案,可作为Web安全学习和渗透测试的实用参考。

CSRF实战攻防教学文档 1. CSRF漏洞基础 1.1 CSRF漏洞简介 CSRF(跨站请求伪造)是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密等)。 与XSS的区别 :CSRF没有盗取cookie而是直接利用。 1.2 CSRF漏洞分类 1.2.1 GET型CSRF 只需要构造URL,诱导受害者访问利用 示例: http://example.com/transfer?amount=1000&to=attacker 1.2.2 POST型CSRF 需要构造自动提交或点击提交的表单 诱导受害者访问或点击利用 1.3 CSRF漏洞危害 未验证Referer或使用Token导致用户/管理员可被CSRF执行添加、修改、删除等操作 可能导致账户接管、数据泄露、资金损失等严重后果 1.4 CSRF漏洞修复方案 添加随机token值并验证 验证Referer 关键请求使用验证码功能 SameSite Cookie属性 2. CSRF漏洞利用方法 2.1 利用思路 寻找增删改的操作点 构造HTML表单 修改表单参数 诱导受害者访问/点击 验证操作是否成功执行 2.2 工具使用 2.2.1 BurpSuite 抓取目标请求 右击选择"Engagement tools" → "Generate CSRF PoC" 生成攻击脚本 "Test in browser"用于本地测试 "Copy HTML"用于攻击他人 可伪装为中奖页面等诱骗点击 2.2.2 CSRFTester 下载并运行(监听8008端口) 设置浏览器代理为8008 点击"Start Recording"开始检测 过滤无用数据包 点击"Generate HTML"生成攻击脚本 3. CSRF实战案例 3.1 DVWA靶场 3.1.1 环境搭建 下载DVWA: https://codeload.github.com/ethicalhack3r/DVWA/zip/master 修改 config/config.inc.php.dist 为 config.inc.php 配置数据库密码 默认账号:admin/password 3.1.2 Low级别 漏洞分析 :无任何防御措施 利用步骤 : 抓取修改密码请求 使用Burp生成CSRF PoC 构造HTML文件 受害者访问即修改密码 3.1.3 Medium级别 漏洞分析 :检查Referer是否包含主机名 绕过方法 : 构造恶意页面 抓包修改Referer添加 localhost 示例: Referer: http://localhost/attacker.html 3.1.4 High级别 防御机制 :Anti-CSRF token 绕过方法 : 使用iframe嵌入目标页面获取token 通过JavaScript自动提交表单 关键代码: 3.2 骑士CMS 3.2.1 环境搭建 下载地址: http://www.74cms.com/download/load/id/155.html 使用phpstudy搭建 3.2.2 利用过程 抓取添加管理员请求 生成CSRF PoC 伪装为中奖页面 可使用短域名进一步伪装 诱导管理员访问创建攻击者账户 3.2.3 关联漏洞 代码执行漏洞: index.php?m=Admin&c=Tpl&a=set&tpl_dir=a'.${phpinfo()}.' 3.3 phpMyAdmin 3.3.1 环境搭建 使用VulnSpy在线靶机: https://www.vulnspy.com/?u=pmasa-2017-9 默认账号:root/toor 3.3.2 利用过程 构造修改密码的SQL: SET password=PASSWORD('attacker_pass'); 生成GET型CSRF URL: 使用短域名伪装 诱导管理员访问 4. 防御措施详解 4.1 Token防御机制 每次会话生成唯一token 表单提交必须携带有效token 服务器端验证token有效性 4.2 Referer验证 检查请求来源是否为可信域名 注意:可被绕过(如存在开放重定向) 4.3 验证码 关键操作要求输入验证码 增加自动化攻击难度 4.4 SameSite Cookie 设置Cookie的SameSite属性为Strict或Lax 防止跨站请求携带认证Cookie 5. 高级绕过技术 5.1 绕过Referer检查 利用子域名或相似域名 利用浏览器漏洞或特性 5.2 窃取Token 结合XSS漏洞获取token 使用iframe嵌套窃取 5.3 点击劫持 透明iframe覆盖诱骗点击 结合社会工程学 6. 参考资源 FreeBuf文章: https://www.freebuf.com/articles/web/118352.html OWASP CSRFTester: https://www.owasp.org/index.php/File:CSRFTester-1.0.zip 骑士CMS漏洞分析: http://www.yqxiaojunjie.com/index.php/archives/341/ 本教学文档涵盖了CSRF漏洞的基础知识、利用方法、实战案例和防御措施,重点突出了不同场景下的攻击技术和防御方案,可作为Web安全学习和渗透测试的实用参考。