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

gfr*_*ius 3 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
Run Code Online (Sandbox Code Playgroud)

更新:如果我更改了我正在点击的目录,我可以将403更改为404.示例:

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

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

因此可以安全地假设403问题与"mySite123"虚拟目录设置有关吗?

Mig*_*l-F 9

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

第10章攻击后端组件575

嘻嘻哈哈

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

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

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

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

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

  4. 尝试双URL编码:

    Dot-%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
Run Code Online (Sandbox Code Playgroud)

使用

http://example.com/index.cfm?x=a-blah
Run Code Online (Sandbox Code Playgroud)

然后在服务器上,你知道期望变量中的-(破折号)字符,x所以你用/服务器上的(正斜杠)字符替换它.或者需要什么角色.

在ColdFusion中

<cfset x = Replace(URL.x,"-","/","ALL") />
Run Code Online (Sandbox Code Playgroud)

请务必使用该字符串中不存在的某些唯一字符.始终记得清理服务器上所有用户提供的输入.

以下是我发现的一些关于%2fURL中易受攻击的字符序列的引用:

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

IIS URL解码漏洞

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

URL中的URL编码斜杠

有关该主题的通用Google搜索

请注意,上述某些引用与IIS以外的Web服务器有关,但它们表明存在漏洞.

你可能尝试的其他东西是双重逃避序列.所以%2f你没有%252F(%25是一个百分号).但是您需要在IIS中进行更改以支持此功能.参考 - 如果我用%2F命名图像,我无法访问它,当导航到它时,我得到404.我认为这将是最后的手段.双重编码