1. 初识开放重定向:一个被低估的“小”漏洞
很多刚入门Web安全的朋友,一上来就猛攻SQL注入、XSS这些“明星”漏洞,觉得它们威力大,成就感强。这没错,但实战中,很多真正造成大规模危害的,往往是一些看起来不起眼的“小”漏洞,开放重定向(Open Redirect) 就是其中之一。我见过不少项目,对SQL注入严防死守,却对重定向参数毫无防备,结果成了攻击者钓鱼攻击的完美跳板。
简单来说,开放重定向漏洞就是:一个网站允许用户通过参数(比如 ?redirect=)控制跳转的目标地址,但没有对这个地址进行严格的检查和限制。攻击者就可以构造一个恶意链接,把用户“骗”到钓鱼网站、挂马页面,或者结合其他漏洞进行更深入的攻击。
听起来好像没什么?我给你打个比方:你家小区门禁很严,陌生人进不来(好比网站登录验证)。但你家有个后门,门上贴了个纸条写着“推开门就能到XX地方”。攻击者不需要破解门禁,他只需要把纸条上的地址改成“到我的陷阱屋”,然后骗一个小区居民去推那扇门。居民一看是小区内部的后门,毫无防备地推开,结果就中招了。开放重定向就是这个“后门”。
在DVWA靶场里,Open HTTP Redirect这个模块就是专门设计来让我们学习和理解这个漏洞的。它设置了低(Low)、中(Medium)、高(High)三个安全级别,模拟了开发者在面对重定向功能时,从毫无防备到逐步加强防护的典型过程。我们接下来就一步步拆解,看看每个级别的问题出在哪,以及攻击者是如何见招拆招的。
2. 环境搭建与漏洞原理深度剖析
在动手之前,我们得先把“战场”准备好。DVWA的安装网上教程很多,用Docker拉一个镜像是最快的方式。这里我假设你已经把DVWA跑起来了,安全级别记得在首页调到“Low”,然后找到“Open Redirect”这个模块。
HTTP重定向到底是什么? 当你在浏览器里输入一个网址,服务器除了直接给你返回网页内容,还有一种常见的操作是告诉你:“这个资源不在我这儿,你去另一个地方找吧”。这就是重定向。服务器会返回一个以3开头的状态码(比如302 Found),并在响应头里加一个 Location: 新的URL。浏览器看到这个,就会自动跳转到新的地址。
这个过程本身是合法且必要的,比如网站改版换域名、用户登录后跳回原页面等。漏洞就出在,这个“新的URL”如果完全由用户输入控制,且没有校验,那就坏事了。我们来看DVWA Low级别的核心代码,它非常“经典”:
<?php
if (array_key_exists("redirect", $_GET) && $_GET['redirect'] != "") {
header("location: " . $_GET['redirect']);
exit;
}
?>
这段代码干了啥?简单到令人发指:检查GET请求里有没有一个叫 redirect 的参数,如果有,并且不是空字符串,那么就直接用 header(“location: …”) 函数,把用户带到这个参数指定的地址去。没有任何检查,没有白名单,没有黑名单,完全信任用户输入。
为什么这很危险?
- 钓鱼攻击的绝佳助手:攻击者可以生成一个看起来完全合法的你的网站链接,比如
https://your-bank.com/login?redirect=https://evil-phishing.com。用户一看域名是your-bank.com,放心点开,结果瞬间就被带到了高仿的钓鱼网站。这种利用信任关系的攻击,成功率极高。 - 恶意软件分发:跳转的终点可以是一个自动下载恶意程序的页面,或者是一个利用浏览器漏洞的“挂马”页面。
- 绕过安全检测:一些安全软件或邮件系统会检查链接的域名是否在黑名单。如果攻击者先用一个白名单域名(比如知名的云存储、代码托管站)做第一次跳转,再从这个“干净”的页面跳转到恶意站点,就可能绕过初步检测。
理解了原理,我们实操一下。在DVWA Low级别的页面,你通常会看到一个链接,点开后地址栏类似 http://your-dvwa-ip/vulnerabilities/open_redirect/source/low.php?redirect=page1.php。现在,我们直接把 redirect 参数的值改成百度的地址:?redirect=https://www.baidu.com。回车,页面瞬间跳转到了百度。漏洞利用成功!这个过程没有任何阻碍,因为服务器对我们提供的URL是全盘接受的。
3. Low级别:毫无防护的“裸奔”
Low级别的利用,我们刚才已经演示了,简单直接。但我想带你更深一层,看看在真实场景中,攻击者会怎么包装这个漏洞。
实战中的攻击链: 攻击者不会傻乎乎地发一个带 redirect=https://evil.com 的链接给你。他们会进行伪装:
- 短链接伪装:利用短链接服务(如 bit.

1799

被折叠的 条评论
为什么被折叠?



