
PowerSploit - A PowerShell Post-Exploitation Framework
Fork 以添加一些我通常手动执行的 PowerView.ps1 功能
在目标机器上执行代码。
Invoke-DllInjection将 Dll 注入到你选择的进程 ID 中。
Invoke-ReflectivePEInjection以反射方式将 Windows PE 文件(DLL/EXE)加载到 PowerShell 进程中,或者以反射方式将 DLL 注入到远程进程中。
Invoke-Shellcode将 shellcode 注入到你选择的进程 ID 中,或在本地 PowerShell 中注入。
Invoke-WmiCommand在目标计算机上执行 PowerShell ScriptBlock,并使用 WMI 作为 C2 通道返回其格式化输出。
修改和/或准备脚本以在受感染的机器上执行。
Out-EncodedCommand压缩、Base-64 编码,并为 PowerShell 载荷脚本生成命令行输出。
Out-CompressedDll压缩、Base-64 编码,并输出生成的代码以在内存中加载托管 dll。
Out-EncryptedScript加密文本文件/脚本。
Remove-Comment从脚本中去除注释和多余的空格。
为 PowerShell 脚本添加持久化功能。
New-UserPersistenceOption为 Add-Persistence 函数配置用户级持久化选项。
New-ElevatedPersistenceOption为 Add-Persistence 函数配置提升权限持久化选项。
Add-Persistence为脚本添加持久化功能。
Install-SSP安装安全支持提供程序(SSP)dll。
Get-SecurityPackages枚举所有已加载的安全包(SSP)。
杀毒软件在 PowerShell 面前毫无还手之力!
Find-AVSignature使用与 “class101” 中 DSplit 相同的方法定位单个字节的 AV 签名。
你的数据全都属于我!
Invoke-TokenManipulation列出可用的登录令牌。使用其他用户的登录令牌创建进程,并在当前线程中模拟登录令牌。
Invoke-CredentialInjection使用明文凭据创建登录,而不触发可疑的事件 ID 4648(显式凭据登录)。
Invoke-NinjaCopy通过读取原始卷并解析 NTFS 结构,从 NTFS 分区卷中复制文件。
Invoke-Mimikatz使用 PowerShell 以反射方式将 Mimikatz 2.0 加载到内存中。可用于转储凭据而无需向磁盘写入任何内容。可用于 Mimikatz 提供的任何功能。
Get-Keystrokes记录按下的键、时间和活动窗口。
Get-GPPPassword检索通过组策略首选项推送的账户的明文密码和其他信息。
Get-GPPAutologon如果通过组策略首选项推送,则从 registry.xml 检索自动登录用户名和密码。
Get-TimedScreenshot按固定时间间隔截取屏幕截图并将其保存到文件夹中的函数。
New-VolumeShadowCopy创建新的卷影副本。
Get-VolumeShadowCopy列出所有本地卷影副本的设备路径。
Mount-VolumeShadowCopy挂载卷影副本。
Remove-VolumeShadowCopy删除卷影副本。
Get-VaultCredential显示 Windows 凭据保管库对象,包括明文 Web 凭据。
Out-Minidump生成进程的全内存转储(minidump)。
Get-MicrophoneAudio从系统麦克风录制音频并保存到磁盘。
用 PowerShell 制造混乱。
Set-MasterBootRecord概念验证代码,用你选择的消息覆盖主引导记录。
Set-CriticalProcess使你的机器在退出 PowerShell 时蓝屏。
帮助在目标上进行权限提升的工具。
PowerUp常见权限提升检查的集散地,同时包含一些武器化利用向量。
帮助在渗透测试的情报收集阶段进行侦察的工具。
Invoke-Portscan使用常规套接字进行简单的端口扫描,大致基于 nmap。
Get-HttpStatus提供字典文件时,返回指定路径的 HTTP 状态代码和完整 URL。
Invoke-ReverseDnsLookup扫描 IP 地址范围以查找 DNS PTR 记录。
PowerViewPowerView 是一系列用于执行网络和 Windows 域枚举及利用的函数。
用于辅助渗透测试侦察阶段的字典集合。这些字典取自以下来源。
除非另有明确说明,PowerSploit 项目和所有单独的脚本均采用 BSD 3-Clause 许可证。
有关详细用法信息,请参阅每个脚本中基于注释的帮助。
要安装此模块,请将整个 PowerSploit 文件夹放入你的某个模块目录中。默认的 PowerShell 模块路径列在 $Env:PSModulePath 环境变量中。
默认的每用户模块路径为:"$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" 默认的计算机级模块路径为:"$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
要使用该模块,请键入 Import-Module PowerSploit
要查看已导入的命令,请键入 Get-Command -Module PowerSploit
如果你正在运行 PowerShell v3 并希望移除烦人的“是否确实要运行从 Internet 下载的脚本?”警告,在将 PowerSploit 放入模块路径后,请运行以下单行命令:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
有关每个单独命令的帮助,请使用 Get-Help。
注意:此模块中包含的工具均设计为可以单独运行。将它们包含在模块中只是为了提高可移植性。
我们需要贡献!如果你对 PowerSploit 有很好的想法,我们很乐意添加。新增内容需要满足以下要求:
对于 PowerSploit 的所有贡献者和未来贡献者,请在编写脚本/模块时遵循此风格指南。
无论如何都要避免使用 Write-Host。PowerShell 函数/cmdlet 不是命令行工具!包含使用 Write-Host 的代码的拉取请求将不予考虑。你应该改为输出自定义对象。有关创建自定义对象的更多信息,请阅读以下文章:
如果你想在屏幕上显示相关的调试信息,请使用 Write-Verbose。用户总是可以在命令后面添加 '-Verbose'。
始终为每个脚本提供描述性的、基于注释的帮助。此外,请务必包含你的姓名和 BSD 3-Clause 许可证(除非存在阻止应用 BSD 许可证的特殊情况)。
确保所有函数遵循正确的 PowerShell 动词-名词约定。使用 Get-Verb 列出 PowerShell 使用的默认动词。对支持动词的例外情况将逐案考虑。
我倾向于变量名大写,并尽可能具有描述性。
在代码之间提供逻辑间隔。缩进代码以使其更具可读性。
如果你发现自己重复代码,请编写一个函数。
捕获所有可预见的错误并提供有意义的输出。如果你有一个应停止脚本执行的错误,请使用 'Throw'。如果你有一个不需要停止执行的错误,请使用 Write-Error。
如果你正在编写与 Win32 API 交互的脚本,请尽量避免使用 Add-Type 内联编译 C#。如果可能,请尝试使用 PSReflect 模块。
不要使用硬编码路径。脚本应开箱即用。除非他们愿意,否则任何人都无需修改代码。
高度期望兼容 PowerShell v2。
在合理的情况下使用位置参数,并使参数成为必填参数。例如,我正在寻找类似以下内容:
[Parameter(Position = 0, Mandatory = $True)]不要使用任何别名,除非接收管道输入需要。对于不熟悉特定别名的人来说,它们会使代码更难阅读。
尽量不要让命令运行得太长。例如,管道是换行的自然位置。
不要过度使用内联注释。只有在代码的某些方面可能让读者感到困惑时才使用它们。
不要使用 Out-Null 来抑制不需要/无关的输出,而是将不需要的输出保存到 $null。这样做可以带来轻微的性能提升。
在合理的情况下为参数使用默认值。理想情况下,你希望脚本无需任何参数即可工作。
如果脚本创建复杂的自定义对象,请包含一个 ps1xml 文件以正确格式化对象的输出。