如何在IDEA环境中调试Tomcat源代码


准备IDEA与Tomcat

  1.IDEA在我看来是目前我用过的最舒服的(没有之一)的编译器,去哪下载,怎么安装我在这就不多做阐述了,请自行登梯下载部署配置。
  2.tomcat源码下载的时候选择:apache-tomcat-***-src.zip,以8.5.47版本为例,则下载对应的文件名为:apache-tomcat-8.5.47-src.zip。
  这两部分内容涉及不到任何技术细节,因此不具体提供方法,对我来说这两部分都不是问题,相信大家应该也不成问题。

调试步骤

具体调试方法如下:

  1. 下载解压,在其根目录下新建catalina-home文件夹和pom.xml文件,如下图所示。
      image.png
  2. 把根目录下的conf和webapps复制到catalina-home文件下,其他目录新建即可。
    image.png
  3. 修改第一步新建pom.xml文件,具体内容如下(涉及到版本问题的请自行修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.tomcat</groupId>
<artifactId>Tomcat8.5.47</artifactId>
<name>Tomcat8.5.47</name>
<version>8.5.47</version>
<build>
<finalName>Tomcat8.5.47</finalName>
<sourceDirectory>java</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>
<directory>java</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>test</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.6.1</version>
</dependency>
</dependencies>
</project>
  1. 运行idea导入tomcat源码
    image.png
    image.png
    image.png
  2. 配置tomcat运行环境,以启动tomcat服务器:
    Main class:Bootstrap(org.apache.catalina.startup)
    VM options: -Dcatalina.home=”你的路径/apache-tomcat-8.5.47-src/catalina-home”
    // -D 是java设置参数的固定写法
    // catalina.home 是参数名
    // =的后面是tomcat源码项目的catalina-home的路径,当这个路径包含空格是需要使用””
    image.png
  3. 编译时,Test模块下的TestCookieFilter.java会报错,注释掉这个类即可
    image.png

7.在ContextConfig.java中的webConfig();代码语句后添加代码:

1
context.addServletContainerInitializer(new JasperInitializer(),null);

 ContextConfig.java和Bootstrap主类在同一处,见步骤5
image.png
8.运行项目,启动成功,访问正常。
image.png
image.png

导入Tomcat9需修改的点

  1. ResponseTrailers 找不到,把 home\webapps\examples\WEB-INF\classes\trailers 目录拷贝到 test 目录下
  2. CookieFilter 找不到,把 home\webapps\examples\WEB-INF\classes\util\CookieFilter.java 文件拷贝到 test\util 目录下
  3. 编辑 org.apache.catalina.startup.ContextConfig 文件的 configureStart() 方法,添加初始化 JSP 解析器的代码:
    1
    context.addServletContainerInitializer(new JasperInitializer(), null);

开启挖掘漏洞之旅

  以上步骤完成之后就可以大展宏图挖漏洞了,不过能不能挖出来还要看技术功底了,不过你可以靠多练习,经过对历史漏洞的研究,相信不就得将来是可以拿到属于自己的CVE的!加油!

参考文献

-------- 本文结束 感谢阅读 --------

本文标题:如何在IDEA环境中调试Tomcat源代码

文章作者:FunctFan

发布时间:2020年07月28日 - 04:22:47

最后更新:2020年07月28日 - 04:32:01

原始链接:https://functfan.github.io/posts/4044431530/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。