前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >S2-029 Struts2 标签远程代码执行分析(含POC)

S2-029 Struts2 标签远程代码执行分析(含POC)

作者头像
FB客服
发布2018-02-07 17:05:26
1.4K0
发布2018-02-07 17:05:26
举报
文章被收录于专栏:FreeBuf

0x00 标签介绍

Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。 Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。

Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说 strtus2提供了大部分标签,可以在各种表现技术中使用。包括最常用的jsp页面,也可以说 Velocity 和FreeMarker等模板技术中的使用。

0x01 漏洞分析

struts2的i18n,text标签的 name属性处理的时候会经过两次ognl执行,从而导致远程代码执行。

标签使用如下所示:

上面两个标签name属性都存在问题 下面对i18n标签做分析

跟踪i18n标签name 属性在代码中的处理:

其中对findString方法进行跟踪,则可以跟踪到

com.opensymphony.xwork2.ognl.OgnlValueStack的protected Object findValue(Stringexpr, String field, String errorMsg) 方法,该方法是用来执行ognl表达式。

其中findValue方法进行跟踪,则可以跟踪到

com.opensymphony.xwork2.ognl.OgnlValueStack的public Object findValue(Stringexpr, boolean throwExceptionOnFailure) 方法,该方法也是用来执行ognl表达式。

测试流程:

假设设置request的lan 属性为:

其中运行的ognl表达式为%{request.lan}, 则第一次ognl表达式执行结果为:

执行完成之后name的值为:

然后将name值传入下面一行代码执行ognl, 其中ognl表达式为:

从而导致命令执行在/tmp目录下生成dbapptest 文件。

其中poc中需要设置#_memberAccess['allowPrivateAccess']=true 用来授权访问private方法:

#_memberAccess['allowStaticMethodAccess']=true 用来授权允许调用静态方法, #_memberAccess['excludedPackageNamePatterns']=#_memberAccess['acceptProperties']用来将受限的包名设置为空 #_memberAccess['excludedClasses']=#_memberAccess['acceptProperties']用来将受限的类名设置为空 #a=@java.lang.Runtime@getRuntime(),#a.exec('touch/tmp/dbapptest'),new java.lang.String('')执行系统命令

0x02 漏洞poc

* 作者:安恒信息安全研究院(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 标签介绍
  • 0x01 漏洞分析
  • 0x02 漏洞poc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档