以管理员身份获取会话令牌而不使用密码

Get session token as administrator without using password

我正在使用 LogonUser 获取目标会话令牌的 HANDLE 并将其用于函数 CreateProcessAsUser.

status = LogonUserW(sessiondata->UserName.Buffer, sessiondata->LogonDomain.Buffer,NULL,LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &targettoken);

我的可执行文件将由管理员执行,但即使我是管理员,我也无法获取令牌句柄并且总是出现 1326 错误:登录失败:未知用户名或密码错误。。我将 NULL 设为 lpszPassword,希望它能检查我是否是管理员并授予我获取访问令牌的权限。

当然我不应该为此目的使用 LogonUser,所以你有什么建议?

由于我的高级权限(管理员),我希望在不提供密码的情况下获得访问令牌的句柄。

My executable is a simple application which is intended to get screenshots from all logon sessions

嘿,我们可以忘记获取用户的登录令牌。实际上有一个相当好的方法来做到这一点。

  1. 枚举所有进程。
  2. 如果进程是 WINLOGON 进程且会话 ID 不为零
  3. 窃取它的令牌
  4. 使用该令牌启动进程;在命令行上传递一个文件
  5. 该过程截屏并将其保存到文件
  6. 当你的所有进程都完成后,拿起你的文件。

来自 WINLOGON 的令牌具有管理权限并且位于正确的会话中以查看用户的桌面。如果你不创建任何 windows 你就不会受到用户的攻击。 (事实上​​ ,此令牌会在更高的完整性级别上创建 windows。普通的粉碎攻击不起作用,但是如果您创建 windows,您仍然可以接收虚假的键盘或鼠标输入。)

您很可能只会获得当前活动屏幕和任何活动远程桌面会话的屏幕截图。其他会话停止重绘并删除屏幕缓冲区以节省内存。

很可能您的用户没有 SeAssignPrimaryTokenPrivilege 和 SeTcbPrivilege。我过去曾将这些提供给我的用户;然而,获取它们的最简单方法是通过设置并作为服务启动成为本地系统,然后在完成后删除该服务。

OP 评论说他通过 PsExec 进入 SYSTEM 并且能够获得令牌。 PsExec 在后台执行 CreateService,所以它们都是一样的。