tomcat系列漏洞总结

tomcat介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,不过,Tomcat处理静态HTML的能力不如Apache服务器。另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。

Servlet介绍

Servlet处理请求和发送响应,并且Servlet是为了解决实现动态页面而衍生的东西。

Tomcat和servlet联系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器。Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。而Servlet是一种运行在支持Java语言的服务器上的组件, 是CGI替代品。

Tomcat目录结构:

bin tomcat启动与停止脚本,启动前需要
conf Tomcat配置文件 server.xml
Lib Tomcat依赖jar文件,连接数据库,就需要jar支持
Logs Tomcat的日志文件,catalina.out
Temp Tomcat临时目录
Webapps Tomcat的默认站点路径 webapps/ROOT
Work Tomcat缓存目录

Tomcat配置文件

server.xml:配置tomcat启动的端口号、host主机、context等

web.xml:部署描述文件,部署每个webapp时都会调用该文件,配置该web应用的默认servlet

tomcat-user.xml:tomcat的用户密码和权限

漏洞

1、tomcat弱口令爆破+war部署getshell。

影响版本:tomcat全版本

参考文章:https://www.cnblogs.com/pursue-security/p/17029167.html

2、Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)

影响版本:Apache Tomcat 7.0.0-7.0.79(Windows环境下) 如果配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的远程执行代码(RCE)漏洞。

参考文章:https://www.cnblogs.com/pursue-security/p/15310506.html

3、Tomcat文件包含及文件读取漏洞(CVE-2020-1938)

影响版本:

Apache Tomcat 9.x<9.0.31
Apache Tomcat 8.x<8.5.51
Apache Tomcat 7.x<7.0.100
Apache Tomcat 6.x
漏洞利用前提:
目标机器开启AJP Connector服务端口(默认开启,为8009端口)
参考文章:https://www.cnblogs.com/pursue-security/p/17029155.html
4、Tomcat拒绝服务攻击(CVE-2020-13935)
影响版本:
Apache Tomcat 10.0.0-M1-10.0.0-M6
Apache Tomcat 9.0.0.M1-9.0.36
Apache Tomcat 8.5.0-8.5.56
Apache Tomcat 7.0.27-7.0.104
参考文章:https://www.cnblogs.com/pursue-security/p/17029164.html
5、tomcat远程代码执行漏洞(CVE-2019-0232)
漏洞原理:

漏洞相关的代码在 tomcat\java\org\apache\catalina\servlets\CGIServlet.java 中,CGIServlet提供了一个cgi的调用接口,在启用 enableCmdLineArguments 参数时,会根据RFC 3875来从Url参数中生成命令行参数,并把参数传递至Java的 Runtime 执行。这个漏洞是因为 Runtime.getRuntime().exec 在Windows中和Linux中底层实现不同导致的

Java的 Runtime.getRuntime().exec 在CGI调用这种情况下很难有命令注入。而Windows中创建进程使用的是 CreateProcess ,会将参数合并成字符串,作为 lpComandLine 传入 CreateProcess 。程序启动后调用 GetCommandLine 获取参数,并调用 CommandLineToArgvW 传至 argv。在Windows中,当 CreateProcess 中的参数为 bat 文件或是 cmd 文件时,会调用 cmd.exe , 故最后会变成 cmd.exe /c "arg.bat & dir",而Java的调用过程并没有做任何的转义,所以在Windows下会存在漏洞

参考文章:https://www.cnblogs.com/pursue-security/p/17030575.html

posted @ 2023-01-06 15:15  学安全的小白  阅读(3010)  评论(0编辑  收藏  举报