1.使用Tomcat Native提升Tomcat IO效率
2.IDEA 导入 Tomcat项目(各配置项详解)
3.一文详解Tomcat Ghostcat-AJP协议文件读取/文件包含漏洞CVE-2020-1938
使用Tomcat Native提升Tomcat IO效率
Tomcat Native通过集成Apache Portable Runtime (APR) 提升IO效率
随着IO技术的编译编译发展,从Block IO到异步IO,源码源码Tomcat Native提供了一种高效的编译编译方式。Tomcat的源码源码连接器是关键,包括HTTP和AJP两种,编译编译它们支持BIO、源码源码抖音xg源码NIO、编译编译NIO2和APR等多种协议。源码源码BIO是编译编译基础,而New IO和New IO2则是源码源码非阻塞IO,APR是编译编译更高级的选择,它通过JNI调用Apache HTTP Server的源码源码库,实现文件读取和网络传输的编译编译优化。
要使用Tomcat Native,源码源码首先确保安装了APR library、编译编译OpenSSL和JDK。Debian和RPM基于系统的骰子网页源码Linux可通过特定命令安装,Windows则可直接下载DLL。在Linux上,需要编译tcnative,通常在bin/tomcat-native.tar.gz中找到源码,执行configure和make命令生成的lib文件需要放入$CATALINA_HOME/lib。
在配置方面,检查server.xml的APR连接设置,并在setenv.sh中添加tc-native库路径。添加完APR配置后,运行Tomcat,日志中将显示APR已启用,表明安装和集成成功。
了解更多关于Tomcat Native和APR的深入内容,可访问作者flydean程序那些事的博客/flydean.com/tomcat-native/>,关注公众号「程序那些事」获取更多实用教程和技巧。
IDEA 导入 Tomcat项目(各配置项详解)
在阅读《Head First Servlet & JSP》并尝试在IDEA中编写Servlet示例时,选课系统实现源码我意识到没有编译器辅助的编写过程会有些繁琐,因此决定在IDEA中搭建Tomcat环境。尽管网上的教程不少,但大多缺乏将现有Tomcat项目导入IDEA的详细步骤,特别是关于一些关键配置的处理。这里,我将分享如何完整配置IDEA以导入并运行Tomcat项目,以及其中涉及的具体IDEA和Tomcat配置含义。 首先,确保你已经安装了Tomcat,我使用的是"C:\myenv\apache-tomcat-8.5."这个目录。启动Tomcat非常简单,只需在Windows的/bin目录下双击startup.bat,启动服务后通过浏览器访问piler output的输出目录,以及设置源码目录src和依赖库library。 在Facets部分,地方信息发布源码确保正确配置了Web Application的部署描述符和资源目录,以及Artifacts以生成工件。最后,配置Run/Debug Configuration,创建Tomcat Server配置并指定正确的Artifact部署。 完成上述步骤后,IDEA会自动启动Tomcat服务器,并在浏览器中显示项目运行结果。运行成功后,项目生成的目录结构将展示项目的完整部署情况。一文详解Tomcat Ghostcat-AJP协议文件读取/文件包含漏洞CVE--
文章首发于先知社区:xz.aliyun.com/t/
零基础慎入,因为一不小心你就看懂了。
以tomcat 8.5.版本为例进行漏洞分析,首先下载tomcat源码: http://archive.apache.org/dist/tomcat/tomcat-8/v8.5./src/apache-tomcat-8.5.-src.zip。搭建过程可以参考这篇Paper: Tomcat源码编译(IDEA)_Java_ww0peo的博客-CSDN博客。
通过浏览器访问 .0.0.1:会报错误。宁夏划水麻将 源码解决办法是IDEA中找到org.apache.catalina.startup.ContextConfig,增加如下的一行代码,将JSP解析器初始化。随后再次启动Tomcat,浏览器就能正常看到Tomcat的主页了。查看端口开放的开放情况,Tomcat运行开启了和端口。
Tomcat的Connector组件的主要职责就是负责接收客户端连接和客户端请求的处理加工。每个Connector会监听一个指定端口,分别负责对请求报文的解析和响应报文组装,解析过程封装Request对象,而组装过程封装Response对象。如果把Tomcat比作一个城堡,那么Connector组件就是城堡的城门,为进出城堡的人们提供通道。
Tomcat组件相关的配置文件是在conf/server.xml,配置文件中每一个元素都对应了Tomcat的一个组件。HTTP Connector很好理解,通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器;AJP Connector是通过AJP协议和一个Web容器进行交互。在将Tomcat与其他HTTP服务器(一般是Apache)集成时,就需要用到这个连接器。AJP协议是采用二进制形式代替文本形式传输,相比HTTP这种纯文本的协议来说,效率和性能更高,也做了很多优化。
浏览器只支持HTTP协议,并不能直接支持AJP协议。所以实际情况是,通过Apache的proxy_ajp模块进行反向代理,暴露成http协议(端口)给客户端访问。
Servlet意为服务程序,也可简单理解为是一种用来处理网络请求的一套规范。主要作用是给上级容器(Tomcat)提供doGet()和doPost()等方法,其生命周期实例化、初始化、调用、销毁受控于Tomcat容器。Tomcat中Servlet的配置是在conf/web.xml。所有请求进入tomcat,都会流经servlet。由注释可以很明显看出,如果没有匹配到任何应用指定的servlet,那么就会流到默认的servlet(即DefaultServlet ),而 JspServlet 负责处理所有JSP文件的请求。
Tomcat内部处理请求的流程第一次看可能觉得会有点复杂。理解了上文的基础,下面开始分析漏洞。这个漏洞主要是通过AJP协议(端口)触发。通过构造两个不同的请求,经过tomcat内部处理流程,一个走default servlet,另一个走 jsp servlet,可导致不同的漏洞:文件读取漏洞和文件包含漏洞。
文件读取漏洞走的是DefaultServlet,文件包含漏洞走的是JspServlet。下面开始逐一进行分析,测试使用的POC如下:YDHCUI/CNVD---Tomcat-Ajp-lfi。
文件读取漏洞中,通过构造AJP协议请求,我们可以读取到 WEB-INF/web.xml文件。关键点在于request对象中的三个参数:/WEB-INF/web.xml的路径被传入到getRelativePath()方法中,该方法会返回请求的资源路径。随后,通过validate()方法和normalize()方法进行参数校验,确保请求路径中不能包含"/../",从而限制只能读取webapps目录下的文件。
文件包含漏洞(可致RCE)与文件读取漏洞不同,请求经过AjpProcessor类的处理后,将请求转发给了JspServlet。通过构造特定的请求url,可以将任意文件包含到jsp页面中,造成远程代码执行的条件。关键点在于将请求url设置为特定格式,以触发Tomcat处理jsp文件的流程,进而执行包含的文件内容。
针对此漏洞,官方发布的9.0.版本的修复代码主要做了以下几点修复:强制AJP协议默认监听本地环回地址,而不是0.0.0.0;若使用AJP协议,设置secretRequired属性为true,强制配置secret来设置AJP协议认证凭证;配置属性白名单,若向AJP连接器发送任意未被识别的属性,都会响应错误。
总结:文章详细解析了Tomcat Ghostcat漏洞的原理、漏洞分析、修复方法,以及相关的基础知识,为读者提供了一次全面的学习体验。