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

时间:2015-01-07 22:10:37

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

我有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”虚拟目录设置有关吗?

4 个答案:

答案 0 :(得分:9)

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

  

第10章攻击后端组件575

     

HACK STEPS

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

  2.   
  3. 尝试使用简单的URL编码的遍历序列表示   以下编码。确保编码每个斜杠和点   你的意见:

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

  4.   
  5. 尝试使用1个6位Unicode编码:

         

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

  6.   
  7. 尝试双网址编码:

         

    DOT-%252E
      正斜杠 - %252f
      反斜杠 - %255c

  8.   
  9. 尝试超长UTF-8 Unicode编码:

         

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

         

    ...

  10.   

粗体是我的重点)

你可能想出办法来解决这个问题,但为什么会这样呢?我不推荐它。您想打开服务器以进行潜在的攻击吗?我认为最好一起避免这个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服务器有关,但它们表明存在漏洞。

你可能尝试的其他东西是双重逃避序列。因此%2f取代%252F而不是%25({{1}}是百分号)。但是您需要在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 :(得分:1)

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

  

“在对JAVA进行更新后问题停止了。

     

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

     

重新启动Web服务器之后,问题就消失了。“

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

由于某些原因,“术语库管理器”页面未显示任何术语集。

问题恰好是termstore manager代码的javascript的URL!

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

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

明天我将与我的防火墙/ HIP家伙聊天。感谢这篇文章!它帮助我朝正确的方向解决了类似的问题。