开篇Struts2历史漏洞系列分析文章

Posted 安恒信息安全研究院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开篇Struts2历史漏洞系列分析文章相关的知识,希望对你有一定的参考价值。

小编注

此系列文章是Pentes7eam团队Smi1e同学的Java安全的学习笔记,同时也作为团队内部的技术分析文章。正如Smi1e在下文的前言中提到,互联网上关于漏洞分析的文章不够体系或不够详尽,对初学者不够友好。本着共同学习、共同成长的态度,我们也将逐步的把内部的知识与大家一同分享。
序号 内容
1 S2-001 利用表单错误进行远程代码执行
2 S2-005 参数名过滤不严谨导致代码执行
3 S2-007 当类型转换出错时,用户输入被当作OGNL执行
4 S2-009 远程代码执行漏洞
5 S2-012 重定向导致的OGNL表达式执行
6 S2-015 ActionName 配置了通配符时导致的OGNL表达式执行
7 S2-016 特殊参数名前缀导致的OGNL表达式执行
8 S2-032 特殊参数名前缀 method: 导致的OGNL表达式执行
9 S2-045 上传数据异常导致的OGNL表达式执行
10 S2-052 REST插件远程执行命令漏洞
11 S2-057 namespace可控导致的OGNL表达式执行


Smi1e@Pentes7eam

前言

Struts2 在历史上爆过很多高危漏洞且都是和OGNL表达式有关的,在后续的漏洞版本中官方不断的增加安全策略来应对OGNL表达式安全问题,但是依然被不断的绕过,我历时近一个月分析了与S2有关的11个历史高危漏洞来做为我Java Web漏洞学习的开篇。
在整个过程中也遇到了一些问题,一个问题是关于S2的分析文章并不多,写的比较详细的更是少之又少,很多细节上的东西都是一笔带过,对初学者很不友好,所以我只能慢慢调试再配合网上的一些资料去理解,另外随着后面的一些漏洞分析以及Struts2的执行流程学习你会发现前后的知识会逐渐串起来,以至于分析到最后你会发现自己已经大致知道了整个Struts2框架的运行流程和一些基本的使用方法,每个漏洞出现问题的点对应Struts2执行流程的哪一个部分也会比较清楚。另一个问题是网上的分析文章中会有一些理解错误的地方,这个可能只有自己调试了或者去多搜一些其他人的文章对比并且多思考为什么才能发现,当然我写的东西也可能出现错误,希望大佬们能够反馈给我指正、交流。
最后一个问题就是关于 Struts2 沙盒绕过的理解,我是学习的《浅析 OGNL 的攻防史》:https://paper.seebug.org/794/、《ognl-apache-struts-exploit-CVE-2018-11776》:https://securitylab.github.com/research/ognl-apache-struts-exploit-CVE-2018-11776这两篇文章,译文在这里:《作为武器的CVE-2018-11776:绕过Apache Struts 2.5.16 OGNL 沙箱》:https://xz.aliyun.com/t/3395。我即使仔细的阅读文章还是很难理解透绕过的原理,最后带着问题跟了一遍 OgnlValueStack 的初始化过程才完全理解,并且发现文章有一些地方描述的不是特别准确,比如文章说Struts 2.3.29 的 excludedClasses 中通过禁用 ognl.MemberAccessognl.DefaultMemberAccess 来修复利用 @ognl.OgnlContext@DEFAULT_MEMBER_ACCESS  进行的沙盒绕过,但其实该黑名单是不会拦截类似 @ognl.OgnlContext@DEFAULT_MEMBER_ACCESS 这种静态属性调用的,而我认为沙盒修复的关键是 Ognl3.0.18+Ognl3.1.10+OgnlContext 删除了 _memberAccess 这个key,从而禁止了对 _memberAccess 的访问。可以看到在使用 ognl3.0.6 的情况下我修改S2-032的配置文件后依然可以使用payload #_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS 进行绕过。

另外对于这种漏洞频出的应用从第一个漏洞分析到其最后一个漏洞确实是一个很好的学习方法,你会学习到各个漏洞作者与厂商补丁之间的博弈,也能为以后对此类漏洞的挖掘做一些铺垫,当然你也会发现随着补丁的更替越靠后,博弈的难度也将越来越高,这也是攻防的乐趣。最后贴一下Struts2各版本的下载地址:http://archive.apache.org/dist/struts/

关于我们

人才招聘

一、高级攻防研究员


工作地点:

1.杭州/重庆/上海/北京;


岗位职责:
1.前沿攻防技术研究;
2.负责完成定向渗透测试任务;
3.负责红队工具的研发。

任职要求:
1.三年以上相关工作经验,若满足以下所有条件,则可忽略此要求;
2.熟练掌握Cobalt Strike、Empire、Metasploit等后渗透工具的使用;
3.熟练掌握工作组/域环境下的各种渗透思路、手段;
4.具有大型、复杂网络环境的渗透测试经验;
5.具有独立的漏洞挖掘、研究能力;
6.熟练至少一门开发语言,不局限于C/C++、Java、php、Python等;
7.良好的沟通能力和团队协作能力。

加分项:
1.红队工具开发经验;
2.有良好的技术笔记习惯。


联系人:姜女士
邮箱:double.jiang@dbappsecurity.com.cn
手机;15167179002,微信同号


以上是关于开篇Struts2历史漏洞系列分析文章的主要内容,如果未能解决你的问题,请参考以下文章

Struts2-命令-代码执行突破分析系列S2-015

Struts(S2-048)远程命令执行漏洞分析

JAVA代审之Struts2漏洞S2-057的调试分析

JAVA代审之Struts2漏洞S2-057的调试分析

漏洞分析Struts2 S2-052(CVE-2017-9805)远程代码执行漏洞分析

重磅 | Struts2 S2-048远程代码执行漏洞分析报告