1. 极安网首页
  2. 网络安全技术

内存加载Seatbelt的实现

0x00 前言

Seatbelt是一个C#项目,可以用来对主机进行安全检查,在进攻和防御的角度都能发挥作用。

通过一条命令,就能够获得当前主机的多项配置信息,方便实用。

为了能够扩展Seatbelt的使用场景,在不修改Seatbelt任何代码的前提下,本文将要介绍两种通过内存加载Seatbelt的方法(Assembly.Load和execute-assembly),分别补全向.NET程序集的Main函数传入参数的实现代码。

之前的文章《从内存加载.NET程序集(Assembly.Load)的利用分析》《从内存加载.NET程序集(execute-assembly)的利用分析》 只介绍了向指定类的方法传入参数的实现代码。

0x01 简介

本文将要将介绍以下内容:

· Seatbelt的编译和使用

· 使用Assembly.Load加载Seatbelt并传入参数的方法

· 使用execute-assembly加载Seatbelt并传入参数的方法

· Visual Studio2015在64位平台下使用汇编代码的方法

0x02 Seatbelt的编译和使用

1.编译

工程地址:

https://github.com/GhostPack/Seatbelt

支持.NET 3.5和4.0

需要使用Visual Studio2017或者更高的版本进行编译。

2.使用

需要传入参数指定具体的命令,例如运行所有检查并返回所有输出:

Seatbelt.exe -group=all -full

详细的命令可参考项目的说明:

https://github.com/GhostPack/Seatbelt#command-line-usage

0x03 使用Assembly.Load加载Seatbelt并传入参数的方法

实现语言:C#

实现思路:

将Seatbelt.exe作base64编码后保存到数组中,再使用Assembly.Load()作base解码后进行加载,最后向Main函数传入参数。

实现代码:

1.将Seatbelt.exe作base64编码并返回结果

c#实现代码:

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

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

可以使用Visual Studio或者直接使用csc.exe进行编译:

.Net 3.5下使用csc.exe编译的命令:

C:WindowsMicrosoft.NETFramework64v3.5csc.exe base64.cs

.Net 4.0下使用csc.exe编译的命令:

C:WindowsMicrosoft.NETFramework64v4.0.30319csc.exe base64.cs

编译成功后生成base64.exe,执行后获得对Seatbelt.exe作base64编码后的字符串。

本文转载:嘶吼,不代表 极安网 立场,转载请注明出处:https://secvery.com/458.html