zoukankan      html  css  js  c++  java
  • win32

    C:Userspath>whoami /priv

    在cmd中输入whoami /priv后将获得当前令牌(标准用户)的权限。

    C:Userspath>tasklist /v /fo csv | findstr /i "Command Prompt"

    输入上面的command命令后获得cmd.exe的pid,以及其他一些信息。

    下面需要一些代码来禁用权限。

    #include <windows.h>
    #include <stdio.h>
    #include <TlHelp32.h>
    
    void print_privileges(HANDLE hToken)
    {
        DWORD size = 0;
        if (!GetTokenInformation(hToken, TokenPrivileges, NULL, 0, &size) && GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
            PTOKEN_PRIVILEGES tp = (PTOKEN_PRIVILEGES)malloc(size);
            if (tp != NULL && GetTokenInformation(hToken, TokenPrivileges, tp, size, &size)) {
                size_t i;
                for (i = 0; i < tp->PrivilegeCount; ++i) {
                    char name[64] = "?";
                    DWORD name_size = sizeof name;
                    LookupPrivilegeNameA(0, &tp->Privileges[i].Luid, name, &name_size);
                    PRIVILEGE_SET ps = {
                        1, PRIVILEGE_SET_ALL_NECESSARY, {
                            { { tp->Privileges[i].Luid.LowPart, tp->Privileges[i].Luid.HighPart } }
                        }
                    };
                    BOOL fResult;
                    PrivilegeCheck(hToken, &ps, &fResult);
                    printf("%-*s %s
    ", 32, name, fResult ? "Enabled" : "Disabled");
                }
            }
            free(tp);
        }
    }
    int disable_all_privileges(DWORD pid)
    {
        int ret = 1;
        const HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid);
        if (hProcess) {
            HANDLE hToken;
            if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
                ULONG return_length;
                TOKEN_LINKED_TOKEN tlk;
                puts("
    Before:");
                print_privileges(hToken);
    
                /* Disable all privileges. */
                if (AdjustTokenPrivileges(hToken, TRUE, 0, 0, 0, 0) || GetLastError() != NOERROR) {
                    puts("
    After:");
                    print_privileges(hToken);
                    ret = 0;
                }
                CloseHandle(hToken);
            }
        }
        return ret;
    }
    
    void print_process_info(DWORD pid)
    {
        const HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hSnapshot != INVALID_HANDLE_VALUE) {
            PROCESSENTRY32 pe32 = { pe32.dwSize = sizeof pe32 };
            BOOL ok;
            for (ok = Process32First(hSnapshot, &pe32); ok; ok = Process32Next(hSnapshot, &pe32))
                if (pe32.th32ProcessID == pid) {
                    puts("Process info:");
                    printf("dwSize: %lu
    ", pe32.dwSize);
                    printf("th32ProcessID: %lu
    ", pe32.th32ProcessID);
                    printf("cntThreads: %lu
    ", pe32.cntThreads);
                    printf("th32ParentProcessID: %lu
    ", pe32.th32ParentProcessID);
                    printf("pcPriClassBase: %ld
    ", pe32.pcPriClassBase);
                    wprintf(L"szExeFile: %s
    ", pe32.szExeFile);
                    break;
                }
            CloseHandle(hSnapshot);
        }
    }
    
    int main(int argc, char* argv[])
    {
        int ret = 1;
        if (argc > 1) {
            DWORD pid;
            if (sscanf_s(argv[1], "%u", &pid) == 1) {
                print_process_info(pid);
                ret = disable_all_privileges(pid);
            }
        }
        return ret;
    }

    最后在cmd输入上面代码编译生成的exe可执行文件和cmd.exe的pid。 如果成功,将看到当前cmd的所有权限都被disable。那么你在cmd中运行其他exe后,将没有任何权限。

  • 相关阅读:
    第七次作业
    Beta敏捷冲刺每日报告——Day5
    Beta敏捷冲刺每日报告——Day4
    Beta敏捷冲刺每日报告——Day3
    Beta敏捷冲刺每日报告——Day2
    Beta敏捷冲刺每日报告——Day1
    MyGod--Beta版本前期报告
    第六次作业
    游标的使用
    Hadoop科普文——常见的45个问题解答
  • 原文地址:https://www.cnblogs.com/strive-sun/p/13431625.html
Copyright © 2011-2022 走看看