服务器被攻击,导致配置正常得struts2文件无法使用正常得方法


如下所示,服务中使用得strtus2先被攻击,然后导致] Could not find action or result

Posted content type isn't multipart/form-data

 java.io.IOException: Posted content type isn't multipart/form-data

    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:166)

    at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)

    at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:129)

    at com.airtalkee.util.CosMultiPartRequest.parse(CosMultiPartRequest.java:83)

    at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84)

    at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:849)

    at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138)

    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)

    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)

    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

    at java.lang.Thread.run(Thread.java:662)

2018-08-10 14:16:15 [ http-4480-18:11622462 ] - [ WARN ] Could not find action or result: /station/logoutAction_logoutEn.action

 No result defined for action com.airtalkee.web.action.LogoutAction and result input - action - file:/root/http/station/webapps/station/WEB-INF/classes/struts.xml:82:67

    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)

    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:276)

    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)

    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInte



struts2配置如下:

<action name="logoutAction_*" class="logoutAction" method="{1}">

<!-- <interceptor-ref name="permissionStack"/>-->

<result name="toLogin">/login_aly.jsp</result>

<result name="toLogin2">/login_2.jsp</result>

<result name="toLoginZq">/login.jsp</result>

<result name="toLoginZq_PC">/login_PC.jsp</result>

<result name="toLoginFr">/login_fr.jsp</result>

<result name="toLoginEn">/login_en.jsp</result>

<result name="toLoginCCS">/login_ccs.jsp</result>

<result name="toLoginTw">/login_tw.jsp</result>

<result name="toLoginRu">/login_ru.jsp</result>

<result name="toLoginTr">/login_tr_tongli.jsp</result>       

<result name="imageUI">/image.jsp</result>

</action>


代码侧:

public String logoutEn() {

ActionContext.getContext().getSession()

.remove(SessionUtil.SESSION_USER);

return "toLoginEn";

}



一旦服务日志出现Posted content type isn't multipart/form-data,过个一两分钟就会出现Could not find action or result,重启服务后就能正常访问/station/logoutAction_logoutEn.action,

项目框架spring+struts2

struts2 版本:2.3.36

服务器:tomcat6

感觉和之前struts2报的漏洞(struts2 s2-045和struts2 s2-046)有关,但是我已经按照网上修复方案 升级了struts2 版本,但还是频繁出现上述问题。

请各位同学看一下,是否遇到类似情况,请注意,配置应该没有错,不然上线后就不能使用,这个问题是产生于服务正常使用一段时间后,出现这种情况,重启后就正常。




楼主你好,这个问题,我感觉还是代码不友好,或者xml文件中的问题,

至于为什么说,服务可以正常启动,而且用一段时间也没有问题,按照我的经验可能是之前并没有访问到这个功能,所以没有报错。

看下关于你自己的类的报错位置:

首先先说一下No result defined for action xxx.xxx.xxx and result xxx这个错误


action后跟的是你的action名称


result是返回值错误,返回值错误有很多,比如说


No result defined for action xxx.xxx.xxx and result input


    一般这个错误抛出的都是这五个错误,出现错误时,首先要看action后的那个xxx.action中的方法,是否存在两个或者两个以上的返回值,如果存在,抛出这个错误,一般只要在自己的action中为不同的返回值添加


  <result name="返回值名称">


  </result>


就可以了


    如果你配置了相应的result,并与返回值一一对应的话,出现这个错误可能是因为你引了Struts2-Convention-Pluginx.xx.jar这个jar包


     这个包是实现Struts零配置功能的。他会扫描你的所有action、actions、struts 、struts包下含有execute方法的类。并根据其类名建立xxx.action映射。这时候当你访问XXX.action时系统会首先调用零配置方法配置的action,而这时候你又没有使用注解配置其result。当然就报找不到no result!


     处理方法:


          1.删除掉Struts2-Convention-Pluginx.xx.jar


          2.如果你的action类名是XXXAction 请不要在XML配置中设置其action name属性为XXX 


          3.使用零配置


接下来再说一下No result defined for action xxx.xxx.xxx and result input这个错误


      出现这个错误的原因可能是


          1.因为你的返回值与action中与返回值name相同的属性类型不一致


          2.action中有重名属性


    如果以上方法不好用的话,可是试一试关闭Tomcat然后从Tomcat中移除自己的项目,然后在把项目重新填进去,重启Tomcat,因为这个错误也有可能是Tomcat缓存引起的!

Posted content type isn't multipart/form-data错误,说明你页面提交的数据有问题。在服务器可以使用tcpdump来抓包看看页面提交post的数据是什么?tcpdump tcp port 8080 -n -X -s 0 -w tcp.cap 。然后使用wireshark打开文件tcp.cap,可以看到客户端提交了什么数据,这些数据格式是不是和你xml配置有出入。

感谢以上两位同学回复:

1.上面得方法是登陆时,就使用得方法,不存在用户一直不使用这个方法;

2.我项目中并未引入Struts2-Convention-Pluginx.xx.jar;

3.您说得tomcat缓存问题,我一开始也考虑了,也做了相应清缓存操作,但是没有作用;

4.第二位同学说得抓取用户提交数据有问题,这个不是正常客户提交得,而是漏洞攻击导致,就是故意要提交这样得数据。


Posted content type isn't multipart/form-data,这个是表单上传文件的错误。
如果你登录没有上传功能,那么就是攻击者提交了上传动作。
我觉得你应该解决的是被攻击问题,不一定是因为Struts2的代码有严重问题。把引发问题发生的入口堵住,也能解决问题。
最常见的是XSS攻击,不能随便跨站提交数据,而且前端是可以绕过的,前端也需要严格验证,后台同样也需要进行验证。