Struts2 OGNL表达式注入漏洞解决

线上项目使用Struts2 版本2.3,需要升级版本,记录解决步骤,不确保其它项目都可以

  1. pom.xml
<struts.version>2.5.30</struts.version>
<!-- struts相关库 -->
<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>${struts.version}</version>
</dependency>
<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-config-browser-plugin</artifactId><version>${struts.version}</version>
</dependency>
<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>${struts.version}</version>
</dependency>
<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>${struts.version}</version>
</dependency>
  1. web.xml
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
替换成
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  1. struts.xml
    2.1 > 2.5
    package
    添加 strict-method-invocation=“false” 属性
    添加 global-allowed-methods
    如下
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">替换成
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<package name="root" extends="default" namespace="/" strict-method-invocation="false"><default-interceptor-ref name="myStack" /><global-allowed-methods>regex:.*</global-allowed-methods>
</package>
  1. 拦截器 参数处理
Map<String, Object> parameters = invocation.getInvocationContext().getParameters();
ActionContext ac = invocation.getInvocationContext();
ValueStack stack = ac.getValueStack();
for (Map.Entry<String, Object> map : parameters.entrySet()) {Object[] obj = (Object[]) map.getValue();// 获取传入的参数值是否有非法,xss攻击stack.setValue(map.getKey(), xssEncode(obj[0].toString()));
}

修改为

HttpParameters parameters = invocation.getInvocationContext().getParameters();
ActionContext ac = invocation.getInvocationContext();
ValueStack stack = ac.getValueStack();
for (Map.Entry<String, Parameter> map : parameters.entrySet()) {Parameter obj = map.getValue();// 获取传入的参数值是否有非法,xss攻击stack.setValue(map.getKey(), xssEncode(obj.getValue()));
}

编译部署,启动成功

补充
网址访问存在 https 访问变为 http
需要再tomcat server.xml中 修改这一部分

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8"  secure="true" scheme="https" proxyPort="443"/>

Struts2 OGNL表达式注入漏洞解决相关推荐

  1. SQL注入漏洞解决方法

    本文只指针编码层次的SQL注入漏洞解决方法,例子代码是以java为主. 1,参数化的预编译查询语句 不安全例子 String query = "SELECT account_balance ...

  2. Spring Data MongoDB SpEL表达式注入漏洞安全风险通告第二次更新

    奇安信CERT 致力于第一时间为企业级用户提供安全风险通告和有效解决方案. 安全通告 近日,奇安信CERT监测到Spring Data MongoDB SpEL表达式注入漏洞(CVE-2022-229 ...

  3. 浅入深SpEL表达式注入漏洞总结

    SpEL 简介 在Spring 3 中引入了 Spring 表达式语言 (Spring Expression Language,简称SpEL), 这是一种功能强大的表达式语言,支持在运行时查询和操作对 ...

  4. Spring Boot框架表达式注入漏洞

    2019独角兽企业重金招聘Python工程师标准>>> 高危漏洞的曝光总是发生在意想不到的时刻:周末所有人都准备享受周末的时间,Spring Boot框架的SpEL表达式注入通用漏洞 ...

  5. Struts2 ognl表达式

    一.实验目的 1. 掌握OGNL表达式的语法结构 2. 掌握OGNL表达式获取Action中的相关值的方法. 3. 理解投影的含义. 二.实验内容 创建业务控制类OgnlAction,测试基本属性.基 ...

  6. struts2 OGNL表达式

    一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...

  7. Atlassian Confluence OGNL表达式注入代码执行漏洞(CVE-2021-26084)

    环境搭建: 使用vulhub,进入文件夹启动环境: docker-compose up -d 环境启动后,访问http://your-ip:8090即可进入安装向导,参考CVE-2019-3396这个 ...

  8. 阿里云服务器漏洞phpmyadmin CVE-2016-6617 SQL注入漏洞 解决方法

    阿里云服务器漏洞phpmyadmin CVE-2016-6617如下图: 首先上网搜了下 漏洞phpmyadmin CVE-2016-6617,有人这样回答的  于是又开始搜phpmyadmin的升级 ...

  9. java 代码执行el,专属于java的漏洞——EL表达式注入

    前言"FSRC经验分享"系列文章,旨在分享焦点科技信息安全部工作过程中的经验总结,包括但不限于漏洞分析.运营技巧.sdl推行.等保合规.自研工具等等. 欢迎各位安全从业者持续关注~ ...

最新文章

  1. ArcEngine读取数据(数据访问)-转载
  2. ssm框架app管理平台_后端程序员跨平台应用的前端框架uni-app初探
  3. FastJsonUtils 需要fastjson
  4. 基于主成分分析法的综合评价模型及matlab实现
  5. esp32 怎么分配freertos 堆栈大小_详解STM32单片机的堆栈
  6. VINS(五)非线性优化与在线标定调整
  7. 客户的价值源于客户的流程
  8. 同事发来的文件是个html,逮到一个疑是感染html,htm,网页文件的木马
  9. unity天空盒渐变,Unity 3D从一个天空盒淡入另一个天空盒
  10. 微型计算机控制技术第二版答案第四章,微型计算机控制技术答案第四章2.pdf
  11. 希尔密码C语言源代码,希尔密码加密解密(示例代码)
  12. 上次来杭州,已经六年了。。
  13. 笔记本电脑的计算机配置在哪里可以找到,笔记本无线设置在哪里_笔记本电脑设置无线网络的步骤-win7之家...
  14. android 更新相册,Android 图片存入系统相册更新显示实例详解
  15. 用友 hr win10 java_用友u8win10安装教程_用友u8win10安装方法步骤教程_用友u8安装教程...
  16. 人体神经网络的组成部分,人体的神经网络是什么
  17. python照片转彩色手绘_python实现图片彩色转化为素描
  18. caffe 人脸关键点检测_密集人脸关键点检测
  19. Cisco设备的启动以及交换机的介绍
  20. 第三章微分中值定理及导数应用(方程的根)

热门文章

  1. 【最通俗易懂】C#有限状态机
  2. 【随笔】秋天刚到,夏天未远
  3. C语言sizeof()函数
  4. 论文解读《MSNet-4mC:学习有效的多尺度表示来识别DNAn4-甲基胞嘧啶位点》
  5. java 插入到完整的classbody_java语法错误,将“}”插入到完整 MethodBody 中
  6. 10道网络八股文,每道都很经典,让你在面试中逼格满满
  7. 【ORACLE】Oracle提高篇之DECODE
  8. ZigBee 3.0教程-步骤7:物理接口-Switch
  9. C# 通过搜狐微博api远程更换壁纸
  10. 【Python】爬虫初体验,40行代码爬取双色球2003年至今的开奖号码