Apache Struts2再爆高危漏洞

Apache Struts2再爆高危漏洞60网站安全检测最新struts2命令执行漏洞分析时间:2013-07-1809:46 在struts2中,DefaultActionMapper类支持以”action:”、”redirect:”、”redirectAction:”作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,

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

60网站安全检测最新struts2命令执行漏洞分析

时间:2013-07-18 09:46  

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

这里以“redirect:”前缀举例,struts2会将“redirect:”前缀后面的内容设置到redirect.location当中,这里我们一步步跟踪,首先是这个getMapping函数跟入


truts框架是Apache基金会Jakarta项目组的一个Open Source项目,它采用MVC模式,帮助java开发者利用J2EE开发Web应用。Struts框架广泛应用于运营商、政府、金融行业的门户网站建设,作为网站开发的底层模版使用,目前大量开发者利用j2ee开发web应用的时候都会利用这个框架。Apache Struts2 是第二代基于Model-View-Controller (MVC)模型的JAVA企业级WEB应用框架。

  根据分析结果,此问题源于Apache Struts2对参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行。Apache Struts2的action:、redirect:和redirectAction:前缀参数在实现其功能的过程中使用了Ognl表达式,并将用户通过URL提交的内容拼接入Ognl表达式中,远程攻击者可以通过构造恶意URL来执行任意Java代码,进而可执行任意命令。redirect:和redirectAction:此两项前缀为Struts默认开启功能。

此次爆出的高危漏洞,受影响Apache Struts2版本: Struts 2.0.0 – Struts 2.3.15。

 Apache Struts2再爆高危漏洞

这里一直到这个handleSpecialParameters(),继续跟入

 Apache Struts2再爆高危漏洞

Apache Struts2再爆高危漏洞

这里真正传入OGNL表达式是在这个parameterAction.execute()中,继续跟入来到DefaultActionMapper.java的代码

 Apache Struts2再爆高危漏洞

这里key.substring(REDIRECT_PREFIX.length())便是前缀后面的内容也就是OGNL表达式,struts2会调用setLocation方法将他设置到redirect.location中。然后这里调用mapping.setResult(redirect)redirect对象设置到mapping对象中的result里,如图所示

 Apache Struts2再爆高危漏洞

然而上面的过程只是传递OGNL表达式,真正执行是在后面,这里是在FilterDispatcher类中的dispatcher.serviceAction()方法,这里的mapping对象中设置了传入的OGNL

Apache Struts2再爆高危漏洞

这里跟入方法最终会在TextParseUtil这个类的调用stack.findValue()方法执行OGNL

Apache Struts2再爆高危漏洞

PoC

http://192.168.237.131:8080/u/hello1.action?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{‘calc’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’),#matt.getWriter()}

 

漏洞重现:

Apache Struts2再爆高危漏洞

转载  http://blog.sina.com.cn/s/blog_62347f3c0101a0da.html


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

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

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


相关推荐

  • 扑克牌花色排列_扑克牌花色大小顺序图片

    扑克牌花色排列_扑克牌花色大小顺序图片前阵子去某家公司笔试,发现有一道扑克牌排序的算法题,题目的大致意思是从一个给定的扑克牌文件读取内容,里面的内容是每行一个扑克牌牌面值,如♠J,♥Q,♣A,♦10等,要求对该文本进行两种排序,一种是按S

    2022年8月3日
    8
  • Web后端开发入门(2)

    Web后端开发入门(2)搭建JavaWeb应用开发环境–Tomcat服务器下载与安装首先,搜索Tomcat,找到如图网址点击,进入Tomcat官网在最左边一栏,有个Download,找到最新版Tomcat9,点击下拉,找到如上图所示位置,Core核心:zip版,tar.gz版(Linux系统),32位版,64位版,安装版。前几个版本都不需要安装,如果你需要安装就下载最后一个,然后选中自己要下载的版本,下载。安装…

    2022年6月22日
    25
  • oracle for循环遍历数组,foreach循环

    oracle for循环遍历数组,foreach循环Smartyforeach控制循环次数1.在smarty中数组是经常会用到的,循环遍历数组用section或者foreach,如何得到数组长度或者判断一个数组个数呢?可以用{$array|count}来试试。2.{foreachfrom=$variablekey=keyname=nameiteam=valu…文章最美的回忆2017-11-15781浏览量bboss动…

    2022年10月23日
    0
  • linux ss 命令用法说明

    linux ss 命令用法说明

    2022年2月15日
    66
  • k8s最新版本安装_我的世界1.17版本下载

    k8s最新版本安装_我的世界1.17版本下载三分钟安装k8s-v1.20.8版本1.所有机器关闭防火墙,selinux。systemctlstopfirewalldsystemctldisablefirewalldsetenforce0sed-i’s/=enforcing/=disabled/g’/etc/selinux/config2.关闭swap分区swapoff-a#临时sed-i’/swap/s/^/#/’/etc/fstab#永久3.修改内核参数vi/etc/sysctl.d/k8s.c

    2022年9月28日
    0
  • 电机的力矩、转速和功率「建议收藏」

    电机的力矩、转速和功率「建议收藏」转载来源:[JACK]《电机的力矩、转速和功率》大学电机学这门课程的时候,往往是从电磁场的相互转换关系开始学起,然后会分析很多很多的向量图及等值电路,把人弄得晕晕乎乎。工作当中从事电机的控制的时候,更多的则是实现上一些前人已经做好了的成熟算法。(比如到底选择FOC还是直接转矩?怎样选择合理的弱磁算法?怎样减小力矩纹波?)在工作过程中慢慢地就把一些基础的理论知识当成了大家都约定俗成的定量,…

    2022年5月14日
    58

发表回复

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

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