Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Stracciatella — 从 C# 内部启动的 OpSec 安全 Powershell runspace(又名 SharpPick),在启动时禁用 AMSI、约束语言模式和脚本块日志记录 | Kitploit
工具/GitHubGitHub/mgeeky/stracciatella
权限提升漏洞利用框架IDS/IPS规避横向移动脚本与自动化后渗透利用渗透测试命令与控制红队Payload 开发
GitHubmgeeky/stracciatella

Stracciatella

54362914年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

从 C# 内部启动的 OpSec 安全 Powershell runspace(又名 SharpPick),在启动时禁用 AMSI、约束语言模式和脚本块日志记录

查看仓库

Stracciatella v0.7

从C#内部运行的PowerShell runspace(又名SharpPick技术),已禁用AMSI、ETW和脚本块日志记录,为您提供便利。

如今,当PowerShell通过使用如下技术遭到严重检测时:

  • AMSI
  • ETW
  • 脚本块日志记录
  • 转录文件
  • 模块日志记录
  • 约束语言模式

高级攻击者必须找到绕过这些措施的方法,以便提供复杂的对抗性模拟演练。为了协助这些努力,创建了以下项目。

此程序构建在针对特定技术的绕过方法之上,这些方法包含在:

  • Disable-Amsi.ps1
  • KillETW.ps1 by tandasat
  • Disable-ScriptLogging.ps1

而这些又基于以下研究:

  • Matt Graeber:https://github.com/mattifestation/PSReflect
  • Matt Graeber:https://twitter.com/mattifestation/status/735261120487772160
  • Avi Gimpel:https://www.cyberark.com/threat-research-blog/amsi-bypass-redux/
  • Adam Chester:https://www.mdsec.co.uk/2018/06/exploring-powershell-amsi-and-logging-evasion/
  • Ryan Cobb:https://cobbr.io/ScriptBlock-Logging-Bypass.html
  • Ryan Cobb:https://cobbr.io/ScriptBlock-Warning-Event-Logging-Bypass.html

SharpPick 的想法,即通过使用 Runspaces 从 C# 程序集内部启动 PowerShell 脚本,也并非新鲜事物,首次由 Lee Christensen(@tifkin_)在其作品中实现:

  • UnmanagedPowerShell

此外,源代码借用了 Lee 的 CustomPSHost 实现。

此项目继承了上述研究和伟大的安全社区,以提供一个接近于有效的 PowerShell 环境,在启动时禁用防御措施。

现在可以轻松编译为 .NET 4.0,而如果使用 .NET Framework 4.7.1+ 编译,则会包含附加功能,允许卸载构成 CLM 绕过工件的 DLL,并尝试在之后删除它们(说实话效果有限)。

使用 .NET 4.0 编译的 Stracciatella 效果最佳。

OpSec

  • 此程序提供即时解码传递参数的功能,使用单字节 XOR 解码
  • 在启动任何命令之前,确保使用两种方法禁用 AMSI 和 ETW
  • 在启动任何命令之前,确保使用两种方法禁用脚本块日志记录
  • 此程序不修补任何系统库、系统本机代码(例如 amsi.dll)
  • 已尽力不长时间存储解码后的脚本/命令,以保护自身免受 EDR 和 AV 所采用的内存转储技术的影响

用法

有几种选项可用:

PS D:\> Stracciatella -h

  :: Stracciatella - 禁用 AMSI、ETW 和脚本块日志记录的 PowerShell runspace。
  Mariusz Banach / mgeeky, '19-22 <[email protected]>
  v0.7

用法:stracciatella.exe [选项] [命令]
  -s <路径>, --script <路径> - 包含要执行的 PowerShell 脚本的文件路径。如果未给出选项,将进入
                               伪 shell 循环。也可以是 HTTP(S) URL,用于下载并执行 PowerShell 脚本。
  -v, --verbose              - 打印详细信息
  -n, --nocleanup            - 不删除 CLM 禁用残留物(TEMP 中的 DLL 文件和 COM 注册表项)。
                               默认情况下将始终删除这些。
  -C, --leaveclm             - 不尝试禁用 CLM。更隐蔽。将避免留下未删除的 CLM 禁用工件。
  -f, --force                - 即使 PowerShell 防御未禁用,也继续执行。
                               默认情况下,失败时退出。
  -c, --command              - 执行指定的命令。您可以使用 -c 或在 stracciatella 参数后附加命令:cmd> straciatella ipconfig /all
                               如果同时给出了命令和脚本参数,则在运行脚本后执行命令。
  -x <密钥>, --xor <密钥>      - 将输入视为 XOR 编码,其中 <密钥> 是十进制的一个字节密钥
                               (十六进制前加 0x)
  -p <名称>, --pipe <名称>   - 从指定的命名管道读取 PowerShell 命令。命令前必须加上 4 个字节的
                               长度,以小端序编码(长度-值表示法)。
  -t <毫秒>, --timeout <毫秒>
                             - 指定管道读取操作的超时时间(毫秒)。默认值:60 秒。0 - 无限。
  -e, --cmdalsoencoded       - 也将输入命令(通过 '--command' 指定)视为已编码。
                               在解码并运行输入脚本文件后,解码输入命令。
                               默认情况下,我们只解码输入文件,并将命令视为明文。

该程序接受命令和脚本文件路径作为输入。两者都是可选的,如果都没有给出,将启动伪 shell。 命令和脚本都可以进一步使用单字节 XOR 编码(将输出 Base64 编码),以获得更好的 OpSec 体验。

以下是几个用例示例:

  1. 伪 shell - 当未给出命令和脚本路径选项时启动:
PS D:\> Stracciatella.exe -v

  :: Stracciatella - 禁用 AMSI、ETW 和脚本块日志记录的 PowerShell runspace。
  Mariusz Banach / mgeeky, '19-22 <[email protected]>
  v0.7

[.] PowerShell 版本:5.1
[.] 语言模式:FullLanguage
[+] 无需禁用约束语言模式。已处于 FullLanguage。
[+] 脚本块日志记录已禁用。
[+] AMSI 已禁用。
[+] ETW 已禁用。

Stracciatella D:\> $PSVersionTable

名称                          值
----                           -----
PSVersion                      5.1.18362.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.18362.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
  1. XOR 编码(密钥 = 0x31)的命令和脚本文件路径

首先,为了准备编码后的语句,我们可以使用附带的 encoder.py 脚本,其用法如下:

PS D:\> python encoder.py -h
usage: encoder.py [options] <command|file>

positional arguments:
  command               指定用于编码的命令或脚本文件路径

optional arguments:
  -h, --help            显示此帮助信息并退出
  -x KEY, --xor KEY     指定命令/文件的 XOR 编码密钥(一个字节)
  -o PATH, --output PATH
                        (可选)输出文件。如果未给出,则将输出回显到 stdout

PS D:\> python encoder.py -x 0x31 "Write-Host \"It works like a charm!\" ; $ExecutionContext.SessionState.LanguageMode"
ZkNYRVQceV5CRRETeEURRl5DWkIRXVhaVBFQEVJZUENcEBMRChEVdElUUkRFWF5fcl5fRVRJRR9iVEJCWF5fYkVQRVQffVBfVkRQVlR8XlVU

然后将 encoder.py 的输出作为 Stracciatella 的编码命令输入:

PS D:\> Stracciatella.exe -v -x 0x31 -c "ZkNYRVQceV5CRRETeEURRl5DWkIRXVhaVBFQEVJZUENcEBMRChEVdElUUkRFWF5fcl5fRVRJRR9iVEJCWF5fYkVQRVQffVBfVkRQVlR8XlVU" .\Test2.ps1

  :: Stracciatella - 禁用 AMSI、ETW 和脚本块日志记录的 PowerShell runspace。
  Mariusz Banach / mgeeky, '19-22 <[email protected]>
  v0.7

[.] 将加载脚本文件:'.\Test2.ps1'
[+] AMSI 已禁用。
[+] ETW 已禁用。
[+] 脚本块日志记录已禁用。
[.] 语言模式:FullLanguage

PS> & '.\Test2.ps1'
PS> Write-Host "It works like a charm!" ; $ExecutionContext.SessionState.LanguageMode
[+] Yeeey, it really worked.
It works like a charm!
FullLanguage

其中:

  • Command 由以下命令构成:Base64Encode(XorEncode("Write-Host \"It works like a charm!\" ; $ExecutionContext.SessionState.LanguageMode", 0x31))
  • Test2.ps1 - 包含:"ZkNYRVQceV5CRRETahpsEWhUVFRIHRFYRRFDVFBdXUgRRl5DWlRVHxM=" (Base64(XorEncode("Write-Host \"[+] Yeeey, it really worked.\"", 0x31)))

Cobalt Strike 支持

Stracciatella 附带一个 Aggressor 脚本,加载后会在 Beacon 控制台中暴露 stracciatella 命令。用法与 powerpick 非常相似(通过 stracciatella-import 预先导入 PowerShell 脚本)。输入参数将使用随机密钥进行 XOR 处理,并通过随机命名的管道传递到 Stracciatella 的 runspace。

以下 Cobalt Strike 命令可用:

下载工具