Struts2框架站点风险的示例分析

发布时间 - 2023-05-30 00:00:00    点击率:

1.     概述

Apache软件基金会(ASF)赞助的一个开源项目是Struts。该项目最初是Jakarta项目的一个分支,随后被提升为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。 

在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。这两种方法在混合表现与业务逻辑代码方面不可避免,给前期开发和后期维护带来了巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。该框架产品曾一度被视为最广泛和最流行的JAVA WEB应用框架

   Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架

2.     漏洞盘点

2.1.  漏洞历史

随着Struts2框架的普及,越来越多的企业单位使用Struts2框架进行开发,近年来多次爆出高危漏洞,多个政府站点,银行、大型互联网公司等单位,受到影响,例如:2016年12月爆出京东 12G 用户数据泄露,其中包括用户名、密码、邮箱、QQ号、电话号码、身份证等多个维度,数据多达数千万条,究其原因源于 2013 年 Struts 2 的安全漏洞问题。当时国内几乎所有互联网公司及大量银行、政府机构都受到了影响,导致大量数据泄露,而每次struts2爆出漏洞后各大互联网漏洞平台也接收到多个反馈如:



Struts2的代码执行问题最早要追溯到2010年,当时来自Google安全Team的Meder Kydyraliev发现可以通过用unicde编码的形式绕过参数拦截器对特殊字符“#”的过滤,造成代码执行问题,官方漏洞编号S2-003,

回顾struts2的漏洞历史,我们发现官方难辞其咎,首先,开发人员安全意识不强,虽然采取了基本的安全措施,但是形同虚设。其次,我们感觉官方的修复措施缺乏力度,似乎只是敷衍了事,而未能真正解决问题的根源。再就是,官方的开放精神确实很震撼,竟然直接将漏洞的PoC挂在官网,这样给了很多人进一步研究漏洞利用的机会,这个也是导致问题更加严重的一个原因。

2.2.  struts2漏洞盘点

影响比较大,利用比较广泛的struts2漏洞:

CVE-2010-1870XWork ParameterInterceptors bypass allows OGNLstatement execution

CVE-2012-0392struts2 DevMod Remote Command Execution Vulnerability

CVE-2011-3923Struts

CVE-2013-1966Struts2

CVE-2013-2251Struts2

Struts2

Struts2

CNVD-2016-02506,CVE-2016-3081,受影响版本Struts 2.3.20 - StrutsStruts 2.3.28(2.3.20.3和2.3.24.3除外)

CVE编号:CVE-2016-4438 Struts(S2-037)远程代码执行漏洞,受影响版本:Struts 2.3.20 - Struts Struts 2.3.28.1

CVE-2017-5638 受影响版本:Struts 2.3.5 – Struts 2.3.31

Struts 2.5 –Struts 2.5.10

其他具体可参照struts2官网提供的漏洞历史:

https://cwiki.apache.org/confluence/display/WW/Security+Bulletins


3.     分布情况

针对漏洞频发的Struts2框架我们对省内使用Struts框架的分布情况进行了调查统计,通过对个地市站点进行指纹识别,绘制出省内各地市使用Strust2框架分布图表如下:



   结合大数据分析和关键字识别我们对采集到的使用Strust2站点所在的行业情况进行分析,绘制出如下图表:



具体表格数据:

序号   行业类型   数量   百分比  
1   政府部门   447   28.29%  
2   教育机构   155   9.80%  
3   金融行业   110   6.96%  
4   保险行业   28   1.77%  
5   证券行业   14   0.88%  
6   能源行业   8   0.50%  
7   交通行业   93   5.88%  
8   电信运营商   114   7.21%  
9   互联网企业   398   25.18%  
10   其他企业   213   13.48%  

从上图可以看出位于前三位(注:不计其他企业)的是政府部门(占比28.29%)、互联网企业(25.18%)、教育机构(9.8%)

   我们针对采集到的使用Struts2中间件站点进行漏洞检测,本次使用互联网上影响比较大的几个高危漏洞进行验证,检测漏洞(S2-045、S2-037、S2-032、S2-016)的存在修复个加固情况,经过对1580个站点样本进行检测,发现仍然有部分站点Struts2漏洞并未修复,对检测出漏洞的站点统计信息如下图:

序号 行业 存在漏洞数量
1 政府部门 3
2 教育机构 2
3 金融行业 1
4 互联网企业 2
5 其他 2

检测中我们发现有很多网站Stuts2之前的老漏洞尚未进行过修复,从而在Stuts2漏洞的中,将网站注册用户赤裸裸地暴露在黑客攻击枪口面前。

4.     安全建议

随着形势日益复杂化,信息安全已经变成不仅仅涉及技术的问题。科技的发展是一把双刃剑,其能造福人类,亦能产生破坏性的功效。而这一点,除了技术本身之外,或许更多的要从我们的意识层面去把握,面对漏洞带来如此之大的影响,足以给互联网业界信息安全从业人员带来警醒:信息安全的警钟,应时刻长鸣。

1、我们在信息系统开发中应养成良好的开发习惯,多数漏洞从开发阶段就存在,而由于开发过程中的疏忽,逻辑漏洞等也会给系统带来很大的安全风险。

2、网站数据及时备份,在系统遭到攻击时,可以第一时间对被攻击系统进行恢复。

3、对后台服务安装防病毒软件,定时对服务器进行病毒查杀,等安全检查。

4、实时留意最新的互联网漏洞情况,对信息系统存在的漏洞进行及时修补。

5、经常性的对系统进行渗透测试,漏洞测试等工作,及时发现问题,及时修复,防止漏洞暴露在互联网上。

6、对不在使用的系统进行及时下线,一般老系统中存在更多的安全问题,管理不善可能会泄露大量敏感信息。


# Java  # mvc  # 中间件  # html  # struts  # servlet  # display  # apache  # 数据分析  # https  # 渗透测试  # 互联网  # 多个  # 信息安全  # 是在  # 教育机构  # 互联  # 信息系统  # 比较大  # 省内  # 官网 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 简历没回改:利用AI润色让你的文字更专业  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel Fortify是什么,和Jetstream有什么关系  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  5种Android数据存储方式汇总  如何在阿里云部署织梦网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  EditPlus中的正则表达式 实战(1)  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  利用vue写todolist单页应用  使用spring连接及操作mongodb3.0实例  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel如何使用Livewire构建动态组件?(入门代码)  如何快速搭建高效可靠的建站解决方案?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel怎么在Controller之外的地方验证数据  如何在宝塔面板创建新站点?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在橙子建站中快速调整背景颜色?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Android利用动画实现背景逐渐变暗  Laravel如何发送系统通知?(Notification渠道示例)  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何在宝塔面板中修改默认建站目录?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Java垃圾回收器的方法和原理总结  Bootstrap CSS布局之列表  如何用景安虚拟主机手机版绑定域名建站?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  中山网站制作网页,中山新生登记系统登记流程?  网易LOFTER官网链接 老福特网页版登录地址  详解Android——蓝牙技术 带你实现终端间数据传输  如何确认建站备案号应放置的具体位置?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置