赞
踩
JETTY简介:
Jetty作为Eclipse基金会的一部分,是一个纯粹的基于Java的网页服务器和Java Servlet容器,其支持最新的Java Servlet API,同时支持WebSocket,SPDY,HTTP/2协议。
在Jetty9.4.37版本中,为了符合RFC3986中的规范,选择性地支持可能有歧义解释的URI,默认模式允许URL编码,简单看下RFC3986(替代RFC2396)的规定
其大致意思是:.
和..
称为点段,都是为路径名层次结构中的相对引用而定义的,它们在一些操作系统文件目录结构中分别代表当前目录和父目录。但是与文件系统不同的是,这些点段仅在 URI 路径中解释层次结构,并作为解析过程的一部分被删除。也就是说在解析URI路径时,需要先处理.
和..
,Jetty为了符合这种处理方式,却导致了一系列的漏洞产生,首先是在9.4.39版本中修复了CVE-2021-28164,然后出现了新的绕过,其又在9.4.43版本中修复了CVE-2021-34429。
访问docker搭建的漏洞环境(8080端口),是一个简单的初始化页面。直接访问/WEB-INF/web.xml 会响应一个404d 页面。
执行攻击payload读取web.xml。payload: /%2e/WEB-INF/web.xml
基本绕过原理:
可以使用一些编码字符来制作URI,以访问WEB-INF目录的内容和/或绕过一些安全限制。默认合规模式允许带有包含 %u002e 段的 URI 的请求访问WEB-INF目录中的受保护资源。
例如,/%u002e/WEB-INF/web.xml可以检索 web.xml 文件的请求。这可能会泄露有关 Web 应用程序实现的敏感信息。同样,编码的空字符可能会阻止正确的规范化,因此/.%00/WEB-INF/web.xml也会检索 web.xml 文件。
复现过程:
照常访问/WEB-INF/web.xml,响应404.
使用%u002e绕过:
使用空字符绕过:
在9.4.40, 10.0.2, 11.0.2版本前,Jetty Servlets中的ConcatServlet
、WelcomeFilter
类存在多重解码问题,如果开发者主动使用了这两个类,攻击者可以利用其访问WEB-INF目录下的敏感文件,造成配置文件及代码泄露。
影响版本:
访问8080端口,是一个初始的example页面,尝该页面使用到了ConcatServlet
来优化静态文件的加载,
<link rel="stylesheet" href="/static?/css/base.css&/css/app.css">
正常通过/static?/WEB-INF/web.xml
无法访问到敏感文件web.xml.
对字母“W"进行双重URL编码,即可绕过限制进行访问:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。