【问题标题】:IIS 403 forbidden with %2F in the URL在 URL 中使用 %2F 禁止 IIS 403
【发布时间】:2015-03-05 22:37:27
【问题描述】:

我让 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 没有重写规则。
  • example.com/index.cfm?y=c%2F(不同的变量名)的响应也是403吗?
  • 您是否将request filtering 用于IIS?如果是这样,您在那里启用/禁用了哪些设置?

标签: java iis coldfusion url-rewriting http-status-code-403


【解决方案1】:

我很确定您将 403 Forbidden 响应作为 IIS 的一项安全功能。这是一个已知的攻击向量。字符序列%2F 只是/(正斜杠)字符的URL 编码表示。显然,这对浏览器和互联网具有特殊意义。它用于目录遍历。在 URL 中编码特殊字符是绕过一些基本安全措施的黑客技巧。请参阅来自 OWASP 的Path Traversal。来自Full text of "The Web Application Hacker Handbook"(大约在该页面的一半处):

第10章攻击后端组件575

破解步骤

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

  2. 尝试使用简单的 URL 编码表示遍历序列 遵循编码。 确保对其中的每一个斜线和点进行编码 你的输入:

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

  3. 尝试使用 1 个 6 位 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 字符序列的参考:

Component titles containing '/' (forward slash) characters

IIS URL Decoding Vulnerability

Receive an HTTP 400 error if %2F is part of the GET URL in JBOSS

URL-encoded slash in URL

Generic Google search about the topic

请注意,上面的一些参考资料与 IIS 以外的 Web 服务器有关,但它们表明存在漏洞。

您可以尝试的其他方法是对序列进行双重转义。所以你有%252F而不是%2f%25是一个百分号)。但是您还需要在 IIS 中进行更改以支持这一点。参考 - if I name an image with a %2F, I cannot access it and when navigating to it, I get a 404。我认为这将是最后的手段。 Double Encoding

【讨论】:

  • 谢谢,我很快就会阅读所有这些链接,但是 URL 中的 %2F 是完全合法的。还忘了提到这个 ColdFusion 应用程序安装在许多不同的服务器上。许多运行 Apache,许多运行 IIS。所有其他 Apache 和 IIS 服务器都没有此问题。这只是一个特定的 IIS 服务器。如果有帮助,它也支持 F5 BigIp。
  • 我同意 %2F 在 URL 中是合法的,毫无疑问,但是您在 URL 的查询字符串部分使用它,我质疑是否需要这样做。同样,它是有效的,但是当您可能将信息暴露给好奇的眼睛时,为什么要以这种方式传递目录/文件信息。
  • 不是目录/文件信息。它是名称/值对的值。我希望我们只传递主键数字信息,但该应用程序是由许多人多年来编写的,它有 1000 多个页面,并且许多仍然查询数据,如下所示:www.example.com?jet=F/18 变为:www.example.com?jet=F%2F18。这台 IIS 服务器一直在工作,实际上已经工作了很多年,它最近才开始发送 403。没有人说他们改变了什么。真的很奇怪。
  • 收到微软安全补丁了吗?我的另一个问题是您是否确认这些请求实际上是在访问 Web 服务器,或者它们是否会在 F5 处终止?
  • 只需阅读您引人入胜的问题/交流。关于赏金问题 - stackoverflow.com/help/bounty 暗示您将能够在 6 小时内手动奖励给 @miguel-F >>“在赏金结束后,有 24 小时的宽限期来手动奖励赏金。只需单击每个答案旁边的赏金奖励图标,即可将您的赏金永久奖励给回答者。(您不能将赏金奖励给您自己的答案。)"
【解决方案2】:

只是为了给这个线程添加一些细节,%2f(它只是前面所述的/ 的一个编码版本)由于目录遍历漏洞困扰了微软一段时间,这些漏洞允许黑客访问 Web 目录之外的文件.流行的入侵防御系统(如Snort)有规则来阻止这种行为。 Here is a detailed write up of the issue 以及攻击字符串和安全建议的历史示例。多年来,%2f 编码给 Web 服务器管理员和安全管理员带来了痛苦的世界(今天仍然可以看到攻击的变体被积极利用)。

【讨论】:

    【解决方案3】:

    与我合作的服务器管理员表示:

    “更新 JAVA 后问题停止。

    我安装了 Java 1.7 的最新安全更新(更新 25 - 64 位)星期六。

    重启网络服务器后,问题就消失了。”

    更新:几天前我接受了这个作为答案,但现在问题似乎又回来了。

    更新(2015 年 8 月 31 日):已解决。它与其他答案提到的无关。数据中心防火墙人员有一些无效的设置/规则。我不能再详细说明了。调整防火墙规则是解决办法。

    【讨论】:

      【解决方案4】:

      所有,我正在努力解决 SharePoint 上的 TermStoreManager 故障,并且 查看后发现我的托管元数据应用程序代理很好 TaxonomySession 内容使用 Get-SPtaxonomySession。

      但是,术语库管理器页面由于某种原因没有显示任何术语集。

      问题恰好是术语库管理器代码的 javascript 的 URL!

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

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

      明天我将与我的防火墙/HIP 人员交谈。感谢这篇文章!它帮助我找到了解决类似问题的正确方向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多