.NET 一款内网横向移动利器: Sharp4Shell

admin 2024年7月5日13:55:08评论6 views字数 1575阅读5分15秒阅读模式

01 下载

https://github.com/dwmkerr/sharpshell

02 基本介绍

Sharp4Shell 是一个专为内网横向移动设计的强大工具,它整合了 SharpSploit 模块,以提供更多功能。该工具依赖于系统上安装的 .NET Framework >=3.5以上的环境,这是因为它需要依赖 Roslyn API来在内存中执行交叉编译,同时支持交互式Shell功能。

 

03使用方法

Sharp4Shell 支持交互式Shell,允许用户直接在内网环境中执行命令并实时获取输出,依靠后端强大的SharpSploit 可以实现后渗透各个阶段红队活动。比如可以调用Shell.ShellExecute 方法来执行各种命令,如下所示。

Shell.ShellExecute("whoami");
Shell.ShellExecute("tasklist")

.NET 一款内网横向移动利器: Sharp4Shell

此外,Sharp4Shell 利用 SharpSploit 的模块,可以收集目标系统的各种信息,如网络配置、开放端口、系统进程以及从内存中提取明文密码、哈希等,还可以通过 SMB、WMI 等方式在内网中横向移动。

04 编码实现

下面这段代码展示了Sharp4Shell 完整的编译流程:从配置文件中读取嵌入资源,通过动态编译生成程序集,然后加载该程序集并调用其中的 Execute 方法。具体实现的代码如下所示。

using (TextReader reader2 = File.OpenText(Common.SharpShellResourcesConfig))
{
    IDeserializer deserializer2 = new DeserializerBuilder().Build();
    request.EmbeddedResources = (from ER in deserializer2.Deserialize<List<Compiler.EmbeddedResource>>(reader2)
                                 where ER.Enabled
                                 select ER).ToList<Compiler.EmbeddedResource>();
}

这里使用 File.OpenText 方法打开Common.SharpShellResourcesConfig 文件,这里包含了编译时调用其他的动态链接库名。创建了一个反序列化器用于将 YAML 格式的配置文件反序列化为对象。使用 LINQ 查询,过滤出 Enabled 属性为 true 的嵌入资源。

byte[] assemblyBytes = Compiler.Compile(request);
Assembly assembly = Assembly.Load(assemblyBytes);
object result = assembly.GetType(ClassName).GetMethod("Execute").Invoke(null, null);
Console.WriteLine(result.ToString());

调用 Compiler.Compile 方法,将 request 对象编译为字节数组 assemblyBytes,表示编译后的程序集。使用 Assembly.Load 方法从字节数组中加载程序集 assembly并执行Execute 方法,并将结果存储在 result 对象中。

通过这种方式,Sharp4Shell 能够在内存中动态编译和执行代码,提供了高度的灵活性和隐蔽性,非常适合用于内网渗透测试和红队操作。工具已经打包在星球,感兴趣的朋友可以加入自取。

 

原文始发于微信公众号(安全洞察知识图谱):.NET 一款内网横向移动利器: Sharp4Shell

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月5日13:55:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   .NET 一款内网横向移动利器: Sharp4Shellhttps://cn-sec.com/archives/2922185.html

发表评论

匿名网友 填写信息