首页 > 编程语言 >DVWA靶场Open HTTP Redirect (重定向) 漏洞所有级别通关教程及源码审计

DVWA靶场Open HTTP Redirect (重定向) 漏洞所有级别通关教程及源码审计

时间:2025-01-04 10:03:06浏览次数:3  
标签:Redirect redirect info HTTP 重定向 源码 php

目录标题

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 重定向主要利用了合法的重定向机制,通过各种方式将用户重定向到恶意网站。常见的方式包括:

  1. 开放重定向(Open Redirect)
  • 通过操控网站的 URL 参数,实现对重定向目标的控制。例如,合法网站的 URL 参数 redirect=http://example.com 被替换为 redirect=http://malicious.com,导致用户被重定向到恶意网站。
  1. 钓鱼(Phishing)
  • 利用重定向将用户引导到伪装成合法网站的恶意网站,诱骗用户输入敏感信息(如登录凭证、银行账号)。
  1. 恶意软件传播(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>
        <?php
        exit; // 终止脚本执行
    } 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>
        <?php
        exit; // 终止脚本执行
    }
}
// 如果'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. <!-- 输出未知重定向目标的错误信息 -->
        <?php
        exit; // 结束脚本执行
    }
}
?>
Missing redirect target. <!-- 输出缺少重定向目标的信息 -->

标签:Redirect,redirect,info,HTTP,重定向,源码,php
From: https://blog.csdn.net/m0_74786138/article/details/144904420

相关文章

  • 请说说你对HTTPS证书的了解
    HTTPS证书是前端开发中确保网络通信安全的重要组成部分。以下是我对HTTPS证书的了解,主要从其定义、功能、申请流程以及使用注意事项等方面进行阐述:一、HTTPS证书定义HTTPS证书是基于HTTP协议,通过SSL/TLS实现数据加密和服务器身份验证的通信协议中使用的数字证书。它是由可信的第......
  • ssm毕设糖果销售管理系统源码+程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着人们生活水平的提高和消费习惯的变化,糖果市场日益繁荣,糖果销售管理系统成为提升销售效率、优化库存管理、增强客户体验的重要工具。目前,国内外关......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要本论文主要论述了如何使用SSM框架开发一个网络课程系统,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构Java技术,面向对象编程思想进行项目开发。在引言中,将论述网络课程系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设健康饮食推荐系统。本设计主要实现集人性化、高效率、便捷等优点于一身的健康饮......
  • (赠源码)基于spark大数据分析的手机商城推荐系统的设计与实现33238-计算机原创毕设项目
    摘要随着移动互联网的快速发展,手机已经成为人们生活中必不可少的日常用品。然而,在众多手机品牌和型号中选择一款适合自己的手机变得越来越困难。为了帮助消费者在海量的手机产品中做出最佳选择,手机商城推荐系统应运而生。基于大数据分析的手机商城推荐系统的设计与实现利用......
  • ssm毕设体育场馆预定网站源码+程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着体育产业的快速发展和人们健康意识的增强,体育场馆的使用需求日益增长。然而,传统的场馆预定方式往往存在效率低下、信息不对称等问题,无法满足现代......
  • ssm毕设体育队训练的信息管理系统源码+程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景关于体育队训练的信息管理系统的研究,现有研究主要集中在大型体育赛事的组织管理和运动员训练数据的分析上,专门针对体育队日常训练管理的信息系统研究......
  • ssm毕设体育馆预定系统源码+程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着体育产业的蓬勃发展,体育馆作为重要的运动场所,其管理效率和服务质量直接影响用户体验。关于体育馆预定系统的研究,现有文献主要集中在一般性的场馆......
  • ssm毕设体育馆场地预约系统源码+程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着体育健身意识的普及和体育产业的发展,体育馆场地预约成为了一个重要的服务需求。目前,国内外关于场地预约系统的研究主要集中在大型场馆和公共体育......
  • 基于SSM的图书馆图书借阅管理系统【附源码+文档】
    ......