在目标机器上执行代码。
Invoke-DllInjection将DLL注入到你选择的进程ID中。
Invoke-ReflectivePEInjection将Windows PE文件(DLL/EXE)反射加载到PowerShell进程中,或者将DLL反射注入到远程进程中。
Invoke-Shellcode将shellcode注入到你选择的进程ID中,或在本地PowerShell内注入。
Invoke-WmiCommand在目标计算机上执行PowerShell脚本块,并使用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)。
AV在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生成进程的全内存迷你转储。
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,并且想去除烦人的“你真的要运行从互联网下载的脚本吗”警告,请将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文件,该文件将正确格式化对象的输出。