首页 > 系统相关 >Windows下一个普通权限的账户,怎么启动一个有管理员权限的进程

Windows下一个普通权限的账户,怎么启动一个有管理员权限的进程

时间:2024-03-14 11:34:28浏览次数:19  
标签:string 账户 Windows 管理员 进程 权限 public

我们知道,如果Windows下一个普通权限的账户,直接启动管理员权限的进程,会弹出输入管理员账号密码的提示窗。但是如果我想通过自启动一个管理员权限的进程怎么办呢,既然都自启动了,还要我输入账号密码就说不过去了。

  1. 一开始尝试了任务计划程序中的“运行任务时,请使用下列用户账户”,赋值管理员账户(这个过程必须在管理员身份的账户下操作),然后触发器使用普通账户登录触发。结果普通账户登录时,并没有执行成功。提示权限受限。
  2. 通过CreateProcessWithLogonW指定某个管理员账户进行创建进程
    private void Exec()
    {
        STARTUPINFO startupInfo = new STARTUPINFO();
        PROCESS_INFORMATION processInfo;
    
        bool result = CreateProcessWithLogonW(
            "admin",  // 替换为有效的用户名
            ".",    // 替换为有效的域名,如果是本地用户可以使用"."
            "123",  // 替换为有效的密码
            LogonFlags.LOGON_WITH_PROFILE,
            textBox.Text,  // 替换为有效的应用程序路径
            null,
            CreationFlags.CREATE_UNICODE_ENVIRONMENT,
            IntPtr.Zero,
            null,
            ref startupInfo,
            out processInfo);
    
        if (!result)
        {
            int error = Marshal.GetLastWin32Error();
            Console.WriteLine("CreateProcessWithLogonW failed with error code: {0}", error);
        }
        else
        {
            Console.WriteLine("Process started successfully!");
        }
    }
    
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool CreateProcessWithLogonW(
        string userName,
        string domain,
        string password,
        LogonFlags logonFlags,
        string applicationName,
        string commandLine,
        CreationFlags creationFlags,
        IntPtr environment,
        string currentDirectory,
        ref STARTUPINFO startupInfo,
        out PROCESS_INFORMATION processInformation);
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct STARTUPINFO
    {
        public Int32 cb;
        public string reserved;
        public string desktop;
        public string title;
        public UInt32 x;
        public UInt32 y;
        public UInt32 xSize;
        public UInt32 ySize;
        public UInt32 xCountChars;
        public UInt32 yCountChars;
        public UInt32 fillAttribute;
        public StartupInfoFlags flags;
        public UInt16 showWindow;
        public UInt16 reserved2;
        public IntPtr reserved3;
        public IntPtr stdInput;
        public IntPtr stdOutput;
        public IntPtr stdError;
    }
    
    [Flags]
    public enum StartupInfoFlags : uint
    {
        STARTF_USESTDHANDLES = 0x00000100,
        STARTF_USESHOWWINDOW = 0x00000001
    }
    
    [StructLayout(LayoutKind.Sequential)]
    public struct PROCESS_INFORMATION
    {
        public IntPtr hProcess;
        public IntPtr hThread;
        public int dwProcessId;
        public int dwThreadId;
    }
    
    [Flags]
    public enum LogonFlags : uint
    {
        LOGON_WITH_PROFILE = 0x00000001,
        LOGON_NETCREDENTIALS_ONLY = 0x00000002
    }
    
    [Flags]
    public enum CreationFlags : uint
    {
        CREATE_NEW_CONSOLE = 0x00000010,
        CREATE_NEW_PROCESS_GROUP = 0x00000200,
        CREATE_UNICODE_ENVIRONMENT = 0x00000400,
        EXTENDED_STARTUPINFO_PRESENT = 0x00080000
    }

    进程P启动后,虽然该进程用户名是管理员账户Admin了,但是在任务管理器那里看“特权”还是否。这时候,只要在进程P中再通过runas启动一个新进程S,这个新进程S的用户名就是“Admin”,特权为“是”。

    // 创建一个ProcessStartInfo对象
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.WorkingDirectory = Environment.CurrentDirectory;
    startInfo.FileName = programPath;
    startInfo.Verb = "runas"; // 以管理员权限运行
    
    // 以管理员权限启动应用程序
    try
    {
        Process.Start(startInfo);
    }
    catch (Exception ex)
    {
        // 处理异常
        Console.WriteLine("无法启动应用程序:{0}", ex.Message);
    }

    虽然进程属于Admin账户,但是因为是在普通账户user下创建的,所以在user下也能看到界面。(正常情况下,不同账户的进程在不同账户环境下是不可见的)

  3. 第二种方式还可以替换成创建一个快捷方式,使用这种格式路径 runas /user:机器名\administrator /savecred “应用软件路径”  。输入一个密码之后,就不再需要输入密码了(重启后也不需要输入),然后进程P启动后,虽然该进程用户名是管理员账户Admin了,但是在任务管理器那里看“特权”还是否。这时候,只要在进程P中再通过runas启动一个新进程S,这个新进程S的用户名就是“Admin”,特权为“是”。
  4. 后来尝试了组策略,设置“计算机配置”——“Windows设置”——“安全设置”——“本地策略”——“用户权限分配”,“获取同一会话中另一个用户的模拟令牌”,添加普通账户。发现普通账户启动的进程居然变成了管理员权限。如果普通账户需要做一些杀死其它账户的管理员进程的话,在“调试程序”把普通账户添加进去即可。这个方式的缺陷是在这个账户下启动的所有进程都是管理员权限。确认是否需要重启来生效。(后面验证有时候行有时候不行,得充分验证)

 

标签:string,账户,Windows,管理员,进程,权限,public
From: https://www.cnblogs.com/log9527blog/p/17879905.html

相关文章

  • Windows10, 11上,您可以使用以下PowerShell命令来启用Hyper-V功能组件 Windows server 2
    Windows11上,您可以使用以下PowerShell命令来启用Hyper-V功能组件:powershellCopyCodeEnable-WindowsOptionalFeature-Online-FeatureNameMicrosoft-Hyper-V-All这个命令将启用所有与Hyper-V相关的功能组件。请确保以管理员权限在PowerShell中运行此命令。执行以上命令后,系......
  • git 如何 实现 svn那样对某个文件的权限?
    Git和SVN在设计哲学和版本控制机制上有很大的不同,这也导致它们在处理文件和目录权限时有所不同。SVN是集中式的版本控制系统,可以很方便地对文件和目录设置细粒度的权限。而Git是分布式的版本控制系统,其设计初衷是为了让开发者之间更容易地协作,而不是对文件和目录进行细粒度......
  • Windows下Nginx的启动,停止,重启等命令
    假设安装在E:\server\nginx-1.20.0目录下cmd命令进入安装文件启动E:\server\nginx-1.20.0>startnginx或E:\server\nginx-1.20.0>nginx.exe注意:建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作。停止E:\server\nginx-1.20.0>nginx.exe-sstop或E:\serv......
  • Windows逆向之配置虚拟机环境
    安装虚拟机环境首先下载吾爱破解论坛专用版虚拟机软件VMWareWorkstation12,注册成功;再通过虚拟机启动论坛提供的WinXP系统镜像,在我的win11上完美运行。实现文件互传为了实验方便,下面要配置物理机和虚拟机之间的文件互传功能。我尝试用过VMware自带的共享文件夹和复制粘贴,但出......
  • 如何在Windows 10中恢复已删除/丢失的驱动程序?这里有几种方法
    如果你意外删除了Windows10中的驱动程序,可以尝试3种解决方案来恢复删除的驱动程序。回滚驱动程序1、按Windows+X,然后选择设备管理器以在Windows10中打开设备管理器。2、展开设备类别,并选择没有驱动程序的目标设备。3、双击目标设备以打开其“属性”窗口。4、单击驱动程......
  • Windows粘滞键后门
    Windows粘滞键后门原理:把sethc.exe粘滞键功能替换成cmd.exe的shell窗口,连续按5次shift键即可呼出cmd。①粘滞键替换成cmd的基本应用1、找到粘滞键应用所在的位置。在C:/Windows/System32这个目录(系统进程的目录)下可找到粘滞键sethc这个应用程序(系统进程)。2、备份要用到的文件......
  • 【软件安装】gogs+Jenkins 在windows服务器上实现CI/CD部署
    前景最近公司实现了CICD不过是用TFS,我在想在自己的渣渣服务器和自己配置的gogs上是不是也可以,随动手实践一下,一次不小的尝试安装下载Jenkins复制这个连接到迅雷上下载会快一点,**官方网址**https://www.jenkins.io/http://ftp-chi.osuosl.org/pub/jenkins/windows-stabl......
  • windows环境安装mysql-8.0.3
    一、下载安装包地址:https://dev.mysql.com/downloads/mysql/二、删除以前的MySql服务#查找以前是否装有mysqlscquerymysql#删除mysql,以管理员身份运行#停止mysqlnetstopmysql#删除mysql服务scdeletemysql#最后检查一遍scquerymysql三、环境准备1、将下......
  • windows环境安装mysql-8.0.3
    一、下载安装包>地址:https://dev.mysql.com/downloads/mysql/###二、删除以前的MySql服务shell#查找以前是否装有mysqlscquerymysql#删除mysql,以管理员身份运行#停止mysqlnetstopmysql#删除mysql服务scdeletemysql#最后检查一遍scquerymysql###三、环......
  • Windows Docker Desktop安装教程
    1.前言这里只介绍windowsdocker安装方式,linux及macos安装方式请自行网上搜索2.下载dockerdocker官网下载地址:https://www.docker.com/get-started/3.安装dockerdesktop3.1双击exe,点击OK进行安装3.2等待安装3.3点击继续,电脑重启3.4双击运行dockerdesktop3.5点击Ac......