IIS 403禁止在URL中使用%2F

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

我正在使用IIS(Microsoft-IIS / 7.5)返回禁止的403,我不知道为什么。我已经将其范围缩小到%2F,但仅当它后面有单个字母时。知道是什么原因造成的吗?

这些工作...

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

这些失败...

谢谢!

UPDATE:我已经排除了ColdFusion,因为它给出了相同的403:http://example.com/mySite123/indexdotcfm?x=a%2F

UPDATE:

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

UPDATE:如果更改目录,则可以将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”虚拟目录设置有关吗?

java iis coldfusion url-rewriting http-status-code-403
4个回答
9
投票

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

第10章攻击后端组件575

黑客步骤

  1. 总是尝试使用正斜杠和反斜杠同时遍历路径斜线。当文件系统可能同时支持两种输入过滤器时,许多输入过滤器只会检查其中一种。

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

    Dot-%2e正斜杠-%2f反斜杠—%5c

  3. 尝试使用1种6位Unicode编码:

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

  4. 尝试使用双URL编码:

    Dot-%252e正斜杠—%252f反斜杠—%255c

  5. 尝试使用超长UTF-8 Unicode编码:

    Dot –%c0%2e,%e0%40%ae,%c0ae,依此类推正斜杠—%cO%af,%e0%80%af,%c0%2f等反斜杠—%c0%5c,%c0%80%5c等)>

    ...

([bold

是我的重点)

您可能会想出一种方法来允许这样做,但是为什么呢?我不推荐它。您是否想对服务器开放以进行潜在的攻击?我认为最好避免一起使用此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") />

只需确保使用该字符串中将不存在的某些唯一字符。 始终记住清除服务器上所有用户提供的输入。

这里有一些关于%2f字符序列在URL中容易受到攻击的参考:

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服务器有关,但它们表明存在此漏洞。

您可能可以尝试的另一种方法是对序列进行两次转义。因此,您有%2f而不是%252F%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


1
投票

只是在此线程上添加一些细节,%2f(如前所述只是/的编码版本)使Microsoft遭受了目录遍历漏洞的困扰,使黑客能够访问Web目录之外的文件。流行的入侵防御系统(如Snort)具有阻止此类行为的规则。 Here is a detailed write up of the issue以及攻击字符串和安全建议的历史示例。 %2f编码引起了Web服务器管理员和安全管理员多年的痛苦(并且今天仍然看到攻击的变种仍在被积极利用)。


1
投票

我一直在使用的服务器管理员说:


0
投票

全部,我全神贯注地对SharePoint上的TermStoreManager进行故障排除,然后在查看了以下内容后,发现我的Managed MetaData Application代理很好使用Get-SPTaxonomySession的TaxonomySession内容。

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