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)
影响版本:
漏洞相关的代码在 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