重定向到这样的网址是否安全:“https://example.com/”+ userData?

问题描述 投票:6回答:3

重定向到我自己的域中的URL时,我可以安全地使用用户数据吗?

假设我拥有example.com。如果我的应用程序的正常使用需要我有时将用户重定向到这样的网址,这可以吗?

https://example.com/ + userData

有没有这可以用来做一个漏洞利用,并运行javascript例如?或重定向到一些完全不同的域?

出于本次讨论的目的,我想:

  • 忽略目录遍历攻击
  • 仅考虑影响浏览器的攻击(不是example.com服务器)

您可以假设我根本没有对用户收到的参数进行编码。

编辑:澄清 - 无论如何userData没有添加到页面 - 它只驻留在网址本身。

http-redirect exploit
3个回答
5
投票

正如在comments中所提到的,这种情况似乎不能用javascript:(或data:,它也可以用来执行JavaScript)伪协议来利用。但是,如果example.com在自定义404页面上输出userData,则可能执行反射的XSS攻击。让我们假设此页面显示错误消息:

<h1>Page 'userData' not found.</h1>

在这种情况下,如果攻击者提交JavaScript有效负载(例如:<script>alert('xss');</script>),它将在页面上呈现,

<h1>Page '<script>alert('xss');</script>' not found.</h1>  

并且代码可以由访问者执行。可以通过过滤用户数据来防止此攻击 - 无论如何都应该始终对用户输入进行清理。

开放式重定向漏洞利用似乎不太可能,因为用户输入被附加到域,并且漏洞利用尝试应该导致404响应。当然,如果有其他本地页面允许任何重定向,则攻击者可以在其有效负载中使用它们,例如:

vulnerable/page?url=http://attacker.com

请注意,仅仅因为我无法确认漏洞并不意味着代码不易受攻击,具体取决于服务器配置。我们可以通过基于有效和受信任位置列表过滤用户数据来阻止开放重定向攻击。这也可能有助于针对服务器的其他几种攻击,例如目录遍历,文件包含和服务器端请求伪造攻击。


2
投票
  1. 这可能是网络钓鱼攻击的关键

攻击者可能会发送假装是您网站邮件的电子邮件并注入相同的链接(我假设“jumper.php”是一个页面,其中包含目标网址的单个url参数,可能包含用户数据):

要验证您的帐户,请点击此链接:http://example.com/jumper.php?url=http%3A%2F%2Fexample-my.com

在这种情况下,用户将看到以http://example.com开头的邮件链接,并可能认为这是您网站的有效链接,但实际上他将被重定向到可能受攻击者控制的http://example-my.com(看起来很像您的网站)。

  1. 在某些情况下,人们使用javascript进行重定向

如果页面包含这样的代码(php示例):

<script>location.replace(<?= json_encode($userData) ?>);</script>

然后,即使变量被正确清理,攻击者可以在http://example.com的上下文中执行任意javascript代码并重定向到javascript:...。例如:

要验证您的帐户,请点击此链接:http://example.com/jumper.php?url=javascript%3Aalert%28document.cookie%29

在这种情况下,重定向将转换为

<script>location.replace("javascript:alert(document.cookie)");</script>

和代码javascript:alert(document.cookie)(例如)将在http://example.com的上下文中执行。当然,攻击者可以通过注入任意javascript代码来做更多的事情。


2
投票

假设重定向代码是通过添加这样的(php示例)来完成的:header("Location: http://example.com/".$userData);

由于$userData不以任何方式编码,实际上攻击者可以获得对服务器生成的http响应的访问。例如,$userData可能包含类似的东西:

"somepage.php\r\nattacker-header:some value\r\n\r\nattacker page body with JavaScript"

虽然大多数http库(包括从5.1.4 AFAIK开始的php)阻止了这种header injection攻击并且会产生错误,但是一些旧的工具可能容易受到攻击。

© www.soinside.com 2019 - 2024. All rights reserved.