草庐IT

Tomcat一些漏洞的汇总

码啊码 2023-10-02 原文

前言:Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用 服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

目录

一、Tomcat 任意文件写入(CVE-2017-12615)

1.漏洞介绍

1.1影响范围:

1.2漏洞原理:

2.漏洞复现

3.修复建议

二、Tomcat 远程代码执行(CVE-2019-0232)

1.漏洞介绍

1.1影响版本

1.2漏洞利用条件

1.3漏洞原理

2.漏洞复现

3.修复建议

三、Tomcat session反序列化(CVE-2020-9484)

 1.漏洞介绍

1.1影响版本:

1.2漏洞利用条件:

1.3漏洞原理:

2.漏洞复现

3.修复建议

四、Tomcat 弱口令 && 后台getshell

1.漏洞介绍

1.1影响版本

1.2漏洞条件

1.3漏洞原理

2.漏洞复现

3.修复建议

一、Tomcat 任意文件写入(CVE-2017-12615)

1.漏洞介绍

1.1影响范围:

Apache Tomcat 7.0.0 - 7.0.81

1.2漏洞原理:

Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致可以使用PUT方法上传任意文件,攻击者将精心构造的payload向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行

2.漏洞复现

使用vulfocus提供的靶场

抓包修改请求包方法为PUT,通过PUT方法上传文件,注意PUT与文件名之间要有空格,文件内容通过POST提交

我们直接上传jsp文件会报404错误,估计是服务器有校验,因此我们需要绕过

方法一:使用斜杠/,斜杠在文件名中是非法的,所以会被去除(Linux和Windows中都适用)

PUT /shell.jsp/ HTTP/1.1

加'/'是为了绕过jsp文件的限制,斜杠在文件名中是非法的,所以会被去除(Linux和Windows都适用)

方法二:使用空格%20 (在Windows中适用)

在Windows下不允许文件以空格结尾,因此上传到windows会被自动去掉末尾空格

PUT /shell.jsp%20 HTTP/1.1

方法三:使用NTFS流(在Windows中适用的)

PUT /x.jsp::$DATA HTTP/1.1

 访问上传的文件获取flag

3.修复建议

 1、配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
2、根据官方补丁升级最新版本

二、Tomcat 远程代码执行(CVE-2019-0232)

1.漏洞介绍

1.1影响版本

Apache Tomcat 9.0.0.M1 to 9.0.17

Apache Tomcat 8.5.0 to 8.5.39

Apache Tomcat 7.0.0 to 7.0.93

1.2漏洞利用条件

1.系统为Windows
2. 启用了CGI Servlet(默认为关闭)
3. 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭)

1.3漏洞原理

由于使用enableCmdLineArguments在Windows上运行时,远程执行代码漏洞(CVE-2019-0232)驻留在公共网关接口(CGI)Servlet中,java运行时环境(JRE)将命令行参数传递给Windows的方式存在缺陷导致

2.漏洞复现

参考:

https://www.cnblogs.com/liliyuanshangcao/p/10731966.html

3.修复建议

1.禁用enableCmdLineArguments参数。
2.在conf/web.xml中覆写采用更严格的参数合法性检验规则。
3.升级tomcat到9.0.17以上版本。

三、Tomcat session反序列化(CVE-2020-9484)

 1.漏洞介绍

1.1影响版本:

10.0.0-M1至10.0.0-M4

9.0.0.0.M1至9.0.34

8.5.0至8.5.54

7.0.0至7.0.103

1.2漏洞利用条件:

1.攻击者能够控制服务器上文件的内容和文件名称; 
2.服务器PersistenceManager配置中使用了FileStore; 
3.PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象; 
4.攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径

1.3漏洞原理:

当使用tomcat时,如果使用了tomcat提供的session持久化功能,就会在一次会话中尝试读取session文件中的内容,并进行反序列化。

2.漏洞复现

参考:

Tomcat Session(CVE-2020-9484)反序列化漏洞复现 - FreeBuf网络安全行业门户

3.修复建议

1.检查是否使用tomcat的session持久化功能,如果有,建议关闭
2.检查项目中文件上传功能是否存在任意上传,这里任意上传指的是可以上传非jsp文件且可以控制上传文件名后缀为session
3.升级tomcat至最新版本

四、Tomcat 弱口令 && 后台getshell

1.漏洞介绍

1.1影响版本

所有版本

1.2漏洞条件

Tomcat7+权限分为:

  • manager(后台管理)
    • manager-gui 拥有html页面权限
    • manager-status 拥有查看status的权限
    • manager-script 拥有text接口的权限,和status权限
    • manager-jmx 拥有jmx权限,和status权限
  • host-manager(虚拟主机管理)
    • admin-gui 拥有html页面权限
    • admin-script 拥有text接口权限

这些权限的究竟有什么作用,详情阅读 Apache Tomcat 8 (8.5.77) - Manager App How-To

用户tomcat拥有上述所有权限,密码是tomcat;正常安装的情况下,tomcat中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。

1.3漏洞原理

通过弱口令进入后台后,在后台部署war文件,可以直接将webshell部署到web目录下

2.漏洞复现

参考链接:

16.Tomcat弱口令 && 后台getshell漏洞 - bmjoker - 博客园

3.修复建议

1、在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。

2、增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。

3、针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。

有关Tomcat一些漏洞的汇总的更多相关文章

  1. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  2. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  3. ruby - 找一些句子 - 2

    我想找到在某些文本中找到一些(让它是两个)句子的好方法。什么会更好-使用正则表达式或拆分方法?你的想法?应JeremyStein的要求-有一些例子示例:输入:ThefirstthingtodoistocreatetheCommentmodel.We’llcreatethisinthenormalway,butwithonesmalldifference.IfwewerejustcreatingcommentsforanArticlewe’dhaveanintegerfieldcalledarticle_idinthemodeltostoretheforeignkey,butinthis

  4. ruby block 并从 block 中返回一些东西 - 2

    我正在使用ruby​​1.8.7。p=lambda{return10;}deflab(block)puts'before'putsblock.callputs'after'endlabp以上代码输出为before10after我将相同的代码重构到这里deflab(&block)puts'before'putsblock.callputs'after'endlab{return10;}现在我收到LocalJumpError:意外返回。对我来说,这两个代码都在做同样的事情。是的,在第一种情况下我传递了一个过程,在第二种情况下我传递了一个block。但是&block将该block转换为pro

  5. ruby - 如果键存在,向散列值添加一些东西? - 2

    我在Ruby中有一个哈希:hash=Hash.new里面有一些键值对,比如说:hash[1]="One"hash[2]="Two"如果散列包含键2,那么我想将“Bananas”添加到它的值中。如果散列没有键2,我想创建一个新的键值对2=>"Bananas"。我知道我可以通过首先使用has_key?检查散列是否具有key2来做到这一点,然后采取相应的行动。但这需要一个if语句和不止一行。那么是否有一种简单、优雅的单行代码可以实现这一目标? 最佳答案 这个有效:hash[2]=(hash[2]||'')+'Bananas'如果您希望所有

  6. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  7. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  8. ruby - 使用 gmail gem 跟踪一些电子邮件 - 2

    我正在使用gmailgem发送电子邮件,我需要跟踪这些电子邮件。我该怎么做?我正在尝试搜索带有message_id的电子邮件,但它会从我的收件箱中提取所有电子邮件,而我只想要特定电子邮件的回复。这是我的实际代码:*使用message_id保存电子邮件*mail=gmail.deliver(email)Email.create(:message_id=>mail.message_id,:from=>user.email,:to=>annotation.to,:body=>annotation.content,:title=>annotation.title,:annotation=>an

  9. ruby - 一些简单的 Ruby 问题——迭代器、 block 和符号 - 2

    我的背景是PHP和C#,但我真的很想学习RoR。为此,我开始阅读官方文档。我对一些代码示例有一些疑问。第一个是迭代器:classArraydefinject(n)each{|value|n=yield(n,value)}nenddefsuminject(0){|n,value|n+value}enddefproductinject(1){|n,value|n*value}endend我理解yield的意思是“在这里执行关联的block”。令我震惊的是|value|n=each的一部分。其他block对我来说更有意义,因为它们似乎模仿C#风格的lambda:publicintsum(in

  10. 酷早报:10月21日全球Web3加密行业重大资讯大汇总 - 2

    2022年10月21日星期五【数据指标】加密货币总市值:$0.95万亿BTC市值占比:38.51%恐慌贪婪指数:23极度恐慌 【今日快讯】1、【政讯】1.1.1、美联储布拉德:市场预期美联储11月会加息75个基点1.1.2、美联储哈克:将维持加息一段时间1.2、美国10年期国债收益率触及4.197%,为2008年6月以来最高1.3、法国数字转型部长:政府将专注于DeFi和Web31.4、巴西ATM机将于11月3日起支持USDT1.5、美众议院副议长将于11月初加入a16zCrypto担任政府事务主管1.6、香港数字资产托管机构FirstDigitalTrust首席执行官:香港仍是安全

随机推荐