Tomcat URL中的两个连续点将URL导航向后移动一步

Tomcat URL中的两个连续点将URL导航向后移动一步,tomcat,url,servlets,Tomcat,Url,Servlets,我对URL中的点-点分号(用于访问ApacheTomcatWebApps文件夹中部署的servlet应用程序)的用法几乎没有疑问。使用点-点分号(/..;/)使url返回到一个步骤。 最初的问题(仅点-点模式)是一个目录遍历漏洞,该漏洞已在tomcat6.0.18,domainname/./manager/html的最新版本中解决(404错误)。但是在6.0.37中,我们可以使用点-点分号重新生成与domainname/相同的漏洞/manager/html,然后我们可以访问tomcat内部文件夹

我对URL中的点-点分号(用于访问ApacheTomcatWebApps文件夹中部署的servlet应用程序)的用法几乎没有疑问。使用点-点分号(
/..;/
)使url返回到一个步骤。 最初的问题(仅点-点模式)是一个目录遍历漏洞,该漏洞已在tomcat
6.0.18
domainname/./manager/html
的最新版本中解决(404错误)。但是在
6.0.37
中,我们可以使用点-点分号重新生成与
domainname/相同的漏洞/manager/html
,然后我们可以访问tomcat内部文件夹,如admin url,它会提示我tomcat manager用户名和密码的凭据。这里
domainname
是部署在tomcat中的servlet应用程序访问的客户端URL,客户端URL在
httpd.conf
中配置为

<VirtualHost *:443>
DocumentRoot /usr/local/apache/htdocs/EMPTY

JkMount /* ajp13
RewriteEngine on
RewriteRule ^/(.*) /he/$1 [PT]
</VirtualHost *:80>
请建议


谢谢你

你不能改变这种行为

在请求发送到服务器之前,大多数浏览器都会进行规范化(将/aaa/bbb/./ccc转换为/aaa/ccc)。如果此类请求到达Tomcat,Tomcat将始终在处理之前将其正常化。这是为了安全,例如,防止绕过安全约束。没有办法禁用此功能,任何允许禁用此功能的功能请求几乎肯定会被拒绝


对于您引用的URL,其中主机后面紧跟着
/../
,Tomcat将返回400响应。同样,如果您尝试在地址栏中输入这些URL,浏览器可能会更改这些URL。

Hi,如何在.htaccess文件的帮助下避免URL中域名后存在“../”模式。请针对这一独特要求提出正确的规则。您是否可以在浏览器中检查Apache访问日志,以获取URL为:
https://domainname/..;/manager/html
谢谢,在生产中检查相同的日志,我可以通过将RewriterRule^/(.*)/webapplication/$1[PT]”更改为RewriteRule^/^((?!…))*/webapplication/$1[PT]”来修复tomcat服务器中的直接遍历问题。因为问题在于模式。。;在域名之后,所以我使用带不等于符号的(?。;)来避免这种情况。请检查RegEx^/^((?!…))*以避免//aaa/bbb/ccc.@Markm谢谢,我更新了问题的详细信息,请您检查一下。您使用的mod_jk和Tomcat的确切版本是什么?它是apache-Tomcat-6.0.37版本,webapps中有一个servlet应用程序,而客户端URL在Virtualhost主机重定向设置中配置为:DocumentRoot/usr/local/apache/htdocs/EMPTY ServerName client.website.com RewriteEngine On#将所有请求重定向到本地apache服务器端口8000 RewriteRule^/?(.)https://%{server_NAME}/$1[R,L],为了解决这个问题,我将RewriteRule更改为“RewriteRule^/((?!…).*)https://%{SERVER_NAME}/$1[R,L]”,现在它可以工作了,url重定向到404。Tomcat 6于2016年12月31日停止使用。您需要升级到受支持的Tomcat版本。我建议至少8.5.x,最好是9.0.x。您还没有提供所需的mod_jk版本详细信息。您好,感谢您的更新,我们将尽快提供mod_k详细信息,我们已经建议升级tomcat版本,但由于相应团队不支持,他们决定不升级tomcat版本。请看一下以下详细信息:请检查问题(底部)中的虚拟主机设置详细信息,我将RewriteRule规则正则表达式从^/?(.)重写为^/(?!..)*),现在它解决了问题,当用户尝试时,根据配置它不会将请求重定向到https://%{SERVER_NAME}/$1,然后显示404。
"https://domainname/..;======/xxx/yyyy"
"https://domainname/..;/xxx/yyyy"
"https://domainname/..;abcd/xxx/yyyy"


virtual host settings in apache httpd.conf
<VirtualHost :80>
DocumentRoot /usr/local/apache/htdocs/EMPTY ServerName client.website.com 
RewriteEngine On # Redirect all requests to the local Apache server to port 
8000 
RewriteRule ^/?(.) https://%{SERVER_NAME}/$1 [R,L] 
</VirtualHost>