我有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”虚拟目录设置有关吗?
答案 0 :(得分:9)
我很确定您将获得403 Forbidden响应作为IIS的安全功能。这是一种已知的攻击向量。字符序列%2F
只是/
(正斜杠)字符的URL编码表示。显然,这对浏览器和互联网具有特殊意义。它用于目录遍历。在URL中编码特殊字符是绕过一些基本安全措施的黑客技巧。请参阅OWASP的Path Traversal。从Full text of "The Web Application Hacker Handbook"开始(大约在该页面的中间位置):
第10章攻击后端组件575
HACK STEPS
始终使用正斜杠和返回来尝试路径遍历序列 斜杠。当文件系统可能同时支持两者时,许多输入过滤器仅检查其中一个。
尝试使用简单的URL编码的遍历序列表示 以下编码。确保编码每个斜杠和点 你的意见:
点 - %2e
正斜杠 - %2f
反斜杠 - %5c尝试使用1个6位Unicode编码:
点 - %u002e
正斜杠 - %u22l5
反斜杠 - %u22l6
尝试双网址编码:
DOT-%252E
正斜杠 - %252f
反斜杠 - %255c
- 醇>
尝试超长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
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家伙聊天。感谢这篇文章!它帮助我朝正确的方向解决了类似的问题。