番茄系統(tǒng)家園 - 免費重裝系統(tǒng)!簡單裝系統(tǒng),人人都是裝機大師!
當前位置:首頁>Win7資訊 > win7及以上系統(tǒng)檢測目標進程對文件和文件夾的訪問權(quán)限

win7及以上系統(tǒng)檢測目標進程對文件和文件夾的訪問權(quán)限

來源:番茄系統(tǒng)家園瀏覽:時間:2021-08-21 21:50:25

win7及以上系统检测目标进程对文件和文件夹的访问权限

[]

阅读本文的朋友需要对访问控制模型有初步的了解了解(访问令牌)ACL(访问控制列表)DACL(选择访问控制列表)ACE(访问控制列表项)等与访问控制模型相关的名词含义及之间的关系当然我也会在文中简要科普一下ACM。

 

写这篇文章的目的主要是最近在写一个Win下本地提权的东西涉及到了对ACL的操作以前对ACL总是避而远之访问控制模型比较头疼一个API会牵出一大把要用的API。毕竟涉及到用户访问的安全肯定不能让编程人员随意更改这些机制复杂一些也可以理解可是能参考的资料很少MSDN上关于一些访问控制相关API的使用和结构体的描述也含糊不清也没有什么代码实例。这篇文章也是在查阅国外了一些文献加上自己研究测试后完成的发出来希望对涉及这方面编程的朋友有帮助。

 -----》》熟悉访问控制机制的可以跳过本段

因为是科普我这里简单介绍下访问控制模型(ACM)别嫌我啰嗦懂得直接Pass往下看。ACM中最重要的两部分是访问令牌()和安全描述符表()。访问令牌存在于访问主体中安全描述符表存在于访问客体中。比如我去米国我就是访问主体米国就是访问客体我持有的签证就是访问令牌。系统中访问主体是进程客体是一切系统对象。访问令牌中有当前用户的唯一标识SID组唯一标识SID以及一些权限标志(Privilege)。安全描述符表(SD)存在于Windows系统中的任何对象中(文件注册表互斥量信号量等等)。SD中包含对象所有者的SID组SID以及两个非常重要的数据结构选择访问控制列表(DACL)和系统访问控制列表(SACL)其中SACL涉及系统日志用的很少可以先无视。DACL中包含一个个ACE访问控制入口也是权限访问判断的核心当一个进程访问某一对象的时候对象会将进程的Token与自身的ACE依次比对直到被允许或被拒绝前面的ACE优于后面的ACE。整体的一个权限检查过程如下图 

 

-----》》

 

上面简单介绍了本文要用到的也是Windows访问控制模型核心部分的一些知识下面来介绍下如何编程实现遍历ACL来进行访问权限的检查。本文主要针对文件对象进行介绍其他类型的对象大同小异。要用到的两个主要API为GetFileSecurity()和AccessCheck()。GetFileSecurity能够获取指定文件的安全描述符表而AccessCheck可以指定要检查的权限该函数能够将获得的安全描述符表与当前进程的Token进行检查来判断进程对该文件对象是否允许相应的权限。不过这两个API并不那么容易用因为其中要涉及到安全描述符表和访问令牌的获取因此又牵扯出一大把API也涉及一些访问控制的知识。下面依次介绍要使用到的API然后给出整体的代码。GetFileSecurity的函数原型如下

BOOLWINAPIGetFileSecurity(__inLPCTSTRlpFileName,__inSECURITY_INFORMATIONRequestedInformation,__out_optPSECURITY_DESCRIPTORpSecurityDescriptor,__inDWORDnLength,__outLPDWORDlpnLengthNeeded);lpFileName指定了要获取SD的文件。首先要定义一个PSECURITY_DESCRIPTOR的安全描述符表指针因为描述符表大小未知所以要调用两次GetFileSecurity()第一次将nLength置0函数会返回实际大小然后第二次用获取的大小去接收完整的SD代码如下

文件开始部分定义的内存分配释放函数常量

   #defineAllocMem(x)(HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,x))   #defineFreeMem(x)(HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,x))   ...   ...   BOOLbRsFALSE;   DWORDdwSizeNeeded0;   PSECURITY_DESCRIPTORpsdNULL;   SECURITY_INFORMATION siOWNER_SECURITY_INFORMATION   |GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION;                    bRsGetFileSecurity(lpFileName,si,psd,0,dwSizeNeeded);            //第一次调用获得SD实际大小            if(!bRs)            {                      if(GetLastError()ERROR_INSUFFICIENT_BUFFER)                      {                               psd(PSECURITY_DESCRIPTOR)AllocMem(dwSizeNeeded);                               //根据获取到的大小对psd分配内存                      }else                      {                               printf(

[-]GetSDfailed:%d,GetLastError());                               returnbRs;                      }            }        if(!GetFileSecurity(lpFileName,si,psd,dwSizeNeeded,dwSizeNeeded))            {                      printf(

[-]GetSDfailed:%d,GetLastError());                      returnbRs;            }至此针对指定文件对象的安全描述符表已经得到下一步需要提取出访问进程的访问令牌(Token)。首先调用OpenProcessToken()获得本进程的Token参数比较简单参考MSDN吧。然后有个比较重要的内容我们需要模拟获得的令牌因为OpenProcessToken获得的是进程的初始Token不能直接用于访问权限的判断我们要调用DuplicateToken()以当前用户的身份模拟一个同样的Token出来具体使用待会儿看代码吧。下面到了会让人比较困惑的地方就是GENERIC_MAPPING这个结构体这个开始看MSDN一直一头雾水没理解到底怎么使用MSDN上也没有代码实例。鼓捣了一上午最后发现其实很简单。比如我们使用CreateFile()创建一个文件的时候可以指定一些权限访问的标志如GENERIC_WRITEGENERIC_READ等等。但是这些权限标志都是通用的标志还可以用这些标志来创建或打开其他类型的对象。在表示文件对象的时候这些通用标志所包含的实际文件对象特有的权限标志列表如下

比如当我们想使用AccessCheck()检查当前进程对某文件是否有某种权限的时候我们必须要调用MapGenericMask()把GENERIC_READGENERIC_WRITE

GENERIC_EXECUTE等等这类通用权限控制标志映射成该类型的对象特有的权限控制标志对于文件就是FILE_GENERIC_READ等。而这个函数中就用到了GENERIC_MAPPING这个结构体。最后就是调用AccessCheck()参数还是比较复杂的我这里简单介绍下函数原型如下

相关阅读

  • win7系统文件夹拒绝访问的最佳解决方法【图文教程】
  • windows文件夹 “用户”文件夹为什么win7文件夹访问权限那么大
  • win7及以上系统检测目标进程对文件和文件夹的访问权限
  • 推薦系統(tǒng)

    • 雨林木風 winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載

      雨林木風 winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載64位
      系統(tǒng)大?。?/em>0MB系統(tǒng)類型:WinXP

      雨林木風在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)知名品牌,雨林木風WindowsXP其系統(tǒng)口碑得到許多人認可,積累了廣大的用戶群體,是一款穩(wěn)定流暢的系統(tǒng),雨林木風 winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載,有需要的朋友速度下載吧。

      系統(tǒng)等級:
      進入下載 >
    • 蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專用

      蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專用64位
      系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win7

      蘿卜家園win7純凈版是款非常純凈的win7系統(tǒng),此版本優(yōu)化更新了大量的驅(qū)動,幫助用戶們進行舒適的使用,更加的適合家庭辦公的使用,方便用戶,有需要的用戶們快來下載安裝吧。

      系統(tǒng)等級:
      進入下載 >
    • 雨林木風xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載

      雨林木風xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載64位
      系統(tǒng)大?。?/em>1.01GB系統(tǒng)類型:WinXP

      雨林木風xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載,雨林木風WinXP系統(tǒng)技術(shù)積累雄厚深耕多年,采用了新的系統(tǒng)功能和硬件驅(qū)動,可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動對硬件的加速,加固了系統(tǒng)安全策略,運行環(huán)境安全可靠穩(wěn)定。

      系統(tǒng)等級:
      進入下載 >
    • 蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載

      蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載64位
      系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10

      蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,(win10企業(yè)版,win10 ghost,win10鏡像),蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 ghost鏡像 X64位系統(tǒng)下載,其系統(tǒng)口碑得到許多人認可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團隊推出的蘿卜家園

      系統(tǒng)等級:
      進入下載 >
    • 蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載

      蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載64位
      系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10

      蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 ghost X64位 系統(tǒng)下載,蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,其系統(tǒng)口碑得到許多人認可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團隊推出的蘿卜家園win10國內(nèi)鏡像版,基于國內(nèi)用戶的習慣,做

      系統(tǒng)等級:
      進入下載 >
    • windows11下載 蘿卜家園win11專業(yè)版 X64位 V2023官網(wǎng)下載

      windows11下載 蘿卜家園win11專業(yè)版 X64位 V2023官網(wǎng)下載64位
      系統(tǒng)大小:0MB系統(tǒng)類型:Win11

      蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,windows11下載 蘿卜家園win11專業(yè)版 X64位 官網(wǎng)正式版可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動對硬件的加速,使得軟件在WINDOWS11系統(tǒng)中運行得更加流暢,加固了系統(tǒng)安全策略,WINDOWS11系統(tǒng)在家用辦公上跑分表現(xiàn)都是非常優(yōu)秀,完美的兼容各種硬件和軟件,運行環(huán)境安全可靠穩(wěn)定。

      系統(tǒng)等級:
      進入下載 >

    熱門系統(tǒng)

    常用系統(tǒng)