问题描述
我对URL中的点号-分号-分号模式的使用毫无疑问(以访问apache tomcat webapps文件夹中部署的servlet应用程序)。使用dot-dot-semicolon(public/external IP
)可使网址返回一步。
最初的问题(仅是点-点模式)是目录遍历漏洞,相比于tomcat fs.readFile(dataString,(err,data) => {
if (err) throw err;
var parametrosPutObject = {
Bucket: bucket,Key: dataString,Body: data,};
s3.putObject(parametrosPutObject,data) => {
if (err) throw err;
console.log("recorded file");
//obtenerURL();
});
});
和/..;/
,标准化为6.0.18
的最新版本已解决(404错误)。但是在domainname/../manager/html
中,我们可以使用点分号与domainname/manager/html
来重现相同的漏洞,然后我们可以访问tomcat内部文件夹,例如admin url,它提示我tomcat管理器的凭据用户名和密码。这里的6.0.37
是访问在tomcat中部署的servlet应用程序的客户端URL,并且在domainname/..;/manager/html
中将客户端URL配置为
domainname
我们可以为httpd.conf
使用任何表达式来避免以下请求URL的模式(<VirtualHost *:443>
DocumentRoot /usr/local/apache/htdocs/EMPTY
JkMount /* ajp13
RewriteEngine on
RewriteRule ^/(.*) /he/$1 [PT]
</VirtualHost *:80>
)
RewriteRule
请提出建议。
谢谢
解决方法
您无法更改此行为。
大多数浏览器会在将请求发送到服务器之前进行规范化(将/aaa/bbb/../ccc转换为/ aaa / ccc)。如果这样的请求到达Tomcat,则Tomcat将始终在处理之前对其进行规范化。这是为了安全起见,例如防止绕过安全约束。无法禁用此功能,几乎可以肯定会拒绝任何要求启用此功能的功能请求。
对于您引用的URL,在主机之后紧跟/../
之后,Tomcat将返回400响应。同样,如果您尝试在地址栏中输入网址,浏览器可能会更改此类网址。