IIS在URL中含有%2F时出现403禁止访问错误

4
我需要翻译以下内容:

我正在使用IIS(Microsoft-IIS/7.5),返回403禁止访问,但我无法弄清原因。 我已经缩小了范围,发现只有在单个字母之前出现%2F时才会出现问题。 有任何想法是什么原因造成的吗?

这些有效...

但是,如果您在%2F前加上任何单个字母,它将失败并显示403错误。

以下这些失败...

谢谢!

更新: 我已排除ColdFusion,因为它会出现相同的403错误:http://example.com/mySite123/indexdotcfm?x=a%2F

更新:

Top Level IIs:
Checked:  
  Allow unlisted file name extensions
  Allow unlisted verbs
  Allow high-bit characters
Unchecked:
  Allow double escaping

Request Limits:
Maximum allowed content length (Bytes):  30000000 Maximum URL length (Bytes):
4096 Maximum query string (Bytes):  2048

Sites
mySite123:
  Checked:  
    Allow unlisted verbs
    Allow high-bit characters
  Unchecked:
    Allow unlisted file name extensions
    Allow double escaping

  Request Limits:
    Maximum allowed content length (Bytes):  2147483647
    Maximum URL length (Bytes):  4096
    Maximum query string (Bytes):  2048

  Deny URL
    /CFIDE/Administrator
    /CFIDE/adminapi
更新:如果我更改所访问的目录,我可以将403错误更改为404错误。例如:

这会返回预期的404错误: http://www.example.com/anything.anything?anything=x%2Fanything

这会返回403错误: http://www.example.com/mySite123/anything.anything?anything=x%2Fanything

那么可以安全地假设403错误与“mySite123”虚拟目录设置有关吗?


你能展示一下你的重写规则集吗?%2F代表正斜杠,所以这可能与重写有关。 - Olaf
1
是的,这可能需要一些时间。我没有权限。我必须向其他人请求。请求已经发出。 - gfrobenius
@Olaf,没有重写规则。 - gfrobenius
@Miguel-F 我会找出来的。另外,我忘了提到这个 ColdFusion 应用程序安装在许多不同的服务器上。许多运行 Apache,许多运行 IIS。所有其他 Apache 和 IIS 服务器都没有这个问题。只有这个特定的 IIS 服务器有问题。它也在 F5 BigIp 后面,如果这有帮助的话。 - gfrobenius
我取消了我的答案作为被接受的答案。今天问题似乎又出现了。我在原始帖子中添加了更新,因此可以安全地假设403错误与“mySite123”虚拟目录设置有关吗? - gfrobenius
显示剩余6条评论
4个回答

9
我相信你收到了403禁止访问响应,这是IIS的安全特性。这是已知的攻击向量。字符序列%2F只是/(正斜杠)字符的URL编码表示。显然,对于浏览器和互联网来说,它具有特殊含义。它用于目录遍历。在URL中编码特殊字符是绕过某些基本安全措施的黑客技巧。请参见OWASP的路径遍历。从Web应用程序黑客手册的全文(该页面约在中间位置):

第10章 攻击后端组件 575

攻击步骤

  1. 始终尝试使用正斜杠和反斜杠的路径遍历序列。许多输入过滤器仅检查其中之一,而文件系统可能支持两者。

  2. 尝试使用以下编码的简单URL编码的遍历序列。请确保对输入中的每个斜杠和点进行编码:

    点 - %2e
    正斜杠 - %2f
    反斜杠 - %5c

  3. 尝试使用1个16位Unicode编码:

    点 - %u002e
    正斜杠 - %u22l5
    反斜杠 - %u22l6

  4. 尝试双重URL编码:

    点 - %252e
    正斜杠 - %252f
    反斜杠 - %255c

  5. 尝试过长的UTF-8 Unicode编码:

    点 - %c0%2e,%e0%40%ae,%c0ae等
    正斜杠 - %cO%af,%e0%80%af,%c0%2f等
    反斜杠 - %c0%5c,%c0%80%5c等

    ...

(加粗部分是我强调的)

你可能可以想出一种方法来允许这样做,但为什么要这样做呢?我不建议这样做。你想把服务器暴露给潜在的攻击吗?我认为最好完全避免这种URL序列。URL查询字符串中真的需要斜杠字符吗?与其寻找一种方法允许在查询字符串中使用此字符,不如使用另一个不那么危险且不会暴露服务器的字符。对于特定的URL变量,您可以查找这个不同的字符,并在服务器端用所需内容替换它。例如:

与其使用

http://example.com/index.cfm?x=a%2Fblah

使用

http://example.com/index.cfm?x=a-blah

在服务器上,你知道变量 x 中会有 -(破折号)字符,因此你需要将其替换为服务器上所需的 /(正斜杠)字符,或者其他所需的字符。

ColdFusion 中:

<cfset x = Replace(URL.x,"-","/","ALL") />

请确保使用一些在该字符串中不存在的独特字符。 始终记得在服务器上对所有用户提供的输入进行清理。

以下是我发现的有关URL中%2f字符序列易受攻击的一些参考资料:

包含'/'(正斜杠)字符的组件标题

IIS URL解码漏洞

如果%2F是JBOSS GET URL的一部分,则会收到HTTP 400错误

URL中编码的斜杠

关于该主题的通用谷歌搜索

请注意,上述参考资料中有一些与IIS以外的Web服务器相关,但它们显示漏洞存在。

您可能还可以尝试双重转义序列。因此,您可以使用%252F%25是百分号)而不是%2f。但是,您还需要在IIS中进行更改以支持此功能。参考 - 如果我将图像命名为%2F,则无法访问它,导航到它时会收到404错误。不过,我认为这应该是最后的手段。双重编码


谢谢,我很快就会阅读所有这些链接,但URL中的%2F是完全合法的。另外,我忘了提到这个ColdFusion应用程序安装在许多不同的服务器上。许多运行Apache,许多运行IIS。所有其他Apache和IIS服务器都没有这个问题。只有这个特定的IIS服务器有这个问题。它也在F5 BigIp后面,如果这有帮助的话。 - gfrobenius
我同意在URL中使用%2F是合法的,毫无疑问,但您正在查询字符串部分中使用它,我对此的必要性提出了质疑。再次强调,这是有效的,但为什么要以这种方式传递目录/文件信息,当您可能会将信息暴露给好奇的人呢? - Miguel-F
这不是目录/文件信息,而是名称/值对的价值。 我希望我们只传递主键数字信息,但该应用程序由许多人在多年内编写,它有数千个页面,许多人仍然像这样查询数据:www.example.com?jet=F/18,它将变为:www.example.com?jet=F%2F18。 这个IIS服务器一直工作正常,实际上已经有很多年了,它最近开始发送403s。 没有人说他们改变了任何东西。 这真的很奇怪。 - gfrobenius
它是否接收了微软的安全补丁?我的另一个问题是,您是否已经验证这些请求实际上是否到达了Web服务器,或者它们是否在F5处终止? - Miguel-F
谢谢你的帮助。我给了一个+1。这个答案中的所有内容都很好,非常有帮助。但是由于我的服务器管理员通过安装最新的Java 1.7安全更新(更新25-64位)来修复它,我认为我应该将其标记为答案,以防其他人遇到与我相同的问题。当您回答自己的问题时,我不确定赏金积分如何工作。如果有一种方式可以让我把所有有用的链接和问题都送给您,那就太好了。 - gfrobenius
1
刚刚阅读了您的有趣的问题/交流。关于赏金的问题 - http://stackoverflow.com/help/bounty 暗示您将能够在6小时后手动授予@miguel-F。 "赏金结束后,有24小时的宽限期手动授予赏金。只需单击每个答案旁边的赏金奖励图标,即可永久授予答题者赏金。(您无法将赏金授予自己的答案。)" - J Richard Snape

1
我一直与服务器管理员合作,他们说:
“在更新JAVA之后,问题就停止了。 我安装了Java 1.7的最新安全更新(更新25-64位)于星期六。 网站重启后,问题现在已经解决。”
更新:几天前我接受了这个答案,但现在问题似乎又回来了。
更新(2015年8月31日):问题已解决。与其他答案提到的无关。数据中心防火墙人员设置了一些无效的设置/规则。我不能再详细说明了。调整防火墙规则是解决方法。

1

为了补充一些细节,%2f(正如之前所述,它只是/的编码版本)曾经困扰着微软,存在目录遍历漏洞,允许黑客访问网站目录之外的文件。流行的入侵预防系统(例如Snort)有规则来阻止这种行为。这里有一个详细的问题说明,其中包括攻击字符串和安全公告的历史示例。这个%2f编码对于Web服务器管理员和安全管理员多年来都带来了巨大的痛苦(攻击的变体仍然被活跃地利用)。


0
大家好,我在处理SharePoint上的TermStoreManager时遇到了问题,经过使用Get-SPTaxonomySession查看TaxonomySession内容后,发现我的Managed MetaData应用代理没有问题。
然而,Term Store Manager页面却因某种原因未显示任何术语集。
问题实际上是与termstore manager代码的javascript URL有关!

https://SharepointSite/_layouts/15/termstoremanager.js?rev=J%2Fry%2BNGddRWsDNgR25iEFA%3D%3D

J%2F触发了运行在我的服务器上的主机入侵防范服务(HIPs),将该请求阻止为“标准SQL注入”攻击。

明天我会与我的防火墙/HIPs团队进行交流。感谢这篇文章!它帮助我朝着正确的方向解决了类似的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接