跳转至

0x05-在命令行下使用 Powershell 提权

description: windows 下 powershell 没有 sudo 命令,每次需要管理员权限的时候都需要按

简介

windows 下每次打开一个普通 cli 后发现要按 [win + X + A] 组合键才能打开管理员 cli ,感觉很麻烦,然后在网速查到了这个方法。

快速上手

在普通 powershell 下输入下面的命令即可提权:

Start-Process -verb runas "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Powershell.exe"

后面的路径根据实际的路径修改,最好用任务管理器查看系统使用的那个,系统内可能有几个 powershell 程序。

入门篇

其实这样输入有点麻烦,bash 有 alias 这样的命令的给命令起别名, cmd 有doskey 这样的命令,而 powershell 的是 Set-Alias 。 下面的命令分别是添加、获取和删除别名:

Set-Alias {$alias} {$command}
Get-Alias | findstr {$alias}
Remove-Item alias:{$alias}

用 Set-Alias 找不到能传参的方式,用了函数的方式,用法如下:

Function FuncName args[]
{
      code;
}

实际命令如下:

Function fuck {Start-Process -verb runas "C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe"}
Set-Alias sudo fuck

删除函数如下:

del Function:{$your function}

进阶篇

上面的方法可以使用但是,关闭程序后旧失效了,找了一种方法把脚本写入全局。 找到全局设置文件 Microsoft.PowerShell_profile.ps1 :

Get-Variable profile | Format-List

如果没有自己创建一个,写入下面的代码:

Function fuck {Start-Process -verb runas "C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe"}
Set-Alias sudo fuck

保存后发现无法加载,因为默认不加载外部脚本,管理员权限下 powershell 运行:

set-ExecutionPolicy RemoteSigned

REMOTESIGNED 脚本可以运行。这是 Windows Server 2012 R2 中的默认执行策略。 要求从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)具有受信任的发布者的数字签名。 不要求你在本地计算机上编写的脚本(不是从 Internet 下载的)具有数字签名。 如果脚本已被取消阻止(比如通过使用 Unblock-File cmdlet),则运行从 Internet 下载但未签名的脚本。 存在运行来自 Internet 之外的源的未签名脚本和已签名但却是恶意的脚本的风险。

附录

cmd 提权:

runas /user:[email protected] cmd
doskey sudo=runas /user:{$username} cmd

最后更新: 2021-07-26
创建日期: 2021-03-04