• Struts S2-048 RCE漏洞分析


    应该是S2-048目前最详细的一篇了..

    漏洞影响

    Struts 2.3.x系列中的Showcase应用

    使用了struts1 插件,并在使用ActionMessages时将客户端可控的参数拼接传递给new ActionMessage,如下图

    插件介绍

    Struts1插件主要是为了可以在Struts2应用程序中使用Struts1操作和ActionForms,插件提供了一个包装类org.apache.struts2.s1.Struts1Action来对Struts1的 Action 包装成为 Struts2中的Action,要在Struts 2应用程序中使用现有的Struts 1操作和ActionForms需要在对应的struts.xml中进行配置,如下图

    触发流程

    拿官网中漏洞公告提到的应用Showcase做演示,将程序导入到eclipse中方便分析。根据官网给出的关键字进行搜索,发现 org.apache.struts2.showcase.integration.SaveGangsterAction 满足漏洞触发条件。

     根据对应的配置文件找到对应的action为/integration/saveGangster,将showcase在tomcat中跑起来,访问/integration/saveGangster,将断点设置在org.apache.struts2.s1.Struts1Action的execute方法中,发起一次请求来试试。

    我们看到88行获取了一个Action对象,这个对象就是存在漏洞那个class

     

    99行调用了存在漏洞的SaveGangsterAction的execute方法,并将我们的表单请求封装到了actionForm中

    org.apache.struts2.showcase.integration.SaveGangsterAction的execute方法在45行在new ActionMessage对象时将表单的name参数拼接到了构造方法传递的参数中。通过org.apache.struts.action.Action.addMessages(HttpServletRequest request, ActionMessages messages)将请求与ActionMessages一起封装,使用了一个全局变量Globals.MESSAGE_KEY来做标识

    在String org.apache.struts2.s1.Struts1Action.execute()的101行通过Globals.MESSAGE_KEY将这个ActionMessages获取了出来,进入后面的流程

    108行调用了getText(msg.getKey()),将我们拼接后的参数后传入了getText(),最后在com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage(String key, Locale locale, ValueStack valueStack, Object[] args, String defaultMessage)方法的683行调用了TextParseUtil.translateVariables来执行了ognl表达式

  • 相关阅读:
    (转)在IOS应用中从竖屏模式强制转换为横屏模式
    IOS设备屏幕旋转相关技术收集
    超级工厂模式
    (转) objectiveC中的接口@interface与泛型(id)
    (原创)IOS播放视频
    IOS检测网络连接状态(转)
    (转) MPMoviePlayerController 电影播放器—IOS开发
    Oracle分析表和索引
    How To Partition Existing Table Using DBMS_Redefinition
    不可用索引
  • 原文地址:https://www.cnblogs.com/Zhujianshi/p/7146396.html
Copyright © 2020-2023  润新知