7.4 通过API枚举进程权限

这篇具有很好参考价值的文章主要介绍了7.4 通过API枚举进程权限。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GetTokenInformation 用于检索进程或线程的令牌(Token)信息。Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息。GetTokenInformation函数也可以用来获取这些安全信息,通常用于在运行时检查某个进程或线程的权限或安全信息。

该函数原型如下:

BOOL GetTokenInformation(
  HANDLE TokenHandle,
  TOKEN_INFORMATION_CLASS TokenInformationClass,
  LPVOID TokenInformation,
  DWORD TokenInformationLength,
  PDWORD ReturnLength
);

参数说明:

  • TokenHandle:当前进程或线程令牌的句柄。
  • TokenInformationClass:表示要检索的Token信息类别,是TOKEN_INFORMATION_CLASS枚举类型的值之一。这个参数的值确定TokenInformation参数的方案,以及返回的信息类型。
  • TokenInformation:指向要接收信息的缓冲区的指针。
  • TokenInformationLength:要接收的缓冲区的大小(以字节为单位)。
  • ReturnLength:实际缓冲区的大小(以字节为单位)。

常见的TokenInformationClass值包括:

  • TokenUser:用户标识信息;
  • TokenGroups:组信息;
  • TokenOwner:所有者信息;
  • TokenPrimaryGroup:主组信息;
  • TokenPrivileges:特权信息;
  • TokenSessionId:会话ID信息。

该函数的返回值为BOOL类型。如果函数执行成功,则返回非零值,否则返回零。如果函数返回零,则可以调用 GetLastError() 函数获取错误代码。

#include <stdio.h>
#include <ShlObj.h>
#include <Windows.h>

void ShowPrviliges(HANDLE process)
{
  // 通过进程句柄获取到进程令牌
  HANDLE hToken;
  OpenProcessToken(process, TOKEN_QUERY, &hToken);

  // 获取查询到的令牌信息
  DWORD dwSize;
  GetTokenInformation(hToken, TokenPrivileges, NULL, NULL, &dwSize);

  // 根据令牌中的大小分配空间
  char* pBuf = new char[dwSize] {};
  GetTokenInformation(hToken, TokenPrivileges, pBuf, dwSize, &dwSize);

  // 将内存中的内容用要查询数据结构体解析
  TOKEN_PRIVILEGES* pTp = (TOKEN_PRIVILEGES*)pBuf;
  DWORD dwCount = pTp->PrivilegeCount;               // 解析出权限个数
  LUID_AND_ATTRIBUTES* pluid = pTp->Privileges;      // 具备的权限类型

  for (int i = 0; i < dwCount; i++, pluid++)
  {
    char szName[100] = {};
    DWORD dwLen = sizeof(szName);
    LookupPrivilegeNameA(0, &pluid->Luid, szName, &dwLen);
    switch (pluid->Attributes)
    {
    case 0:
      printf("ID => %3d \t 状态 => 关闭 \t\t 类型 => %s \n", i, szName); break;
    case 1:
      printf("ID => %3d \t 状态 => 默认 \t\t 类型 => %s \n", i, szName); break;
    case 2:
      printf("ID => %3d \t 状态 => 开启 \t\t 类型 => %s \n", i, szName); break;
    case 3:
      printf("ID => %3d \t 状态 => 默认开启 \t\t 类型 => %s \n", i, szName); break;
    }
  }
  delete pBuf;
}

int main(int argc, char* argv[])
{
  // 拿到自身程序的句柄
  HANDLE LocalProcess = GetCurrentProcess();
  ShowPrviliges(LocalProcess);

  system("pause");
  return 0;
}

如下所示代码同样是一段权限检索的实现,函数EnumOwner()接受一个指向进程令牌的句柄,并使用它来检索有关令牌用户的信息。使用GetTokenInformation()获取一个包含令牌用户的安全标识符(SID)指针的TOKEN_USER结构。然后,它使用LocalAlloc()SID分配内存,并使用CopySid()SID复制到该内存中。最后使用LookupAccountSid()检索与SID相关联的用户账户的名称。函数返回指向包含账户名称的字符字符串的指针。

main()函数中使用OpenProcess()PROCESS_QUERY_INFORMATION标志检索当前进程的句柄。然后,它使用OpenProcessToken()TOKEN_QUERY标志检索进程令牌的句柄。将该句柄传递给EnumOwner()以检索与令牌相关联的用户账户名称。最后使用printf()打印账户名称,使用CloseHandle()关闭令牌句柄,使用CloseHandle()关闭进程句柄。文章来源地址https://www.toymoban.com/news/detail-710039.html

#include <stdio.h>
#include <Windows.h>
#include <TlHelp32.h>

// 通过进程Token获取进程权限类型
char * __stdcall EnumOwner(HANDLE htoken)
{
  DWORD dwLen;
  PSID pSid = 0;
  TOKEN_USER* pWork;
  SID_NAME_USE use;
  TCHAR User[256], Domain[256];

  GetTokenInformation(htoken, TokenUser, NULL, 0, &dwLen);
  pWork = (TOKEN_USER*)LocalAlloc(LMEM_ZEROINIT, dwLen);
  if (GetTokenInformation(htoken, TokenUser, pWork, dwLen, &dwLen))
  {
    dwLen = GetLengthSid(pWork->User.Sid);
    pSid = (PSID)LocalAlloc(LMEM_ZEROINIT, dwLen);
    CopySid(dwLen, pSid, pWork->User.Sid);
    dwLen = 256;
    LookupAccountSid(NULL, pSid, &User[0], &dwLen, &Domain[0], &dwLen, &use);
    // printf("\t 主机 => %s \t 权限用户 => %s ", Domain, User);
    return User;
  }
  return NULL;
}

int main(int argc, char* argv[])
{
  HANDLE ProcessHandle, hToken;

  ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE,GetCurrentProcessId());
  if (ProcessHandle != NULL)
  {
    if (OpenProcessToken(ProcessHandle, TOKEN_QUERY, &hToken))
    {
      char *token = EnumOwner(hToken);
      printf("[+] 当前进程身份: %s \n", token);
      CloseHandle(hToken);
      CloseHandle(ProcessHandle);
    }
  }

  system("pause");
  return 0;
}

到了这里,关于7.4 通过API枚举进程权限的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【隧道篇 / SSL】(7.4) ❀ 01. 只允许国内IP通过SSL VPN访问内网 ❀ FortiGate 防火墙

    【简介】SSL VPN可以让公司员工远程访问公司内网的服务器,发现有些国外IP也在尝试登录SSL VPN,领导要求,只允许国内IP可以登录SSL VPN,如何解决这个问题?   SSL VPN配置条件 要想成功的配置SSL VPN,首先需要有一条可以远程访问的宽带,然后是验证用的用户名和密码,以及

    2024年01月19日
    浏览(37)
  • Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举

    权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符: 有四种作用范围由小到大 (private - 缺省 -protected - public) 注: 不同包下的子类指的是,不同包下的子类对象能访问,当前类创建父类对象访问不了。 定义成员变量、构造器、方法等一般需满足如下要

    2024年02月02日
    浏览(48)
  • Linux命令200例:ps用于查看当前系统中运行的进程信息(常用)

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过 具体的系统的命令讲解 加上

    2024年02月12日
    浏览(42)
  • 014-信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目

    1、JS前端架构-识别分析 2、JS前端架构-开发框架分析 3、JS前端架构-打包器分析 4、JS前端架构-提取FUZZ 解决: 1、如何从表现中的JS提取价值信息 2、如何从地址中FUZZ提取未知的JS文件 3、如何从JS开放框架WebPack进行测试 CMS(意思为“网站内容管理系统”, 用来管理网站后台,

    2024年01月21日
    浏览(34)
  • 【Linux命令详解 | chmod命令】 chmod命令用于修改文件或目录的权限,保护文件安全性。

    在Ubuntu系统中, chmod 命令是一个强大的工具,用于修改文件或目录的权限,从而保护文件的安全性。通过适当配置权限,可以控制哪些用户或用户组可以访问、读取、写入或执行特定文件或目录。 chmod 命令是Linux/Unix系统中的基础命令之一,对于系统管理员和开发者来说都是

    2024年02月12日
    浏览(35)
  • 进程控制相关 API-创建进程、进程分离、进程退出、进程阻塞

    目录 进程控制相关 API 父进程创建子进程 fork() 进程分离 exec 族函数 进程的退出 return/exit() 进程的阻塞 wait() 其它 API 进程控制相关 API p.s 进程控制中的状态转换 相关 API,用户很少用到,在此不提。 一般来说,这些内核标准 API,在执行出错(可能是资源不够、权限不够等等

    2024年02月10日
    浏览(34)
  • WebUSB API 是一个用于在Web应用程序中访问USB设备的API

    WebUSB API 是一个用于在Web应用程序中访问USB设备的API。它允许Web应用程序与连接到计算机的USB设备进行通信,从而实现与USB设备的交互和控制。 以下是WebUSB API的基本使用说明: 获取USB设备许可:您可以使用navigator.usb.requestDevice方法请求用户许可来访问USB设备。示例代码如下

    2024年04月27日
    浏览(32)
  • 【Linux命令详解 | ps命令】 ps命令用于显示当前系统中运行的进程列表,帮助监控系统状态。

    在Linux系统中, ps 命令是一个重要的工具,用于展示当前正在运行的进程列表。作为一个博主,了解如何使用 ps 命令可以帮助你监控系统状态,定位问题,以及优化资源分配。本文将从参数列表、知识点讲解和实际示例等方面,深入介绍 ps 命令。 下表列出了 ps 命令的常用参

    2024年02月13日
    浏览(38)
  • 如何开通 API 服务并授予项目 API 服务的调用权限

    涂鸦 IoT 开发平台开放多种业务 API 服务,全面覆盖全屋智能管理、行业通用设备用户管理、垂直品类开放能力、各类数据服务等业务需求。 本文将为大家介绍如何开通 API 服务并授予项目 API 服务的调用权限。 开发者调用的部分  云服务 API  会获取用户个人隐私数据,因此

    2024年01月15日
    浏览(27)
  • 【论文阅读】通过解缠绕表示学习提升领域泛化能力用于主题感知的作文评分

    本文工作聚焦于从领域泛化的视角提升AES模型的泛化能力,在该情况下,目标主题的数据在训练时不能被获得。 本文提出了一个主题感知的神经AES模型(PANN)来抽取用于作文评分的综合的表示,包括主题无关(prompt-invariant)和主题相关(prompt-specific)的特征。 为了提升表示

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包