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注入, 反病毒绕过, 后渗透框架, 命令编码, 多人体追踪, 开源工具, 持久化技术, 攻击框架, 数据渗出, 流量审计, 渗透工具, 端点可见性, 网络安全, 脚本修改, 隐私保护