DVWA靶场Open HTTP Redirect (重定向) 漏洞所有级别通关教程及源码审计
目录标题
- Open HTTP Redirect
- low
- 源码审计
- medium
- 源码审计
- high
- 源码审计
- impossible
- 源码审计
Open HTTP Redirect
HTTP 重定向(HTTP Redirect Attack)是一种网络,利用 HTTP 协议中的重定向机制,将用户引导至恶意网站或非法页面,进而进行钓鱼、恶意软件传播等恶意行为。攻击者通常通过操控重定向响应头或 URL 参数实现这种
HTTP 重定向基本原理
HTTP 重定向是一种用于通知客户端(如浏览器)请求的资源已被移动到另一个位置的机制,通常由服务器发送 3xx 系列状态码响应。常见的重定向状态码包括:
-
301 Moved Permanently:永久重定向,表示请求的资源已被永久移动到新的 URL。
-
302 Found:临时重定向,表示请求的资源临时在另一个 URL 上。
-
303 See Other:建议客户端使用 GET 方法获取资源。
-
307 Temporary Redirect:临时重定向,保持请求方法不变。
-
308 Permanent Redirect:永久重定向,保持请求方法不变。
HTTP 重定向方式
HTTP 重定向主要利用了合法的重定向机制,通过各种方式将用户重定向到恶意网站。常见的方式包括:
- 开放重定向(Open Redirect):
- 通过操控网站的 URL 参数,实现对重定向目标的控制。例如,合法网站的 URL 参数
redirect=http://example.com被替换为redirect=http://malicious.com,导致用户被重定向到恶意网站。
- 钓鱼(Phishing):
- 利用重定向将用户引导到伪装成合法网站的恶意网站,诱骗用户输入敏感信息(如登录凭证、银行账号)。
- 恶意软件传播(Malware Distribution):
- 通过重定向将用户引导到托管恶意软件的网站,诱骗用户下载和安装恶意软件。
low
随便点击一个链接,发现url栏有传参点

定位源码查看,发现重定向点

修改为source/low.php?redirect=http://www.baidu.com

成功跳转
源码审计
没有存在过滤,不安全
<?php
// 检查URL中是否存在'redirect'参数,并且该参数不为空。
if (array_key_exists("redirect", $_GET) && $_GET['redirect'] != "") {// 如果存在'redirect'参数且不为空,则进行重定向到指定的路径。header("location: " . $_GET['redirect']);exit; // 终止脚本执行
}
// 如果'redirect'参数不存在或为空,则返回HTTP 500状态码并显示缺少重定向目标的错误信息。
http_response_code(500);
?>
<p>Missing redirect target.</p>
<?php
exit; // 终止脚本执行
?>
medium
与low级别的方法没什么区别,查看源码可以发现不同的地方在于禁用了http://,https:// 字段
构造url绕过 source/low.php?redirect=www.baidu.com,如果没有明确指定协议,直接以 // 开头,则表示使用和当前页面相同的协议,便可以绕过了

源码审计
利用正则表达式检查是否含有http:// https:// 字段。如果有则过滤
<?php
// 检查URL中是否存在'redirect'参数,并且该参数不为空。
if (array_key_exists("redirect", $_GET) && $_GET['redirect'] != "") {// 使用正则表达式检查'redirect'参数是否包含不安全的绝对URL。if (preg_match("/http:\/\/|https:\/\//i", $_GET['redirect'])) {// 如果是绝对URL,则返回HTTP 500状态码,并显示错误信息。http_response_code(500);?><p>Absolute URLs not allowed.</p><?phpexit; // 终止脚本执行} else {// 如果是相对路径,则进行重定向到指定的路径。header("location: " . $_GET['redirect']);exit; // 终止脚本执行}
}
// 如果'redirect'参数不存在,则返回HTTP 500状态码并显示缺少重定向目标的错误信息。
http_response_code(500);
?>
<p>Missing redirect target.</p>
<?php
exit; // 终止脚本执行
?>
high
查看源码可以发现与上面两个级别不同的是检查是否有info.php字段,如果没有,则不能进行重定向
构造代码绕过:source/low.php?redirect=http://www.baidu.com?id=info.php

成功绕过
源码审计
检查了url种是否含有info.php字段,如果没有则会过滤
<?php
// 检查URL中是否存在'redirect'参数,并且该参数不为空。
if (array_key_exists("redirect", $_GET) && $_GET['redirect'] != "") {// 检查'redirect'参数中是否包含"info.php"。if (strpos($_GET['redirect'], "info.php") !== false) {// 如果包含"info.php",则进行重定向。header("location: " . $_GET['redirect']);exit; // 终止脚本执行} else {// 如果不包含"info.php",返回HTTP 500状态码和错误信息。http_response_code(500);?><p>You can only redirect to the info page.</p><?phpexit; // 终止脚本执行}
}
// 如果'redirect'参数不存在或为空,则返回HTTP 500状态码并显示缺少重定向目标的错误信息。
http_response_code(500);
?>
<p>Missing redirect target.</p>
<?php
exit; // 终止脚本执行
?>
impossible
源码审计
采用了更加符合现实情况的方法,较为安全
<?php
// 初始化目标URL为空字符串
$target = "";
// 检查URL中是否存在'redirect'参数,并且该参数是一个数字。
if (array_key_exists("redirect", $_GET) && is_numeric($_GET['redirect'])) {// 根据'redirect'参数的整数值选择不同的重定向目标。switch (intval($_GET['redirect'])) {case 1:// 如果参数值为1,设置目标为"info.php?id=1"$target = "info.php?id=1";break;case 2:// 如果参数值为2,设置目标为"info.php?id=2"$target = "info.php?id=2";break;case 99:// 如果参数值为99,设置目标为"https://digi.ninja"$target = "https://digi.ninja";break;}// 如果目标URL已被设置,执行重定向。if ($target != "") {header("location: " . $target);exit; // 结束脚本执行} else {?>Unknown redirect target. <!-- 输出未知重定向目标的错误信息 --><?phpexit; // 结束脚本执行}
}
?>
Missing redirect target. <!-- 输出缺少重定向目标的信息 -->
相关文章:
DVWA靶场Open HTTP Redirect (重定向) 漏洞所有级别通关教程及源码审计
目录标题 Open HTTP Redirectlow源码审计 medium源码审计 high源码审计 impossible源码审计 Open HTTP Redirect HTTP 重定向(HTTP Redirect Attack)是一种网络,利用 HTTP 协议中的重定向机制,将用户引导至恶意网站或非法页面&am…...
探索 JMeter While Controller:循环测试的奇妙世界
嘿,宝子们!今天咱们就来聊聊 JMeter 里超级厉害的 While 控制器,它就像是一把神奇的钥匙,能帮我们打开循环测试的大门,模拟出各种各样复杂又有趣的场景哦! 一、While 控制器初印象 想象一下,你…...
Flutter踩坑记-第三方SDK不兼容Gradle 8.0,需适配namespace
最近需要集成Flutter作为Module,Flutter依赖了第三方库,Gradle是8.0版本。 编译报错: 解决办法是在.android根目录下的build.gradle下新增一行代码: buildscript {ext.kotlin_version "1.8.22"repositories {google()…...
ubuntu支持ssh
Ubuntu 默认是支持 SSH 的,但通常并不会在安装时启用 SSH 服务。为了能够远程连接到 Ubuntu 系统,需要安装并启动 SSH 服务器(即 OpenSSH)。以下是如何在 Ubuntu 系统中启用和配置 SSH 服务的步骤: 检查 SSH 是否已安…...
浏览器书签智能分类
浏览器书签智能分类工具 最近发现浏览器的书签越来越乱了,主要是因为自己太懒,其次之前建的分类太多又乱,重新手动整理确实比较烦。因此有了这个小项目。借助智谱AI的力量对书签进行重新分类。 项目简介 本工具用于自动整理浏览器书签&…...
通俗易懂的讲一下Vue的双向绑定和React的单向绑定
1.Vue 的双向绑定: <template><!-- 输入框和数据自动绑定,就像连体婴儿,一个动另一个也动 --><input v-model"message"><p>{{ message }}</p><!-- 完整表单示例 --><form><!-- 所有…...
Redis 深度解析:从入门到精通
引言 Redis 是一个开源的、高性能的键值存储系统,它支持多种数据结构,并且提供了丰富的功能和接口。作为内存数据库,Redis 以其快速的数据访问速度、灵活的数据模型以及持久化选项而闻名。本文将详细介绍 Redis 的核心概念、工作原理及其应用…...
基于物联网的冻保鲜运输智能控制系统
基于物联网的冻保鲜运输智能控制系统设计文档 1. 项目开发背景 随着全球化贸易的发展,冷链物流在现代运输行业中扮演着日益重要的角色。尤其是冻品、食品、药品等对运输环境有着严格要求的货物,其运输过程中温度、湿度等环境参数必须严格控制ÿ…...
【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二)
【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二) 【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度…...
论文解读之learning to summarize with human feedback
最近在看大模型训练相关的论文,预计会追溯经典的和最新的训练策略以及微调原理等 本次解读经典论文learning to summarize with human feedback 一、简介 部分生成任务需要对齐人类偏好,但是根据最大化可能性(对数似然)进行微调…...
STM32学习(六 )
串口初始化IO引脚 串口的引脚在哪里 串口可以利用GPIO_InitTypeDef结构体和GPIO_Init()函数进行初始化 USART_InitTypeDef USART_InitStruct;//建立串口结构体USART_InitStruct.USART_BaudRate 115200;//波特率115200USART_InitStruct.USART_Mode US…...
基于 GitHub API 的 Issue 和 PR 自动化解决方案
文章目录 摘要引言优化 Issue 和 PR 管理的方法工具选择流程优化 自动化 Issue 和 PR 管理代码逻辑详解获取 Issue 数据为 Issue 添加标签将 Issue 分配给开发者主逻辑 实际运行效果进一步扩展QA 环节总结参考资料 摘要 在开源项目中,Issue 和 Pull Request&#x…...
56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息
前言 在现代 Web 开发中,地图应用越来越成为重要的组成部分。OpenLayers 是一个功能强大的 JavaScript 地图库,它提供了丰富的地图交互和操作功能,而 Vue 3 是当前流行的前端框架之一。在本篇文章中,我们将介绍如何在 Vue 3 中集…...
文件本地和OSS上传
这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…...
elementui table 表格 分页多选,保持选中状态
elementui多选时分页,解决选中状态无法保留选中项问题: 在el-table标签中加入row-key,row-key的值取当前数据里的唯一key在el-table-column selection 项中加入以下:reserve-selection“true” 完成后,将需要清空的地方 ( 如返回…...
MSE+Range案例
MSE的demo实现思路:首先准备fmp4格式的视频地址或者切片,接着将MSE挂载到video上,创建createObjectURL转二进制数据,fetch请求在线地址,分段请求,监听这个数据流的获取状态,当这个ReadyState为o…...
C# 设计模式(结构型模式):代理模式
C# 设计模式(结构型模式):代理模式 在软件开发中,有时我们需要通过某种方式间接地访问一个对象,这时就可以使用代理模式(Proxy Pattern)。代理模式通过引入一个代理对象来控制对目标对象的访问…...
YOLO——pytorch与paddle实现YOLO
YOLO——pytorch与paddle实现YOLO 本文将深入探讨YOLO目标检测的理论基础,并通过PyTorch和PaddlePaddle两个深度学习框架来展示如何实现基础的YOLO模型。我们将首先介绍YOLO的基本概念,这些理论基础是理解和实现YOLO网络的基础。通过PyTorch和PaddlePad…...
持续大额亏损,销量增幅有限,北汽蓝谷依旧黯然神伤
撰稿 | 行星 来源 | 贝多财经 “起了个大早,赶了个晚集”,用在如今的北汽蓝谷身上再合适不过。 2025年的第一个工作日,北汽蓝谷新能源科技股份有限公司(SH:600733,简称“北汽蓝谷”)对外披露了子公司北京…...
C# OpenCV机器视觉:背景减除与前景分离
在实验室的一角,阳光仿若一个急性子的小精灵,迫不及待地穿过窗帘缝隙,在阿强的桌面上欢快跳跃,洒下一片片斑驳陆离的光影,似乎在催促着阿强赶紧开启今日的奇妙探索。阿强端坐在桌前,眼神炽热地盯着眼前那台…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
