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机器视觉:背景减除与前景分离
在实验室的一角,阳光仿若一个急性子的小精灵,迫不及待地穿过窗帘缝隙,在阿强的桌面上欢快跳跃,洒下一片片斑驳陆离的光影,似乎在催促着阿强赶紧开启今日的奇妙探索。阿强端坐在桌前,眼神炽热地盯着眼前那台…...
如何用deberta-v3-base-zeroshot-v2.0构建企业级NLP应用?完整教程来了
如何用deberta-v3-base-zeroshot-v2.0构建企业级NLP应用?完整教程来了 【免费下载链接】deberta-v3-base-zeroshot-v2.0 项目地址: https://ai.gitcode.com/hf_mirrors/NingBo_Ascend/deberta-v3-base-zeroshot-v2.0 deberta-v3-base-zeroshot-v2.0是一款基…...
DIY复刻经典:Texar Audio Prism动态处理器克隆套件全攻略
1. 项目概述:Texar Audio Prism 克隆套件如果你在专业音频圈子里混过一段时间,尤其是对上世纪八九十年代那些经典的、带点“魔法”色彩的外置动态处理器感兴趣,那么“Texar Audio Prism”这个名字你大概率不会陌生。它不是最常见的1176或者LA…...
收藏必看|2026 版大厂 AI 岗位薪资曝光!普通程序员转型大模型最全指南
深夜收到大厂 HR 好友发来的内部资料,再三叮嘱切勿对外泄露。如今网络信息传播速度极快,这份 2026 年企业 AI 岗真实薪资内幕,也值得给广大程序员、零基础入行小白参考借鉴。 翻看完整薪资台账后,真切感受到当下大模型赛道的薪资差…...
Vue3 图片标框功能实现方案
基于 Vue3 组合式 API 的图片标框(画框、标注、选框)完整实现,核心逻辑封装在 GetBoxes 组件里,复制就能用 一、功能说明 ✅ 在图片上鼠标拖拽画矩形框 ✅ 实时显示框坐标(x, y, width, height) ✅ 支持多…...
PCB虚焊/走线断裂/焊盘脱落工程师易漏判
PCB 故障中,30% 并非元件损坏,而是 PCB 本身的隐性故障—— 虚焊、走线断裂、焊盘脱落、过孔开路。这类故障外观隐蔽、时好时坏、排查难度大,很多工程师反复更换元件仍无法解决,最终误判为 “板报废”。一、PCB 隐性故障核心成因…...
taotoken如何帮助ubuntu开发者应对大模型api的频繁更新与版本迭代
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken如何帮助Ubuntu开发者应对大模型API的频繁更新与版本迭代 对于在Ubuntu环境下进行开发的工程师而言,大模型API…...
FairyGUI Unity鼠标悬停与点击对象获取原理与实战
1. 这不是“加个OnMouseEnter就能用”的事:FairyGUI在Unity中处理鼠标交互的真实困境很多人第一次在Unity里集成FairyGUI,想实现“鼠标悬停显示提示”或“点击高亮当前按钮”,下意识就去翻Unity的MonoBehaviour文档,找OnMouseEnte…...
Qri高级功能:如何使用JSON Schema验证和描述数据集结构
Qri高级功能:如何使用JSON Schema验证和描述数据集结构 【免费下载链接】qri youre invited to a data party! 项目地址: https://gitcode.com/gh_mirrors/qr/qri Qri是一个强大的开源数据协作工具,它提供了丰富的功能来帮助用户管理、共享和验证…...
Matlab,plot绘图如何添加边框
matlab生成的图——编辑(E)——坐标区属性(A)——框样式——Box,勾选效果:...
艾尔登法环存档迁移终极指南:3分钟解决角色转移难题
艾尔登法环存档迁移终极指南:3分钟解决角色转移难题 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 还在为《艾尔登法环》存档版本不兼容而烦恼吗?EldenRingSaveCopier 是你的终极解决…...
