返回首页
EN
H7 / SECURITY RESEARCH NOTES

通过AdjustTokenPrivileges实现进程访问令牌权限修改

环境说明

IPHOSTNAMENOTE
10.10.10.88win10_dqy测试主机

前言

  • 在渗透过程中,我们要对任意一个进程进行指定了写相关的访问权限的OpenProcess操作,只需要当前进程具有SeDebug的权限即可。

复现过程

流程及使用函数

  • 打开进程访问令牌 -> 取得特权的LUID值 -> 调整访问令牌特权值
  • 相关涉及的函数:
OpenProcessToken();
LookupPrivilegeValue();
AdjustTokenPrivileges();

代码示例

#include <stdio.h>
#include <windows.h>

int main(void)
{
     HANDLE token_handle;
     //打开访问令牌
     if (!OpenProcessToken(GetCurrentProcess(),       //要修改权限的进程句柄
          TOKEN_ALL_ACCESS,          //要对令牌进行何种操作
          &token_handle              //访问令牌
     ))
     {
          printf("openProcessToken error");
     }

     LUID luid;
     if (!LookupPrivilegeValue(NULL,                 //查看的系统,本地为NULL
          SE_DEBUG_NAME,        //要查看的特权名称
          &luid                 //用来接收标识符
     ))
     {
          printf("lookupPrivilegevalue error");
     }

     TOKEN_PRIVILEGES tkp;
     tkp.PrivilegeCount = 1;
     tkp.Privileges[0].Luid = luid;
     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     //调整访问令牌权限
     if (!AdjustTokenPrivileges(token_handle,    //令牌句柄
          FALSE,           //是否禁用权限
          &tkp,            //新的特权的权限信息
          sizeof(tkp),     //特权信息大小
          NULL,            //用来接收特权信息当前状态的buffer
          NULL             //缓冲区大小
     ))
     {
          printf("adjust error");
     }

     printf("sucessful");
     return 0;
}
  • 编译并运行如图: