pskill跨UAC/权限提升边界的工作原理及所用Windows API探究
PsKill跨权限终止进程的Windows API解析
核心实现逻辑
PsKill能在非特权shell终止同用户会话内的高权限进程,关键在于它精准的权限请求和对Windows特权机制的利用,而非特殊API:
特权启用:
首先通过以下API链启用当前进程的SE_DEBUG_NAME特权:OpenProcessToken()获取当前进程的访问令牌LookupPrivilegeValue()查询SE_DEBUG_NAME特权的LUID值AdjustTokenPrivileges()启用该特权
这个特权允许用户操作同一会话内自己名下的所有进程,包括以管理员身份运行的实例,但无法触及Session 0的System服务进程,这和你观察到的现象一致。
进程打开与终止:
它不会像你的工具那样请求PROCESS_ALL_ACCESS,而是仅请求PROCESS_TERMINATE权限调用OpenProcess(),结合已启用的SE_DEBUG特权,就能成功打开同会话内的高权限目标进程,最后调用TerminateProcess()完成终止。
为什么taskkill/Stop-Process做不到?
这类工具没有主动启用SE_DEBUG_NAME特权,或者在打开进程时的权限请求策略更严格,因此无法绕过同用户会话内的权限限制。
内容的提问来源于stack exchange,提问作者Martin Ba
相关产品推荐
相关产品推荐

