当前位置: 首页 > article >正文

DVWA——Open HTTP Redirect学习笔记

文章目录[TOC](文章目录)一、是什么HTTP 重定向的基本原理HTTP 重定向攻击的主要方式二、步骤1.Low2.Medium绕过方法详解协议相对 URLProtocol-Relative URL大小写混淆使用其他危险协议利用 URL 编码与畸形构造空字节截断PHP 5.3.4实际攻击演示漏洞根本原因3.HighDVWA High 级别的正确绕过姿势4.Impossible总结HTTP 开放重定向漏洞防御总结安全实现要点常见错误模式危险一、是什么HTTP 重定向Redirect是 Web 应用中常见的导航机制通过 Location 响应头或 meta 标签将用户从当前 URL 引导至另一个 URL。若开发者在实现重定向目标时未对用户输入进行严格校验则可能引发开放重定向漏洞甚至进一步导致账户劫持、钓鱼、OAuth 授权码窃取等高危后果HTTP 重定向的基本原理HTTP 重定向是服务器通知客户端如浏览器所请求资源已被移动至另一位置的机制通常通过返回 3xx 系列状态码实现。常见的重定向状态码包括301 Moved Permanently永久重定向表示所请求资源已被永久转移至新 URL。302 Found临时重定向表示所请求资源暂时位于另一 URL。303 See Other建议客户端使用 GET 方法获取资源。307 Temporary Redirect临时重定向且保持原请求方法不变。308 Permanent Redirect永久重定向且保持原请求方法不变。HTTP 重定向攻击的主要方式此类攻击利用了合法的重定向机制通过不同方式将用户引向恶意目标。常见方式包括开放重定向Open Redirect攻击者通过操控网站 URL 中的重定向参数来控制跳转目标。例如合法参数redirecthttp://example.com被篡改为redirecthttp://malicious.com导致用户被重定向至恶意网站。钓鱼攻击Phishing利用重定向将用户引导至伪装成合法网站的恶意页面诱骗用户输入登录凭证、银行账号等敏感信息。恶意软件传播Malware Distribution通过重定向将用户引导至托管恶意软件的站点诱使其下载并安装恶意程序。二、步骤1.Low代码如下?phpif(array_key_exists(redirect,$_GET)$_GET[redirect]!){header(location: .$_GET[redirect]);exit;}http_response_code(500);?pMissing redirect target./p?phpexit;?用户输入直接拼接到响应头代码未对 $_GET[‘redirect’] 做任何验证或过滤直接将其拼接到 Location 头部。缺少白名单或格式校验攻击者可以指定任意 URL包括外部恶意域名、javascript: 伪协议、甚至带有 CRLF 的字符串作为跳转目标。无条件信任客户端数据这是导致开放重定向的根本原因。修改重定向至百度成功跳转2.Medium后端代码如下?php// 通过黑名单过滤掉以 http:// 或 https:// 开头的绝对 URL从而将重定向限制在“相对路径”或“其他协议”范围内。//但由于正则逻辑不严谨、未考虑多种 URL 表示变体以及 Location 头的解析特性此限制可被轻易绕过。if(array_key_exists(redirect,$_GET)$_GET[redirect]!){if(preg_match(/http:\/\/|https:\/\//i,$_GET[redirect])){http_response_code(500);?pAbsolute URLs not allowed./p?phpexit;}else{header(location: .$_GET[redirect]);exit;}}http_response_code(500);?pMissing redirect target./p?phpexit;?绕过方法详解协议相对 URLProtocol-Relative URL使用//开头的 URL浏览器会自动继承当前页面的协议HTTP 或 HTTPS。此形式不包含http://或https://可绕过正则检测。Payload:?redirect//evil.com/phish当用户访问https://trusted-site.com/redirect.php?redirect//evil.com时将被重定向至https://evil.com实现钓鱼攻击。大小写混淆正则表达式虽使用了i修饰符不区分大小写但部分解析器在处理 URL 协议时可能对全大写、混合大小写有不同解释尽管本例正则已防护此思路在其他场景仍有效。然而更关键的绕过在下一条。使用其他危险协议Location头不仅支持 HTTP/HTTPS还支持javascript:、data:、vbscript:等伪协议。在老旧浏览器中javascript:可触发 XSS。Payload:?redirectjavascript:alert(document.domain)虽然现代主流浏览器Chrome、Firefox已限制Location头跳转至javascript:但部分环境如某些移动端 WebView、旧版 IE仍可能执行。该代码未对协议类型做任何限制属于严重疏忽。利用 URL 编码与畸形构造换行符注入CRLF若$_GET[redirect]中包含%0d%0a可能提前结束Location头注入自定义 HTTP 响应头。?redirect%0d%0aSet-Cookie:%20sessionattacker代码未过滤控制字符直接拼接导致响应头拆分风险。反斜杠与符号混淆?redirect\/evil.com ?redirecthttps:evil.com某些浏览器或中间件会将这些视为有效绝对 URL。空字节截断PHP 5.3.4若 PHP 版本较老可通过%00截断字符串使正则匹配失效?redirecthttp://evil.com%00正则匹配到%00前的内容实际上preg_match将%00视为字符串一部分但在底层 C 函数中可能截断导致绕过。此方法受版本限制但说明黑名单的不可靠性。实际攻击演示场景钓鱼邮件攻击者向受害者发送链接https://your-bank.com/redirect.php?redirect//your-bank.com.attacker.net/login用户看到域名your-bank.com认为安全。点击后访问真实银行的重定向脚本。正则未匹配到http://或https://脚本执行跳转。浏览器加载https://your-bank.com.attacker.net/login攻击者伪造的银行登录页。用户输入凭证账号被盗。漏洞根本原因黑名单思维试图枚举“坏的”模式而非定义“允许的”模式。URL 表示法极其丰富RFC 3986攻击面远不止http://两种。对Location头解析行为不了解协议相对 URL、伪协议、控制字符均可改变浏览器行为。未使用安全的 URL 解析函数如parse_url()并结合组件验证。3.High?phpif(array_key_exists(redirect,$_GET)$_GET[redirect]!){if(strpos($_GET[redirect],info.php)!false){header(location: .$_GET[redirect]);exit;}else{http_response_code(500);?pYou can only redirect to the info page./p?phpexit;}}http_response_code(500);?pMissing redirect target./p?phpexit;?这段 PHP 代码试图通过检查字符串 info.php 是否存在于 redirect 参数中来限制重定向目标为特定页面。然而这种基于子串包含的黑名单逻辑极易被绕过仍然存在严重的开放重定向漏洞。使用 strpos() 判断用户输入的 redirect 参数中是否包含子串 “info.php”。若包含则直接将该参数值拼接到 Location 响应头中进行跳转。开发者试图确保用户只能被重定向到 info.php 相关的页面从而防止跳转到外部恶意站点。DVWA High 级别的正确绕过姿势基于上述分析针对 DVWA 的high.php有效的开放重定向 Payload 包括利用查询参数?redirecthttps://evil.com/?fakeinfo.php?redirecthttps://evil.com/?33info.php利用路径包含若允许子目录?redirecthttps://evil.com/info.php路径中直接包含info.php协议相对 URL 结合路径?redirect//evil.com/info.php所有方法的核心都是将info.php放置在 URL 中会被发送到服务器的部分协议、域名之后片段之前4.Impossible?php$target;if(array_key_exists(redirect,$_GET)is_numeric($_GET[redirect])){switch(intval($_GET[redirect])){case1:$targetinfo.php?id1;break;case2:$targetinfo.php?id2;break;case99:$targethttps://digi.ninja;break;}if($target!){header(location: .$target);exit;}else{?Unknown redirect target.?phpexit;}}?Missing redirect target.is_numeric($_GET[redirect])确保参数仅能为数字字符串拒绝任何包含字母、符号、路径或域名的输入switch-case 将有限的几个数字值映射到预定义的内部路径或外部 URL。攻击者无法控制$target的实际内容只能从预设选项中选择最终 header(location: . $target) 中的 $target 完全来自代码内部硬编码不包含任何用户可控部分因此不存在响应头注入或任意跳转风险总结HTTP 开放重定向漏洞防御总结安全实现要点核心原则具体做法示例代码片段1. 间接引用参数映射用户传递标识符如数字、字符串键服务端根据白名单映射到真实 URL。$targets [1 /info.php, 2 /profile]; $url $targets[$_GET[id]] ?? null;2. 严格输入类型校验使用is_numeric()、ctype_digit()或正则限定输入格式拒绝任意字符串。if (!is_numeric($_GET[redirect])) die();3. 相对路径强制仅允许以/开头且不包含//、..的相对路径禁止外部协议。if (preg_match(/^\/[^\/].*/, $path))4. 组件化 URL 验证用parse_url()提取各组件分别验证协议、主机、路径是否在白名单内。$host parse_url($url, PHP_URL_HOST); if (in_array($host, $allowed_hosts))5. 外部跳转中间确认页对于必须跳往外部的场景先展示提示页由用户主动点击确认后再跳转。输出“您即将离开本站前往https://...是否继续”链接。常见错误模式危险错误写法漏洞成因绕过示例header(Location: . $_GET[redirect]);直接拼接用户输入完全信任客户端数据。?redirecthttps://evil.comif (strpos($_GET[redirect], info.php) ! false)子串包含检查可被查询参数、路径等绕过。?redirecthttps://evil.com/?xinfo.phpif (!preg_match(/http://https:///i, $url))黑名单不完整无法覆盖协议相对 URL、伪协议等。if (parse_url($url, PHP_URL_HOST) $_SERVER[HTTP_HOST])解析差异可能被利用如evil.comtrusted.com?redirecthttps://trusted.comevil.com旧版绕过以下绝不将用户输入直接拼接到 HTTP 响应头必须经过严格的验证或映射。使用白名单而非黑名单——只允许已知安全的地址而不是试图枚举所有危险模式。理解 HTTP 协议与 URL 规范协议相对 URL//、片段标识符#、控制字符等均可用于绕过简单过滤。业务需要外部跳转时必须通过中间页告知用户并限制可跳转的域名列表。

相关文章:

DVWA——Open HTTP Redirect学习笔记

文章目录[TOC](文章目录)一、是什么?HTTP 重定向的基本原理HTTP 重定向攻击的主要方式二、步骤1.Low2.Medium绕过方法详解协议相对 URL(Protocol-Relative URL)大小写混淆使用其他危险协议利用 URL 编码与畸形构造空字节截断(PHP …...

M2LOrder模型Python爬虫情感分析实战:自动化舆情监控系统

M2LOrder模型Python爬虫情感分析实战:自动化舆情监控系统 你有没有遇到过这种情况?自家产品在社交媒体上被用户疯狂吐槽,市场部却要等到第二天才从报告里看到;竞争对手突然搞了个大动作,自家团队却后知后觉&#xff0…...

Cadence 17.2 allegro怎么把线从中间剪掉一段

可以点Delete命令右键选cut剪切,在点线的要剪切的开始点和结束点。1、减掉一段丝印线右键-->cut选中要裁剪的线的开始点和结束点,右键done2、减掉一段导线右键-->cut选中要裁剪的线的开始点和结束点,右键done。...

Poppler for Windows:一站式PDF处理解决方案架构解析与实战指南

Poppler for Windows:一站式PDF处理解决方案架构解析与实战指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在Windows环境下处理PD…...

Lean量化交易引擎架构设计与C/Python双语言策略开发实践指南

Lean量化交易引擎架构设计与C#/Python双语言策略开发实践指南 【免费下载链接】Lean Lean Algorithmic Trading Engine by QuantConnect (Python, C#) 项目地址: https://gitcode.com/GitHub_Trending/le/Lean 在当今金融科技快速发展的时代,量化交易已成为机…...

Python定时任务实战:让脚本自己跑起来

为什么需要定时任务? 手动执行脚本很麻烦?定时任务来帮你! 常见场景: 每天2点自动备份数据库 每小时抓取一次股票价格 每周一发送工作周报 每月1号生成月度报表 本文教你多种方式实现Python定时任务,让脚本自动化运行! 方案一:使用schedule库(推荐新手) 简介 sch…...

电子书怎么转TXT?这4个电子书转TXT工具亲测有效,小白也能秒会!

随着数字阅读的普及,EPUB格式电子书因排版精美深受用户喜爱,但在编辑、手机阅读或跨设备分享时,TXT格式的兼容性和灵活性更具优势。本文针对不同使用场景,整理了4种亲测有效的EPUB转TXT方法,每个方法均拆解详细步骤&am…...

DOM-to-Image:前端开发中的DOM渲染到图像转换技术深度解析

DOM-to-Image:前端开发中的DOM渲染到图像转换技术深度解析 【免费下载链接】dom-to-image Generates an image from a DOM node using HTML5 canvas 项目地址: https://gitcode.com/gh_mirrors/do/dom-to-image 在当今Web应用开发中,将动态DOM内容…...

JS——动态判断节假日(支持自定义节假日与调休规则)

1. 为什么需要动态判断节假日? 在日常开发中,我们经常会遇到需要判断某一天是否是节假日的场景。比如电商平台的促销活动页面需要显示"节假日不发货"的提示,或者企业考勤系统需要自动计算员工的休假天数。传统的做法是硬编码节假日…...

DIY蝶形激光器驱动:从零开始搭建窄脉冲种子源控制系统(附详细参数配置)

DIY蝶形激光器驱动:从零开始搭建窄脉冲种子源控制系统 在电子爱好者和激光技术初学者的世界里,能够亲手搭建一套完整的蝶形激光器驱动系统无疑是一项极具挑战性和成就感的项目。不同于市面上现成的商业产品,DIY方案不仅能让你深入理解激光器的…...

Bilibili API评论接口终极调用指南:5个高效数据获取技巧

Bilibili API评论接口终极调用指南:5个高效数据获取技巧 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mi…...

MPL3115A2传感器驱动开发与嵌入式高度气压测量实战

1. MPL3115A2 压力/高度/温度传感器深度技术解析 MPL3115A2 是 NXP(现为恩智浦半导体)推出的一款高精度、低功耗、IC 接口的绝对压力传感器,集成温度测量与气压高度计算引擎。该器件并非简单的模拟信号采集芯片,而是一个具备完整数…...

Linux环境下Chrony高精度时间同步实战指南

1. 为什么需要高精度时间同步? 想象一下这样的场景:你管理的服务器集群在处理金融交易时,因为各节点时间偏差超过50毫秒,导致交易顺序错乱引发数据不一致;或者分布式数据库因为时钟不同步出现写入冲突。这些问题的根源…...

深入LPDDR5 Rx Offset校准:为什么你的DRAM上电后时序总是不对?

深入解析LPDDR5 Rx Offset校准:解决DRAM上电时序漂移的实战指南 当你在凌晨三点的实验室里,面对第七次冷启动失败的系统,示波器上那些不稳定的DQ信号波形是否让你感到绝望?这可能是LPDDR5的Rx Offset校准出了问题。让我们从一次真…...

图像处理避坑指南:为什么你的孔洞填充总把背景也填白了?(附Python/OpenCV代码对比)

图像处理避坑指南:为什么你的孔洞填充总把背景也填白了? 在数字图像处理中,孔洞填充是一个看似简单却暗藏玄机的操作。许多初学者在实现这一功能时,常常遇到填充结果"泛滥成灾"——不仅填满了目标孔洞,连背景…...

Android高级开发工程师(KTV领域)技术深度解析与面试指南

前言:KTV应用开发的独特挑战与价值 在移动互联网深入发展的今天,KTV娱乐体验也逐渐向线上化和智能化转型。作为Android应用高级开发工程师,投身于KTV相关产品的开发与维护,意味着需要面对一系列独特的技术挑战: 实时性与低延迟: 歌唱对音频的实时同步要求极高,任何明显…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)贡

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

uniapp地图开发实战:marker聚合与点击事件优化指南

1. 为什么需要marker聚合功能 第一次在uniapp里做地图开发时,我被客户的需求难住了——要在1平方公里范围内显示3000多个充电桩位置。当我把所有marker点渲染出来后,手机直接卡成幻灯片,用户根本没法正常操作。这就是典型的marker性能瓶颈问…...

OpenClaw Skills 开发实战笔记

什么是 Skill? 简单说,Skill 是一个文件夹,里面包含 SKILL.md(核心指令文件)和配套脚本。它的作用是给 Agent 赋予特定的"工作流程"能力,而不是零散的、每次都要重新解释的指令。Skill vs Memory…...

保姆级教程:手把手教你查看FortiGate防火墙的‘固件和通用更新’服务状态

FortiGate防火墙固件更新状态检查全攻略:从Web界面到CLI的完整指南 在网络安全运维的日常工作中,FortiGate防火墙的固件管理是保障系统安全稳定的关键环节。特别是从FortiOS 7.4版本开始,固件更新规则的变化让许多管理员在操作过程中遇到了意…...

本体论与知识图谱,从 1 亿条杂乱数据到 3400 万高质量节点:这篇论文重新定义知识图谱构建

介绍一篇关于知识图谱和本体论的工作。 作者关注的问题很明确:当人们把一个超大规模、开放编辑的知识库(例如 Wikidata)变成一个“可用的属性图(typed property graph)”时,真正困难的不是把数据导出来&am…...

如何彻底修复Windows更新故障:Reset Windows Update Tool完整使用指南

如何彻底修复Windows更新故障:Reset Windows Update Tool完整使用指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...

Anthropic Harness工程入门基础教程(非常详细),收藏这一篇就够了!

用 ChatGPT 和用 Claude Code,是两种完全不同的体感。 前者就是聊天,后者是在聊天的基础上给用户干活。 像 Claude Code 这样的 Coding Agent 打开终端,需求丢进去,它开始读文件、搜索代码、执行命令、跑测试、提 PR&#xff0c…...

图图的嗨丝造相模型应用:在阿里云上打造你的专属风格图片生成服务

图图的嗨丝造相模型应用:在阿里云上打造你的专属风格图片生成服务 1. 项目概述与核心价值 想快速搭建一个能生成特定风格图片的AI服务吗?"图图的嗨丝造相-Z-Image-Turbo"是一个基于Z-Image-Turbo模型、专门针对特定服饰风格进行优化的LoRA版…...

企业级OpenClaw集中部署安全架构避坑全攻略

只需1小时全链路加固,让OpenClaw稳定上线、合规无忧 在一次大型制造业项目中,某金融客户耗时三个月完成OpenClaw功能对接,却因忽略安全配置,半天内被黑客扫光知识库、篡改AI流程,直接触发合规问责。你是否也担心“一装…...

BabelDOC企业级本地化部署实战:构建安全高效的文档翻译离线解决方案

BabelDOC企业级本地化部署实战:构建安全高效的文档翻译离线解决方案 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 在数据安全合规要求日益严格的今天,企业级文档翻译系…...

抖音热榜API实战:从签名生成到数据获取的完整Java指南

1. 抖音热榜API接入前的准备工作 第一次接触抖音热榜API时,我踩过不少坑。最头疼的就是签名生成那部分,明明照着文档做却总是报错。后来才发现是参数顺序搞错了。为了避免大家走弯路,我把完整的接入流程梳理出来。 首先需要注册开发者账号。打…...

Windows内核驱动手动映射终极指南:KDMapper实战深度解析

Windows内核驱动手动映射终极指南:KDMapper实战深度解析 【免费下载链接】kdmapper KDMapper is a simple tool that exploits iqvw64e.sys Intel driver to manually map non-signed drivers in memory 项目地址: https://gitcode.com/gh_mirrors/kd/kdmapper …...

如何用Python脚本让百度网盘下载速度提升10倍?终极免费解决方案

如何用Python脚本让百度网盘下载速度提升10倍?终极免费解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘几十KB的龟速下载而烦恼吗&#xff…...

小白也能懂!Agent如何“看见”并操作电脑?收藏这份操作指南

本文深入浅出地解析了Agent操作电脑的原理,核心在于将电脑界面转化为可观察的输入,通过点击、输入等工具执行“观察—决策—执行—再观察”的循环任务。文章拆解了Agent如何“看见”屏幕、将目标转化为具体动作、执行动作并判断结果等关键问题&#xff0…...