当前位置:首页 > 行业动态 > 正文

Windows Token九种权限的利用分别是怎么样的

Windows Token九种权限的利用分别是:1. 普通用户(或者LocalService用户)的特殊Token有哪些可利用方法;2. 能否提权;3. 如何判断;4. 利用思路;5. 实现代码。

Windows Token九种权限的利用分别是怎么样的

在Windows操作系统中,Token是一种用于表示访问权限的对象,Token权限可以分为两类:对象权限(如读取、写入、修改等)和系统权限(如管理员、用户等),本文将详细介绍Windows Token的九种权限及其利用方法。

创建访问令牌

1、生成凭据

要使用Token权限,首先需要创建一个访问令牌,访问令牌是由用户名和密码生成的一组安全凭据,可以使用以下命令生成凭据:

net user <用户名> <密码> /add

2、导入证书

为了提高安全性,可以使用数字签名证书对访问令牌进行加密,需要从证书颁发机构(CA)购买一个数字签名证书,并将其导入到用户的计算机上,导入证书的命令如下:

certutil -addstore -f "<证书存储路径>" "<证书文件路径>"

3、生成访问令牌

使用以下命令生成访问令牌:

runas /user:<用户名> "%ProgramFiles%Windows Kits10binNETFX 4.6.1 Toolsx86fxgentoken.exe" /grant:<用户名>:<密码> /out:<访问令牌文件路径> /tbn:<访问令牌名称> /tr=<请求协议> /ru=<请求URL> /rl=<请求资源> /rn=<返回资源> /rp=<返回路径> /rd=<返回数据> /rf=<返回格式> /rq=<请求查询字符串> /rm=<请求消息正文> /rt=<返回时间> /rue=<返回编码> /rce=<返回压缩编码> /rcv=<返回验证码> /rct=<返回内容类型> /rdc=<返回数据编码> /rdb=<返回数据二进制格式> /rdf=<返回数据格式> /rdp=<返回数据指针> /rdl=<返回数据长度> /rds=<返回数据大小> /rdw=<返回数据宽度]"

利用Token权限

1、ShellExecuteEx函数

ShellExecuteEx函数可以用于执行一个程序或打开一个文档,通过设置SHELLEXECUTEINFO结构体的dwFlags参数,可以将Token权限传递给ShellExecuteEx函数,以下代码演示了如何使用ShellExecuteEx函数打开一个包含Token权限的文档:

include <windows.h>
include <iostream>
int main()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    // 创建一个包含Token权限的文档模板字符串
    wchar_t* documentTemplate = L"%%windir%%system32\calc.exe";
    wchar_t commandLine[MAX_PATH];
    swprintf(commandLine, MAX_PATH, L""%s"", documentTemplate);
    // 将Token权限传递给ShellExecuteEx函数
    BOOL result = ShellExecuteExW(&si, L"open", commandLine, NULL, NULL, SW_SHOWNORMAL, NULL);
    if (result)
    {
        std::cout << "成功打开文档" << std::endl;
    }
    else
    {
        std::cout << "打开文档失败,错误代码:" << GetLastError() << std::endl;
    }
    return 0;
}

2、Windows API函数

除了使用C++标准库中的ShellExecuteEx函数外,还可以使用Windows API函数来执行具有Token权限的操作,以下代码演示了如何使用ShellExecuteA函数打开一个包含Token权限的文档:

include <windows.h>
include <iostream>
include <string>
include <vector>
include <shlobj.h> // ShellExecuteExA函数所在的头文件
pragma comment(lib, "shell32.lib") // 需要链接shell32.lib库文件以使用ShellExecuteExA函数
pragma comment(lib, "ole32.lib") // 需要链接ole32.lib库文件以使用CoTaskMemFree函数和IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用IStream接口类库文件以使用我
0