在红队攻防中,shellcode 的加载一直是一个绕不开的话题。无论是为了免杀,还是为了规避监控,攻击者总需要找到合适的方式将 payload 执行在目标环境中。传统的思路往往依赖于 Windows API 调用,例如 VirtualAlloc、VirtualProtect 等函数,结合 P/Invoke 的桥接技术即可轻松在 .NET 程序中完成。但这种方式的问题在于,行为模式过于显眼:调用敏感 API、修改内存页属性、创建线程,这些操作天然会触发安全产品的检测与拦截。
此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。
本文内容部分节选自小报童《.NET 劫持 JIT 内存编译执行ShellCode》,完整的文章内容请加入小报童后订阅查看。现在限时只需69元,永久买断!目前已有300+位朋友抢先预定。
免责声明:此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。任何未经授权的网络渗透、入侵或对他人网络破坏的活动而造成的直接或间接后果和损失,均由使用者为自身的行为负责并承担全部的法律和连带责任,与本号及作者无关,请务必遵循相关法律法规。本文所提供的工具仅用于学习和本地安全研究和测试,禁止用于其他方面。
在 .NET 中,反射是开发者用来获取和操作类型信息的重要手段。通过 System.Reflection 命名空间,我们可以动态获取类、方法、属性、字段等元数据。
2.1 JIT编译
在 .NET 中,所有托管代码最初都是 IL中间语言。IL 并不能直接运行,CLR 在方法第一次调用时会触发 JIT 编译,将 IL 转换为本地机器码。这种按需编译的特性能节省启动开销,但也意味着:在方法第一次被调用之前,可能还没有机器码。
RuntimeMethodHandle handle = method.MethodHandle;
2.2 函数指针
当方法完成 JIT 编译后,CLR 会在进程的代码段中分配一块内存,并写入该方法的机器码。此时调用:
handle.GetFunctionPointer();
就会返回一个 IntPtr,指向方法的机器码入口地址。这个指针等价于一个本地函数地址,可以被直接调用,可以被覆盖或修改。
2.3 实战解析
在实际使用中,我们使用上述知识点打造一款shellcode加载器工具,工具的参数只需要准备一段目标 shellcode,比如弹出计算器,然后用 Base64 编码作为参数传入,此时 addr 就是方法入口的真实地址,随后,使用 unsafe 代码块,直接操作内存,将 shellcode 写入 addr 所指向的区域。换句话说,原本属于 Dummy 方法的机器码被替换掉了,具体代码如下所示。
byte* ptr = (byte*)addr.ToPointer();for (int i = 0; i < Program.shellcode.Length; i++){ ptr[i] = Program.shellcode[i];}
再次调用 Dummy 方法时,虽然表面上调用的是 Console.WriteLine,但实际上执行的却是替换后的 shellcode,最终结果是:在目标机器上弹出一个本地的计算器进程,如下图所示。
综上,从红队视角来看,GetMethodAddress 提供了一条与传统 API 调用完全不同的路径来执行 shellcode。想要了解完整或者更多的内网安全防御绕过方向的文章,可以移步订阅小报童《.NET 内网实战攻防》电子报刊。
以上相关的知识点已收录于新书《.NET安全攻防指南》,全书共计25章,总计1010页,分为上下册,横跨.NET Web代码审计与红队渗透两大领域。
上册深入剖析.NET Web安全审计的核心技术,帮助读者掌握漏洞发现与修复的精髓;下册则聚焦于.NET逆向工程与攻防对抗的实战技巧,揭秘最新的对抗策略与技术方法。
本次电子报刊《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。
1) .NET 安全防御绕过2) .NET 本地权限提升3) .NET 内网信息收集4) .NET 内网代理通道5) .NET 内网横向移动6) .NET 目标权限维持7) .NET 数据传输外发8) .NET 目标痕迹清理
原价899,现在限时只需69元,永久买断!目前已有300+位朋友抢先预定,我们会长期更新,初步计划保持每周更新1-2篇新内容,对.NET内网安全的朋友们请尽快订阅该报刊!
每增加五十人涨价10元,抓紧订阅,超值!订阅后请关注公众号:dotNet安全矩阵,发送订单截图和您的微信号,邀请您加入专属交流群。感兴趣的朋友,可以点击链接:https://xiaobot.net/p/dotNetAttack,或者扫描下方海报微信二维码加入即可,订阅后小报童定时会将最新内容通过微信推送给您。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...