springboot需要tomcat服务器吗_嵌入式 Tomcat AJP 协议对 SpringBoot 应用的影响

5a0139f28b3162772c811d2b1966e8b2.png

前言

2020 年 1 月 6 日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的 Apache Tomcat 文件包含漏洞。Tomcat AJP 协议由于存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器 webapp 下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步实现远程代码的执行。

Tomcat AJP 协议的这种实现缺陷,对于 SpringBoot 开发的 web 应用是否受影响了?且听笔者一一道来。

AJP 协议

根据 apache 官网 AJP 协议相关介绍:

The original document was written by Dan Milstein, danmil@shore.net on December 2000.

Overview of the protocol

The ajp13 protocol is packet-oriented. A binary format was presumably chosen over the more readable plain text for reasons of performance. The web server communicates with the servlet container over TCP connections. To cut down on the expensive process of socket creation, the web server will attempt to maintain persistent TCP connections to the servlet container, and to reuse a connection for multiple request/response cycles.

Once a connection is assigned to a particular request, it will not be used for any others until the request-handling cycle has terminated. In other words, requests are not multiplexed over connections. This makes for much simpler code at either end of the connection, although it does cause more connections to be open at once.

AJP13 协议全称为 Apache JServ Protocol version 1.3 ,最初由 Dan Milstein 于2000年12月发表,后被 Apache 软件基金会 Jakarta 项目采纳。

AJP13 是一种二进制 TCP 传输协议,通过在网络传输二进制包(packet)来完成 Tomcat 与 http 服务器的请求与响应,显然这种方式比纯文本(如 text、xml等)传输的 http 协议效率要高的多。

5c3267ffa34b1830927e4e21737a1901.png

但是 AJP13 协议对浏览器支持不够好,由于其定位是 “ Tomcat 与 HTTP 服务器之间通信的协议”,这或许是 http 协议比较盛行的原因吧。

说完了 Tomcat AJP13 协议的来龙去脉接着,进入主题。

SpringBoot 为什么这么火?

spring-boot-starter-web

对 Spring 比较熟悉的话, 基于 SpringBoot 开发 web 应用时,引入 spring-boot-starter-web 组件是必不可少的,spring-boot-starter-web 的职责是负责 web 应用的启动 、初始化、运行和停止。而 spring-boot-starter-web 组件之所以能够跑起来,少不了 http 协议的支持,典型代表就是 tomcat 服务器。

通过翻阅 spring-boot-starter-web 组件的相关 maven 依赖,我们找到了 spring-boot-starter-tomcat 组件。

    org.springframework.boot   spring-boot-starter-tomcat    2.1.5.RELEASE  compile

接着查找 spring-boot-starter-tomcat 的 maven 依赖, 其引入了 tomcat-embed-core 、tomcat-embed-el 、tomcat-annotations-api 等嵌入式组件。

javax.annotation    javax.annotation-api    1.3.2compileorg.apache.tomcat.embed    tomcat-embed-core    9.0.19compile        tomcat-annotations-api        org.apache.tomcatorg.apache.tomcat.embed    tomcat-embed-el    9.0.19compileorg.apache.tomcat.embed    tomcat-embed-websocket    9.0.19compile

正是由于这些嵌入式组件的加入,免去了 Tomcat 单独安装部署的繁杂步骤,我想这也是 SpringBoot 非常火的原因之一吧。

SpringBoot 对 AJP 协议的支持

通过阅读 tomcat-embed-core 组件,说明嵌入式 tomcat 是支持 AJP 协议的,相关代码在 org.apache.coyote.ajp 目录下。

但是奇怪的是,在 SpringBoot 的 yml 文件配置中,并没有找到 ajp 协议相关的 server 参数配置。

485cafe75edc5374e1b8116489486e3e.png

笔者猜测,虽然 Tomcat 集成了 ajp 协议,但是不推荐使用吧。但是有没有办法支持 ajp 协议了,答案是可以的,具体代码如下:

@Configurationpublic class AJPConfig {    private static final String PROTOCOL = "AJP/1.3";    @Value("${tomcat.ajp.port:8009}")    private int ajpPort;    @Bean    public EmbeddedServletContainerFactory servletContainer() {        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();        Connector ajpConnector = new Connector();        ajpConnector.setProtocol(PROTOCOL);        ajpConnector.setPort(ajpPort);        tomcat.addAdditionalTomcatConnectors(ajpConnector);        return tomcat;    }}

笔者上述配置需要依赖 SpringBoot 1.x 环境。

AjpProcessor

如果对 tomcat 架构比较了解的话,tomcat 大部分请求与响应由协议(Protocol)中的处理器(Processor)完成的。

2a350d45de328720fe266193039956fe.png

所以在 tomcat 服务器接收 ajp 请求时, 由 AjpProcessor 来处理 ajp 真实的 request 请求消息。

aba6e23912d1d5356ee4213b66c63eaf.png

然后,通过 prepareRequest 方法将 ajp 请求内容取出来,设置成 request 对象的 Attribute 属性

b98c922c33f07f9412433565febf99a3.png
c1817cb3bb35bfb74468ef7c2435fce2.png

因此,黑客通过设置 request_uri、path_info 、servlet_path 属性值,从而可以读取到 /WEB-INF 下面的所有敏感文件,不限于class、xml、jar等文件。

javax.servlet.include.request_urijavax.servlet.include.path_infojavax.servlet.include.servlet_path

至于漏洞的详细分析不是本文重点,传送门:

https://blog.csdn.net/u012206617/article/details/104416626/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php session 前缀,PHP文件包含--session

利用条件:session文件路径已知,且其中内容部分可控。php的session文件的保存路径可以在phpinfo的session.save_path看到。session 的文件名格式为 sess_[phpsessid],而 sessionid 在发送的请求的 cookie 字段中也可以看到。实例:“…

大脑与数学——利用代数拓扑研究模拟大脑 第一部分

来源:遇见数学蓝脑计划(Blue Brain Project)是尝试利用分子层级的哺乳类脑部逆向工程建立一个电脑模拟脑。这里模拟并不仅是包括人工神经网络模型,也包括生物过程的真实神经元模型,和一个经验重建模型连接组。该计划希…

spring cloud每次修改必须重新打包_Java面试系列spring相关

Spring中的Bean是线程安全的吗?Spring 中的 bean 默认都是单例的,所有线程都共享一个单例实例Bean,因此是存在资源的竞争,是线程不安全的。但是spring中大部分bean都是在方法内部操作,例如:Controller、Ser…

谈谈实现小样本学习的两条路径

来源:混沌巡洋舰小样本学习是当下机器学习界的一个核心课题。大数据是当下深度学习的咽喉,面临收集成本昂贵,甚至根本无法采集的弊端, 小样本学习的实践价值不言而喻。对于众多产业来说, 真正能够收集到大量样本的是极…

什么是物联网?常见IoT协议最全讲解

作者:付强来源:IoT物联网技术(ID:IoT-Tech-Expo)01 什么是物联网?物联网(Internet of Things)这个概念读者应该不会陌生。物联网的概念最早于1999年被提出来,曾被称为继计算机、互联…

java下发命令nbiot,NB物联网之天翼物联(3)——编解码插件上传规则细解(java开发物联网)...

前言电信的编解码插件本意上是可以让我们的开发更加灵活,但是你好歹把文档写明白啊。。。同时在正常的生产中我们的产品不可能只使用电信的模块,有时甚至是客户要求使用移动还是电信的模块,所以兼容性给我们的体验非常直观!我们先…

netcat使用

前言 最近在做渗透测试的时候遇到了端口监听和shell的反弹问题,在这个过程中自己对Netcat这一款神器有了新的认识,现将一些Netcat的用法做一个小总结,希望对各位有帮助! Netcat简介 Netcat是一款非常出名的网络工具,简…

重磅:国家正式出台学术不端行为界定

来源:科研大匠大家都在反对学术不端,何为学术不端?如何界定学术不端行为?其实,此前并没有一个明确的标准。2019年5月29日,国家新闻出版署才正式发布我国首个针对学术不端行为的行业标准——《学术出版规范—…

Gartner:解开关于人工智能的六个迷思

来源:Gartner“人工智能将自动执行所有工作并让人类失业。”“人工智能只是一种虚构的技术。”“机器人将占领整个世界。”围绕人工智能的炒作给主流媒体、董事会议和各企业机构留下了许多迷思。有人担心“万能”的人工智能将占领全世界,有人则认为人工智…

java搭建线程池框架,JAVA线程池管理及分布式HADOOP调度框架搭建

大家看到了线程的好处了吧!单线程需要10S,10个线程只需要1S。充分利用了系统资源实现并行计算。也许这里会产生一个误解,是不是增加的线程个数越多效率越高。线程越多处理性能越高这个是错误的,范式都要合适,过了就不好…

IBM将收购Instana公司,持续推进其混合云和人工智能战略

来源:IBM中国收购 Instana 后,IBM 将帮助企业在多团队和多云(平均 2到 15个)环境下更好地管理他们的应用性能。[1]这也是 IBM 持续完善其由人工智能所驱动的自动化能力的又一例证,IBM 的其他相关举措还包括&#xff1a…

[原创]关于在VS解决方案下使用文件夹管理多个项目层次关系的说明

由于所创建的应用项目或类库项目较多,于是将这些类库放到一个文件夹下。在VS解决方案下确实能看到一个文件夹下多个类库项目这种层次关系。如下图所示: 但打开“我的电脑”,看到的只有类库,并未看到维护层次关系的文件夹。如下图所…

java进阶(二)-java小干货

java一些精干知识点分享 2. java小干货2.1循环遍历2.2可变参数2.3 list和数组转化2.3.1 数组转list2.3.2 list转数组 2.4 值传递和地址传递2.4.1值传递2.4.2 地址传递2.4.3易错点总结 2.5 数组数组帮助类Arrays 2.5 基本数据类型和包装类2.5集合2.6文件流2.7java代码块、内部类…

机器直觉

来源:专知当前以深度学习代表的人工智能技术所能解决的问题往往需要具有大量可以借鉴学习的训练 集, 同时要求所获取的信息是完备的. 但在复杂时变的真实应用环境中, 采集到的数据往往包含大量 噪声与不确定性, 且仅包含环境的局部信息, 导致了基于深度学习的人工智…

vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定

办公自动化系列1现在,各类数据分析的书籍,都可以在网上找到PDF版本;同时,百度文库、各类数据统计文库、行业研究等众多论文报告,是通过PDF的形式去展示输出的;但是,令人都头疼的是,各…

英媒:人工智能终于接近人类智能了吗?

文章来源:金融时报作者:John Thornhill图片来源:网络编辑:江上波摘要:GPT-3被誉为人工智能领域的重大突破,有人认为它甚至显示出初步意识迹象,另一些人则指出GPT-3存在可笑的缺陷。它可以大量炮…

大创中期报告怎么写_课题研究中期报告怎么写?这篇范文很说的很详细

中期报告一般要求1.课题简介:课题由来、课题界定、研究目标、课题研究内容。2.研究情况:按时间顺序或内容板块有条理地说明研究工作的开展情况;有详有略、有主有次地陈述研究过程中做了什么、怎么做的。3.阶段成果:客观地阐明本课…

vba九九乘法表代码_VBA代码模块化--数据透视表

本周工作中,用到了数据透视表的操作,这里汇总一下,学习途径来自网络,学习成果我也乐于分享一二~,代码整理为模块,供大家举一反三,可以套用。① 创建数据透视表,及基本设置先展示数据…

IoT 、5G与边缘计算将会擦出怎样的火花?

来源:半导体行业观察边缘计算是数字世界中最令人兴奋的新概念之一。利用占用空间很少的微型数据中心网络,边缘计算使系统能够实时收集并分析重要数据,而不会增加现有基础设施的负担。在物联网系统中,通常以端到端的方式&#xff0…

“嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...

资料来源:人民网、中国新闻网、智东西等物联网智库 整理发布转载请注明来源和出处3!2!1!点火!随着一声声振奋人心的倒计时,北京时间11月24日4时30分,搭载嫦娥五号月球探测器的长征五号遥五运载火…