PowerShellMafia/PowerSploit
GitHub: PowerShellMafia/PowerSploit
PowerSploit 是一个基于 PowerShell 的后渗透框架,用于在入侵系统后执行代码、窃取凭据并维持持久化访问。
Stars: 12987 | Forks: 4719
## 本项目已不再维护
### PowerSploit 是一系列 Microsoft PowerShell 模块,可用于协助渗透测试人员在评估的各个阶段开展工作。PowerSploit 包含以下模块和脚本:
## 代码执行
**在目标机器上执行代码。**
#### `调用-Dll注入`
将 DLL 注入到您选择的进程 ID 中。
#### `调用-反射性PE注入`
以反射方式将 Windows PE 文件(DLL/EXE)加载到 PowerShell 进程中,或将 DLL 以反射方式注入到远程进程中。
#### `调用-Shellcode`
将 Shellcode 注入到您选择的进程 ID 中,或在本地 PowerShell 内注入。
#### `调用-WmiCommand`
在目标计算机上执行一个 PowerShell ScriptBlock,并使用 WMI 作为 C2 通道返回其格式化输出。
## 脚本修改
**修改和/或准备在受损机器上执行的脚本。**
#### `输出-编码命令`
压缩、进行 Base-64 编码,并为 PowerShell 载荷脚本生成命令行输出。
#### `输出-压缩Dll`
压缩、进行 Base-64 编码,并输出用于在内存中加载托管 DLL 的生成代码。
#### `输出-加密脚本`
加密文本文件/脚本。
#### `删除-注释`
从脚本中删除注释和多余的空格。
## 持久化
**为 PowerShell 脚本添加持久化能力**
#### `新建-用户持久化选项`
为 `Add-Persistence` 函数配置用户级持久化选项。
#### `新建-提权持久化选项`
为 `Add-Persistence` 函数配置提权后的持久化选项。
#### `添加-持久化`
为脚本添加持久化能力。
#### `安装-SSP`
安装安全支持提供程序(SSP)DLL。
#### `获取-安全包`
枚举所有已加载的安全包(SSP)。
## 杀毒软件绕过
**在 PowerShell 面前,杀毒软件毫无机会!**
#### `查找-AV签名`
使用与 "class101" 的 DSplit 相同的方法定位单字节 AV 特征码。
## 数据渗漏
**你所有的数据都归我了!**
#### `调用-令牌操作`
列出可用的登录令牌。使用其他用户的登录令牌创建进程,并在当前线程中模拟登录令牌。
#### `调用-凭据注入`
使用明文凭据创建登录,且不触发可疑的事件 ID 4648(显式凭据登录)。
#### `调用-NinjaCopy`
通过读取原始卷并解析 NTFS 结构,从 NTFS 分区的卷中复制文件。
#### `调用-Mimikatz`
使用 PowerShell 将 Mimikatz 2.0 以反射方式加载到内存中。可用于转储凭据而不向磁盘写入任何内容。可用于 Mimikatz 提供的任何功能。
#### `获取-击键记录`
记录按下的键、时间和活动窗口。
#### `获取-GPP密码`
检索通过组策略首选项推送的账户的明文密码和其他信息。
#### `获取-GPP自动登录`
如果通过组策略首选项推送,则从 registry.xml 检索自动登录的用户名和密码。
#### `获取-定时截图`
一个按固定时间间隔截取屏幕截图并保存到文件夹的函数。
#### `新建-卷影副本`
创建新的卷影副本。
#### `获取-卷影副本`
列出所有本地卷影副本的设备路径。
#### `挂载-卷影副本`
挂载一个卷影副本。
#### `删除-卷影副本`
删除一个卷影副本。
#### `获取-保险库凭据`
显示 Windows 凭据保管库对象,包括明文 Web 凭据。
#### `输出-小型转储`
生成一个进程的完整内存小型转储。
#### `获取-麦克风音频`
录制来自系统麦克风的音频并保存到磁盘。
## 搞破坏
**用 PowerShell 制造混乱。**
#### `设置-主引导记录`
概念验证代码,用你选择的消息覆盖主引导记录。
#### `设置-关键进程`
在退出 PowerShell 时导致你的机器蓝屏。
## 提权
**用于帮助在目标上提升权限的工具。**
#### `PowerUp`
常见权限提升检查的集合,以及一些武器化向量。
## 信息收集
**用于协助渗透测试信息收集阶段的工具。**
#### `调用-端口扫描`
使用常规套接字执行简单的端口扫描,大致基于 nmap。
#### `获取-HTTP状态`
当提供字典文件时,返回指定路径的 HTTP 状态代码和完整 URL。
#### `调用-反向Dns查找`
扫描 IP 地址范围以获取 DNS PTR 记录。
#### `PowerView`
PowerView 是一系列执行网络和 Windows 域枚举与利用的函数。
## 信息收集\字典
**用于协助渗透测试信息收集阶段的字典集合。字典取自以下来源。**
* admin.txt -
* generic.txt -
* sharepoint.txt -
## 许可证
除非另有明确说明,否则 PowerSploit 项目及所有独立脚本均受 [BSD 3-Clause 许可证](https://raw.github.com/mattifestation/PowerSploit/master/LICENSE) 约束。
## 使用方法
请参考每个独立脚本中的注释式帮助以获取详细的使用信息。
要安装此模块,请将整个 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 有好的想法,我们很乐意添加它。新添加项需要满足以下要求:
* 脚本必须遵循风格指南。任何与指南的例外情况都需要一个明确、有效的理由。
* 模块清单需要更新以反映正在添加的新功能。
* 应在此 README.md 中添加该功能的简要描述。
* 所有新功能都必须有 Pester 测试。请参阅 Tests 文件夹中的示例,但我们希望测试至少通过测试预期/意外输入输出以及功能是否表现出所需功能来覆盖基本内容。请确保该功能在提交拉取请求之前通过所有测试(最好在多个操作系统中)。谢谢!
## 脚本风格指南
**致所有 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 文件以正确格式化该对象的输出。
标签:AI合规, DLL注入, DNS 反向解析, IPv6, Libemu, meg, PowerShell, PowerShell框架, shellcode注入, WMI利用, 二进制发布, 代码执行, 信息安全, 加密脚本, 压缩工具, 反射PE注入, 反病毒绕过, 后渗透框架, 命令编码, 多人体追踪, 开源工具, 持久化技术, 攻击框架, 数据渗出, 流量审计, 渗透工具, 端点可见性, 网络安全, 脚本修改, 隐私保护