好文档 - 专业文书写作范文服务资料分享网站

从管理员身份获得SYSTEM-权限的四种方法

天下 分享 时间: 加入收藏 我要投稿 点赞

从管理员身份获得SYSTEM-权限的四种方法

1. 以服务方式运行

因为以服务方式运行程序时,相当于运行程序的是系统进程,所以, 被指定运行的程序自然而然的继承了系统进程的权限,也就是 SYSTEM 权限。

;@echo off ;goto make

;====================================================================================

; 以 SYSTEM 权限运行程序 - GetSys1 ; 采用以服务方式运行的方法

;==================================================================================== .386

.model flat, stdcall option casemap :none

include c:\\masm32\\include\\windows.inc include c:\\masm32\\include\\kernel32.inc include c:\\masm32\\include\\advapi32.inc include c:\\masm32\\include\\masm32.inc

includelib c:\\masm32\\lib\\kernel32.lib includelib c:\\masm32\\lib\\advapi32.lib

1 / 33

从管理员身份获得SYSTEM-权限的四种方法

includelib c:\\masm32\\lib\\masm32.lib

_ReLaunch proto

CTXT MACRO text local lbl .const lbl db text,0 .code exitm ENDM .code start proc

LOCAL stStartupInfo : STARTUPINFO LOCAL procinfo : PROCESS_INFORMATION

invoke CreateMutex, NULL, TRUE, CTXT(\ invoke GetLastError

.if eax==ERROR_ALREADY_EXISTS

invoke RtlZeroMemory, addr stStartupInfo, sizeof stStartupInfo mov stStartupInfo.cb, sizeof stStartupInfo

invoke CreateProcess, 0, CTXT(\ addr stStartupInfo, addr procinfo

invoke CloseHandle, procinfo.hProcess

2 / 33

从管理员身份获得SYSTEM-权限的四种方法

invoke CloseHandle, procinfo.hThread .else

invoke _ReLaunch .endif

invoke ExitProcess, NULL start endp

_ReLaunch proc

LOCAL hSCManager LOCAL hService

LOCAL szName[MAX_PATH] : byte

invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE .if eax!=0

mov hSCManager, eax

invoke OpenService, hSCManager, CTXT(\ .if eax!=0 push eax

invoke DeleteService, eax call CloseServiceHandle .endif

invoke GetModuleFileName, NULL, addr szName, MAX_PATH

3 / 33

从管理员身份获得SYSTEM-权限的四种方法

invoke CreateService, hSCManager, CTXT(\CTXT(\Temp Service\

SERVICE_START + SERVICE_QUERY_STATUS + DELETE, \\

SERVICE_WIN32_OWN_PROCESS

+

SERVICE_INTERACTIVE_PROCESS, SERVICE_DEMAND_START, \\

SERVICE_ERROR_IGNORE, addr szName, NULL, NULL, NULL, NULL, NULL

.if eax!=0

mov hService, eax

invoke StartService, hService, 0, NULL invoke DeleteService, hService invoke CloseServiceHandle, hService .endif

invoke CloseServiceHandle, hSCManager .endif ret _ReLaunch endp end start :make

set path=%path%;c:\\masm32\\bin set appname=GetSys1

4 / 33

从管理员身份获得SYSTEM-权限的四种方法

ml /nologo /c /coff %appname%.bat

link /nologo /subsystem:windows %appname%.obj del %appname%.obj echo. pause

GetSys1(第一次运行的这个进程 GetSys1 我们称为 A) 开始运行时先创建一个互斥量,

接着以服务的方式重新启动自己

(又一次运行的进程 GetSys1 我们称为 B),重新运行后的 B 已经具有了 SYSTEM 权限。

B 再通过 CreateProcess 函数运行 regedit.exe 程序,

因为 B 具有 SYSTEM 权限,所以 regedit.exe 从中继承了 SYSTEM 权限。 运行完了 regedit.exe 后 B 结束运行,

然后 A 中的 StartService 函数返回,A 结束运行。就是因为 StartService 函数不会直接返回,

所以不能够直接通过服务的方式运行 regedit.exe。

2. 添加 ACL 的方法

主要思想是调用 CreateProcessAsUser 函数来运行程序,CreateProcessAsUser 函数的第一个参数是特定用户的令牌,

把这个参数设为具有 SYSTEM 权限的令牌即可。

;@echo off ;goto make

5 / 33

从管理员身份获得SYSTEM-权限的四种方法

从管理员身份获得SYSTEM-权限的四种方法1.以服务方式运行因为以服务方式运行程序时,相当于运行程序的是系统进程,所以,被指定运行的程序自然而然的继承了系统进程的权限,也就是SYSTEM权限。;@echooff;gotomake;=====================================
推荐度:
点击下载文档文档为doc格式
2o2ot57dam38gut0xsx29kcek7hm3l0140h
领取福利

微信扫码领取福利

微信扫码分享