【问题标题】:Adjust tokens on non-privileged accounts (C, Windows)调整非特权帐户(C、Windows)上的令牌
【发布时间】:2010-11-15 19:06:24
【问题描述】:

我正在使用以下代码(这是 MSDN 中的一个示例,稍作修改)来检查我是否对某个进程具有调试权限。如果我不尝试设置它们。

int SetDebugPriv()
{
    HANDLE TokenHandle;
    LUID lpLuid;
    TOKEN_PRIVILEGES NewState;

    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &TokenHandle))
    {
        //failed
        return 0;
    }

    if(!LookupPrivilegeValue(NULL, "SeDebugPrivilege" , &lpLuid))
    {
        //failed
        CloseHandle(TokenHandle);
        return 0;
    }

    NewState.PrivilegeCount = 1;
    NewState.Privileges[0].Luid = lpLuid;
    NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    if(!AdjustTokenPrivileges(TokenHandle, FALSE, &NewState, sizeof(NewState), NULL, NULL))
    {
        //failed
        CloseHandle(TokenHandle);
        return 0;
    }

    CloseHandle(TokenHandle);
    return 1;
}

现在,在 Windows XP 和 2003 上的某些帐户下,我在尝试设置令牌时收到拒绝访问错误。我的猜测是我无法设置该特定令牌,因为我无权这样做。 如何在非管理员帐户或低权限帐户上设置调试令牌?

代码表示赞赏。

谢谢

【问题讨论】:

    标签: c windows debugging privileges


    【解决方案1】:

    你不能。如果可以的话,这将是一个巨大的安全漏洞(SeDebugPrivilege 比 Administrator 更有魔力)。

    AdjustTokenPrivileges 打开令牌具有的权限,但未启用。例如,SeShutdownPrivilege 就是其中之一。

    您必须将权限添加到用户帐户,然后用户必须注销并重新登录(以获取具有该权限的新令牌)。

    要以编程方式向用户帐户添加权限,请从以下内容开始:http://support.microsoft.com/kb/132958

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2012-04-23
      • 2012-05-27
      相关资源
      最近更新 更多