- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经创建了一些代码,用于使用 PssCaptureSnapshot
执行进程克隆,然后执行克隆的小型转储。
但是,在某些进程中,我在运行 PssCaptureSnapshot
(以提升的方式运行)时被拒绝访问。这根本不是问题,事实上,我无法执行克隆的进程也无法使用 ProcDump(来自 SysInternals 的工具)进行克隆。
但是,奇怪的是,如果我打开本地主机的 PowerShell PSSession
并从那里运行我的应用程序...创建克隆没有问题!
现在,我脑海中立刻浮现的是……特权。所以我检查了 PSSession
内部的权限与外部的权限,然后......宾果游戏! PSSession 几乎拥有人类已知的所有特权,而在 PSSession 之外,我只有少数特权。
没什么大不了的,我想...我会开始为自己分配权限,一次一个,在两者之间调用 PssCaptureSnapshot
。当我不再被拒绝访问时,我知道我需要哪种特权!
这个计划是万无一失的。那是……直到我用完分配的权限并且我仍然被拒绝访问……
所以现在我真的很纠结:为什么它在 PSSession 内部工作而不是外部,当所有的特权(理论上)都相同时?我该如何进一步解决这个问题?
如有任何帮助,我们将不胜感激。
PS:如果您认为有帮助,我很乐意发布代码。但请记住,我的访问被拒绝,事实上它在 PSSession 内部工作但不在 之外,而且 ProcDump 也不能为这些进程创建克隆......我不认为代码是相关的。
编辑
whoami/all 的结果
本地 session :
USER INFORMATION
----------------
User Name SID
================== ===========================================
xxxxxxxxxxxxxxxxxx S-1-5-21-1509752874-53682476-648048294-1107
GROUP INFORMATION
-----------------
(listing only groups that appear in this session, but don't appear in the other)
NT AUTHORITY\REMOTE INTERACTIVE LOGON Well-known group S-1-5-14 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE Well-known group S-1-5-4 Mandatory group, Enabled by default, Enabled group
LOCAL Well-known group S-1-2-0
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeSecurityPrivilege Manage auditing and security log Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
SeLoadDriverPrivilege Load and unload device drivers Disabled
SeSystemProfilePrivilege Profile system performance Disabled
SeSystemtimePrivilege Change the system time Disabled
SeProfileSingleProcessPrivilege Profile single process Disabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Disabled
SeCreatePagefilePrivilege Create a pagefile Disabled
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeDebugPrivilege Debug programs Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Disabled
SeUndockPrivilege Remove computer from docking station Disabled
SeManageVolumePrivilege Perform volume maintenance tasks Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
SeCreateSymbolicLinkPrivilege Create symbolic links Disabled
USER CLAIMS INFORMATION
-----------------------
User claims unknown.
Kerberos support for Dynamic Access Control on this device has been disabled.
在 PSSession 中:
USER INFORMATION
----------------
User Name SID
================== ===========================================
xxxxxxxxxxxxxxxxxx S-1-5-21-1509752874-53682476-648048294-1107
GROUP INFORMATION
-----------------
(listing only groups that appear in this session, but don't appear in the other)
NT AUTHORITY\NETWORK Well-known group S-1-5-2
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
=============================== ========================================= =======
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Enabled
SeSecurityPrivilege Manage auditing and security log Enabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Enabled
SeLoadDriverPrivilege Load and unload device drivers Enabled
SeSystemProfilePrivilege Profile system performance Enabled
SeSystemtimePrivilege Change the system time Enabled
SeProfileSingleProcessPrivilege Profile single process Enabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Enabled
SeCreatePagefilePrivilege Create a pagefile Enabled
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeDebugPrivilege Debug programs Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Enabled
SeUndockPrivilege Remove computer from docking station Enabled
SeManageVolumePrivilege Perform volume maintenance tasks Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
SeTimeZonePrivilege Change the time zone Enabled
SeCreateSymbolicLinkPrivilege Create symbolic links Enabled
USER CLAIMS INFORMATION
-----------------------
User claims unknown.
Kerberos support for Dynamic Access Control on this device has been disabled.
最佳答案
在对 cogumel0 进行了相对较长的研究之后,我们找到了问题的确切根源。
首先我们发现PssCaptureSnapshot
当且仅当它用 PSS_CAPTURE_VA_CLONE
调用时才会失败标志 - 因此用于捕获进程中所有可克隆页面的快照。
尽管我们有进程句柄和对进程的所有必需访问权限(比如 PROCESS_ALL_ACCESS
)- 对于某些进程 PssCaptureSnapshot
返回错误。为什么?
我注意到错误是仅当进程在某个作业中运行时。 (为了确定这一点,我们可以使用 IsProcessInJob
)和 PssCaptureSnapshot
在这种情况下可以返回 2 个不同的错误:
ERROR_NOT_ENOUGH_QUOTA
- 我在 win8.1 和 win10 中查看 - 它为某些 chrome.exe
进程(不是全部)返回 sayERROR_ACCESS_DENIED
- 此错误仅在我们处理想要 snap - 在另一个 session 中运行(比较我们的过程)和这个仅在 win8.1 中 - 在 win10 中没有此错误,即使在工作和另一个 session 。为了理解为什么会发生这种情况 - 需要看看如何 PssCaptureSnapshot
内部工具PSS_CAPTURE_VA_CLONE
语义。它通过 fork 目标进程(是的,在 windows 下 fork)来完成。为此任务使用了未记录的 ZwCreateProcessEx
接口(interface)。当 SectionHandle == 0(win32 CreateProcess
总是在此处传递在 exe 文件上创建的部分(如果现在说完全正确 CreateProcess
使用另一个 api , 这是早)) ZwCreateProcessEx
克隆(fork)进程(ParentProcess)而不是基于SectionHandle(基于一些 exe 文件)创建新进程
但是如果 ParentProcess 在工作中 - 子(我们的 fork )进程也将被放置在这个工作中。这可能是问题。
第一个作业可以限制作业中的进程数。如果说作业有此限制 - 作业中不超过 1 个进程 - ZwCreateProcessEx
并因错误 STATUS_QUOTA_EXCEEDED
而失败 - 结果为 PssCaptureSnapshot
返回给我们 ERROR_NOT_ENOUGH_QUOTA
。这是 chrome.exe
案例 - 出于安全原因,一些 chrome 进程在作业中运行(限制在 1 个进程中)(此进程也有 Untrusted Mandatory Level 但这与问题)
但即使作业在 win8.1 中没有事件进程数限制(或者我们没有超过此限制)- 在作业中属于另一个 session - 调用失败并显示 STATUS_ACCESS_DENIED
。为什么这个 ?这已经是内部实现细节,现在(在 Windows 10 中)它发生了变化——不再有这个错误——我们可以 fork 进程,即使它在工作和另一个 session 中。一些提示为什么我们可以得到 AssignProcessToJobObject
页:
All processes within a job must run within the same session as the job.
所以这里有一些与作业对象和跨 session 相关的窗口限制。
如果有趣,如何在 Windows 8.1 上重现/测试此错误?在我看来,最简单的方法是——在 session 0 中运行一些 Windows 服务——该服务必须对系统不重要(很容易启动/停止它)并且有自己的 exe。对于我来说,“msdtc.exe”是完美的受害者。所以打开它,先尝试快照,然后放入作业中,然后再尝试快照。并查看不同的:
NTSTATUS status;
BOOLEAN b;
if (0 <= (status = RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, TRUE, FALSE, &b)))
{
// GetProcessIdByName custom function not shown here
if (ULONG dwProcessId = GetProcessIdByName(L"msdtc.exe"))
{
DbgPrint("found dwProcessId=%x\n", dwProcessId);
if (HANDLE hProcess = OpenProcess(PROCESS_CREATE_PROCESS|PROCESS_QUERY_LIMITED_INFORMATION |
PROCESS_SET_QUOTA|PROCESS_TERMINATE , FALSE, dwProcessId))
{
BOOL bInJob;
if (IsProcessInJob(hProcess, 0, &bInJob))
{
if (!bInJob)
{
HPSS SnapshotHandle;
ULONG err;
if (!(err = PssCaptureSnapshot(hProcess, PSS_CAPTURE_VA_CLONE, 0,&SnapshotHandle)))
{
PssFreeSnapshot(NtCurrentProcess(), SnapshotHandle);
}
DbgPrint("PssCaptureSnapshot=%u\n", err);
if (HANDLE hJob = CreateJobObject(0, 0))
{
bInJob = AssignProcessToJobObject(hJob, hProcess);
CloseHandle(hJob);
if (bInJob)
{
if (IsProcessInJob(hProcess, 0, &bInJob) && bInJob)
{
DbgPrint("process in job now!\n");
if (!(err = PssCaptureSnapshot(hProcess, PSS_CAPTURE_VA_CLONE, 0,&SnapshotHandle)))
{
PssFreeSnapshot(NtCurrentProcess(), SnapshotHandle);
}
DbgPrint("PssCaptureSnapshot=%u\n", err);
}
else
{
DbgPrint("process not in job !?\n");
}
}
else
{
DbgPrint("AssignProcessToJobObject error=%u\n", GetLastError());
}
}
else
{
DbgPrint("CreateJobObject error=%u\n", GetLastError());
}
}
else
{
DbgPrint("process already in job\n");
}
}
else
{
DbgPrint("IsProcessInJob error=%u\n", GetLastError());
}
CloseHandle(hProcess);
}
else
{
DbgPrint("OpenProcess error=%u\n", GetLastError());
}
}
}
else
{
DbgPrint("RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE)=%x\n", status);
}
在 Windows 8.1 中,我得到了下一个 dbgprint:
found dwProcessId=950
PssCaptureSnapshot=0
process in job now!
PssCaptureSnapshot=5
但在 windows 10 中是另外一张图:
found dwProcessId=4d0
PssCaptureSnapshot=0
process in job now!
PssCaptureSnapshot=0
这是 Windows 错误还是功能 - 很难说
关于c# - PssCreateSnapshot - 访问被拒绝的奇怪情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44067938/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!