重现Struts1的操纵classLoader漏洞

article/2025/11/5 18:55:27
注:本文仅限技术研究,探讨,测试使用.

2014年4月29日爆出的struts的可操纵classLoader的漏洞, 横跨struts1和struts2的所有版本。 影响面和问题的严重性几乎可以和heartbleed相媲美。 struts2要严重一些,对于struts1,只是说在特定条件下可执行特殊操作。

因为项目中用的是struts1,所以主要精力集中在struts1上。既然要修复漏洞,首先得找出POC给老板看,这类漏洞一般网上不会给出直接的POC,于是就动手捣鼓一番。建立一个简单的struts1项目,包含一个Action和ActionForm即可。 启用debug模式部署项目到tomcat等容器。然后在action的任意位置加一个断点,然后通过浏览器访问该action。既然说是"操纵classLoader",我马上想到的是struts自动封装表单用到反射,在断点附近寻找ActionForm的class的classLoader的属性列表,看看有谁的名字听起来是可操纵的。最初我就发现了这个:clearReferencesHttpClientKeepAliveThread .于是有如下的url和截图:
http://localhost:8080/Struts1/helloWorld.do?class.classLoader.clearReferencesHttpClientKeepAliveThread=false

http://localhost:8080/Struts1/helloWorld.do?class.classLoader.clearReferencesHttpClientKeepAliveThread=true


至此classLoader操作成功, 尽管clearReferencesHttpClientKeepAliveThread是一个暂时看起来不太危险的classLoader属性。

我看到部分资料说该漏洞在jetty7 下可关闭jetty服务器, 我也试了, 可以, 你可以把项目部署到jett7, 然后用如下url:
http://localhost:8080/Struts1/helloWorld.do?class.classloader.context.shutdown=true
一旦class.classloader.context.shutdown被输入,则后续的所有请求都只能收到404,要想恢复的唯一办法就是重启jetty。
如图:

还有更多的其他的POC比如在tomcat8下可下载任意文件,在其他情况下可执行code等待,我就没有一一证明。

因为struts1在该漏洞发出后, apache宣布struts1即将EOL, 所以我们也不打算花太多精力搞个威猛的方案出来,用了一个filter来检查请求参数是否包含“class.*”完事。代码片段如下:

public static final String classLoaderManipulatorParamReg = "(class\\.)|(class.classLoader\\.)" ;
public static final Pattern classLoaderManipulatorParamPattern = Pattern.compile(classLoaderManipulatorParamReg);Enumeration<String> params = request.getParameterNames();
while(params.hasMoreElements()){String key = params.nextElement();Matcher matcher = classLoaderManipulatorParamPattern.matcher(key);if(matcher.find()){System.out.println("suspicious parameters: " + key + ", removed from the parameter list.");req.setAttribute("msg", key+"=" + req.getParameter(key));request.getRequestDispatcher("unsafeRequest.jsp").forward(req, response);//logger.warn(this, "suspicious parameter: " + key);// 需替换尖括号以防止反射型的XSS漏洞String kvPair = (key+"=" + req.getParameter(key)).replaceAll("<", "& lt;").replaceAll(">","& gt;");/* * 这里需要注意:如果用以下方式重定向到出错页面, 极有可能导致递归的filter调用从而进入死循环。* request.getRequestDispatcher("unsafeRequest.jsp").forward(req, response);* 如果你想走到一个单独的出错页面来显示错误信息, 需要谨慎处理。* 我们这里就简单的直接输出出错信息到response.*/response.getWriter().write("Malicious parameter detected: " + kvPair);response.getWriter().flush();return;}
}



你可以在这里下载struts1样例程序: http://download.csdn.net/detail/sunxing007/7350433。 如要重现POC, 请先把web.xml中SecurityFilter去掉。

转载请注明来自: http://blog.csdn.net/sunxing007


http://chatgpt.dhexx.cn/article/hVEKLeig.shtml

相关文章

Struts1、Struts2、Hibernate、Spring框架工作原理介绍

Struts1工作原理 Struts1工作原理图 1 、初始化&#xff1a; struts 框架的总控制器 ActionServlet 是一个 Servlet &#xff0c;它在 web.xml 中配置成自动启动的 Servlet &#xff0c;在启动时总控制器会读取配置文件 (struts-config.xml) 的配置信息&#xff…

Struts1 和 Struts2

关于Struts2的出现缘由和好处就不多说啦&#xff0c;看了几篇总结的不错的文章&#xff0c;整理下贴出来&#xff0c;共同学习了。 Action的区别 对于有着丰富的Struts1.x开发经验的朋友来说&#xff0c;都十分的清楚Action是整个Struts框架的核心内容&#xff0c;当然Struts2也…

Struts1的工作流程

Struts1的工作流程图如下所示&#xff1a; 其工作流程如下&#xff1a; 当Web服务器启动的时候&#xff0c;根据web.xml文件加载并初始化ActionServlet&#xff0c;根据配置ActionServlet的config参数信息&#xff0c;确定struts-config.xml配置文件存放的位置&#xff0c;并根…

struts2讲解

Struts2部分 1. JavaEE软件三层结构和MVC的区别&#xff1f; JavaEE软件三层机构是由sun公司提供JavaEE开发规范的&#xff1a;Web层(表现层)、业务逻辑层、数据持久层。【其中WEB层会使用前端控制器模式】 MVC是一种思想&#xff0c;是一种模式&#xff0c;将软件分为 Model…

Struts1和Struts2对比

最近学习了Struts1和Struts2.很多人、很多资料都提到。Struts2不是从Struts1发展而来的。Struts2的前身是WebWork。那它俩到底有多大的不同呢&#xff0c;看了一些资料&#xff0c;下边就来比较比较。 一、架构分析 Struts1的架构图&#xff1a; 执行流程&#xff1a; 1.…

Struts1.x使用入门

Struts1框架是apache公司的开源子项目&#xff0c;是基于mvc逻辑分层的web层框架实现。是出现最早的web层框架&#xff0c;应用最广发。Struts1框架重点关注的是控制层&#xff0c;对于视图层只是提供了大量的标签&#xff1b;对于model层的影响微乎其微。 本文也是本人初学st…

Struts1的路径映射详解

首先介绍下struts1种xml配置的相关概念&#xff1a; • Action 的path: ActionServlet 根据该属性来转发用户的请求&#xff0c;即将用户请求转发与之同名的Action 。同名的意思是:将请求的.do 后缀去掉&#xff0c;匹配Action 的path属性值。 • Action 的name: 此处的name 属…

Struts1框架轻易入门,经典示例

Struts1框架轻易入门&#xff0c;经典示例 版权申明&#xff1a;此文为作者原创&#xff0c;未经允许&#xff0c;请勿转载&#xff01; Struts工作原理及流程登录验证示例 Struts1 工作原理及流程 这是本人整理的一点材料&#xff0c;原理图为纯手工绘制&#xff0c;不喜勿喷&…

struts1框架基本(笔记)

在阿帕奇官网下载合适的struts1框架文件。 应用在显示层框架。 struts1与struts2虽然是一脉相承&#xff0c;但它们用法完全不一样。 struts2是在struts1与webwork基础上&#xff0c;发展的全新框架。 注&#xff1a;本文是在MyEclipse下进行的操作&#xff0c;不是之前的E…

Struts1介绍

struts&#xff1a;[strʌts]支柱; 撑杆; 支杆; 支撑; 趾高气扬的步态; 高视阔步的样子; 引入struts Model1结构如图1所示&#xff1a; Model1是一个以JSP文件为中心的模式&#xff0c;在这种模式中JSP页面不仅负责表现逻辑&#xff0c;也负责控制逻辑。专业书籍上称之为逻辑…

入门Struts1第一讲——Struts1入门就这么简单

现在终于进入框架的学习中了&#xff0c;后面还有好几个框架等待着我们呢&#xff01;我们先来学习Struts1框架&#xff0c;然后再过渡到Struts2框架的学习中。下面我们开始学习Struts1框架之旅。 Struts1简介 Struts1是Apache开发的一个web层的框架&#xff0c;它主要用于简…

连接微软云的几种方式

1&#xff0c;通过管理portal连接微软云 需要使用liveId 2&#xff0c;通过visual web developer 直接更新 需要.cer(509)证书 3.通过远程登录管理 需要XXXXX-Staging-WebRole1_IN_0.rdp文件 PowerShell 需要管理证书

使用微软的OneDrive给别人分享大文件,非常方便

假设我想把这个40多MB的文件分享给一位同事&#xff1a; 在右键菜单里选share&#xff1a; 指定我要分享给谁&#xff1f; 假设我分享给这位姓丁的同事&#xff0c;OK了&#xff1a; 要获取更多Jerry的原创文章&#xff0c;请关注公众号"汪子熙":

谷歌云盘文件快速下载方法

最近看的论文附带的数据集在谷歌云盘里&#xff0c;每个文件都有十个G左右的大小&#xff0c;而直接从谷歌云盘下载速度过慢而且有可能中断&#xff0c;而multcloud是一个非常好的多云盘管理软件。他可以通过国内网直接登录操作&#xff0c;我们可以通过multcloud将谷歌云盘的文…

Win10安装OneDrive(微软云盘)后无法打开

https://jingyan.baidu.com/article/ce4366496a3ae73773afd3f8.html 这里为Win10系统正常下载OneDrive安装包安装成功后&#xff0c;打开或闪退或没反应的情况 工具/原料 OneDrive&#xff08;微软网盘&#xff09; Win10系统 方法/步骤 按住键盘上的Win&#xff08;就是左下…

开源网盘系统推荐 - 开源云盘 - 安装及开发教程

开源网盘系统推荐 - 开源云盘 - 安装及开发教程 云盘界面 介绍 本开源云盘致力于打造成一个优雅&#xff0c;好用&#xff0c;高效&#xff0c;克制的开源云盘。 在线体验 (账号demo/123456) 软件架构 本开源云盘采用前后端分离的模式开发。后端使用Golang语言&#xff0c;前…

onedrive php 上传文件,使用Aria2自动上传文件到onedrive教程

1、先在onedrive中建立一个upload文件夹来统一接收上传 2、然后开始建个环境 宝塔 或lnmp都可以&#xff0c;nginxphp(数据库用不到&#xff0c;装不装无所谓) 3、建立两个站点dl.example.com(下载用) pan.example.com(网盘用) 4、安装aria2&#xff0c;这里推荐逗比大佬的一键…

说说云盘背后的黑科技!

2019独角兽企业重金招聘Python工程师标准>>> ***当下&#xff0c;随着存储技术的飞速发展&#xff0c;各大公司都推出了云存储服务。但因为是免费面向大众的&#xff0c;无论微软的OneDrive还是百度的云网盘&#xff0c;好多人都难理解他们如何支撑起如此庞大的存储…

微软云 命令重启mysql_创建运行 MySQL 的经典 Azure VM - Azure Virtual Machines | Microsoft Docs...

在使用经典部署模型创建的运行 Windows Server 2016 的虚拟机上安装 MySQL 01/23/2017 本文内容 重要 经典 VM 将于 2023 年 3 月 1 日停用。 如果从 ASM 使用 IaaS 资源&#xff0c;请在 2023 年 3 月 1 日之前完成迁移。 我们建议你尽快进行切换&#xff0c;以利用 Azure 资源…

清除此计算机中wps云盘,教大家Win10系统删除WPS网盘的方法,爱纯净官网

Win10系统如何删除WPS网盘&#xff1f;现在使用Win10系统的朋友越来越多了&#xff0c;在Win10系统中如果安装了WPS办公软件&#xff0c;那么在电脑文件中就会看到一个名为WPS的网盘名称。有些用户想要将其卸载&#xff0c;那Win10怎么删除WPS网盘呢&#xff1f;所以接下来小编…