欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]三种方法在应用层创建具有system权限的进程(有代码)

[原创]三种方法在应用层创建具有system权限的进程(有代码)

关于如何创建具有system权限进程的问题,有许多方法。俺今天整理了下,给出三种比较实用的方法。
一,  通过Inline Hook ZwCreateProcessEx修改父进程。
    在xp环境下,创建进程过程为:kernel32!CreateProcess(A\W) ->  kernel32!CreateProcessInternalW -> ntdll!ZwCreateProcessEx -> 内核。所以创建进程必须经过ZwCreateProcessEx,它参数如下:

NTSTATUS  ZwCreateProcessEx(

    OUT PHANDLE ProcessHandle,

    IN ACCESS_MASK DesiredAccess,

    IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,

    IN HANDLE ParentProcess,

    IN BOOLEAN InheritObjectTable,

    IN HANDLE SectionHandle OPTIONAL,

    IN HANDLE DebugPort OPTIONAL,

    IN HANDLE ExceptionPort OPTIONAL,

    IN HANDLE UnknownHandle

);

第四个参数ParentProcess为父进程句柄,默认情况下为0xFFFFFFFF,表示本进程为父进程。如果ZwCreateProcessEx在挂个钩,把具有system权限的进程句柄填上去,那么创建的进程就继承了它所有的权限了。
过程:
1,提升到调试权限。(DWORD EnablePrivilege (PCSTR name))
1,  打开system进程,得到句柄。OpenProcess
2,  InLine Hook ZwCreateProcessEx 修改第四参数。
3,  成功。
 
注:另外,在win 7环境下不能实现,因为在Win 7不是通过ZwCreateProcessEx,而是通过NtCreateUserProcess函数进入内核的。有搞定的通知一声!
二,  得到具有system权限的进程安全描述ACL表,然后调用CreateProcessAsUser创建一个进程,把得到的Token传递过去。
CreateProcessAsUser参数:
BOOL WINAPI CreateProcessAsUser(

  _In_opt_     HANDLE hToken,

  _In_opt_     LPCTSTR lpApplicationName,

  _Inout_opt_  LPTSTR lpCommandLine,

  _In_opt_     LPSECURITY_ATTRIBUTES lpProcessAttributes,

  _In_opt_     LPSECURITY_ATTRIBUTES lpThreadAttributes,

  _In_         BOOL bInheritHandles,

  _In_         DWORD dwCreationFlags,

  _In_opt_     LPVOID lpEnvironment,

  _In_opt_     LPCTSTR lpCurrentDirectory,

  _In_         LPSTARTUPINFO lpStartupInfo,

  _Out_        LPPROCESS_INFORMATION lpProcessInformation

);

过程:
1,  提调试权限
2,  得到pid,打开system进程,得到句柄。OpenProcess
3,  得到进程访问令牌。OpenProcessToken
4,  设置ACE具有所有访问权限。BuildExplicitAccessWithName
5,  得到安全描述符的访问控制列表。GetKernelObjectSecurity, GetSecurityDescriptorDacl
6,  将具有所有访问权限的访问控制列表加入到新的安全描述符中。SetSecurityDescriptorDacl
7,  将新的安全描述符加到TOKEN中。SetKernelObjectSecurity
8,  用TOKEN_ALL_ACCESS标志再次打开system进程,得到所有访问权限的TOKEN
9,  复制一份TOKEN。DuplicateTokenEx
10,调用CreateProcessAsUser创建进程,把复制的TOKEN作为参数。
11,成功!

注:win 7 下不能成功,OpenProcess失败!有搞定的通知一声!
三,  系统服务创建进程
    系统服务是具有system权限,所以创建一个服务,然后服务创建进程,那么就得到具有system权限的进程了。这个的代码就不贴了,有兴趣可以试下。
---代码
源码.zip

上传的附件 1.png
2.png
源码.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功