mirror of
https://github.com/rapid7/metasploit-payloads
synced 2025-04-24 10:09:49 +02:00

Decided to kick off a new extended API extension with mubix and kernelsmith to include some more advanced enumeration stuff. The goal of this extension is to take stuff that wouldn't be part of the std api but is rather useful for enumeration of a target once meterpreter has been established. This commit kicks things off with enumeration of top level windows on the current desktop.
60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
/*!
|
|
* @file extapi.h
|
|
* @brief Entry point and intialisation definitions for the extended API extension.
|
|
*/
|
|
#include "../../common/common.h"
|
|
|
|
#include "../../ReflectiveDLLInjection/DelayLoadMetSrv.h"
|
|
// include the Reflectiveloader() function, we end up linking back to the metsrv.dll's Init function
|
|
// but this doesnt matter as we wont ever call DLL_METASPLOIT_ATTACH as that is only used by the
|
|
// second stage reflective dll inject payload and not the metsrv itself when it loads extensions.
|
|
#include "../../ReflectiveDLLInjection/ReflectiveLoader.c"
|
|
|
|
#include "window.h"
|
|
|
|
// this sets the delay load hook function, see DelayLoadMetSrv.h
|
|
EnableDelayLoadMetSrv();
|
|
|
|
Command customCommands[] =
|
|
{
|
|
// Window management and enumeration
|
|
{ "extapi_window_enum",
|
|
{ request_window_enum, { 0 }, 0 },
|
|
{ EMPTY_DISPATCH_HANDLER }
|
|
},
|
|
// Terminator
|
|
{ NULL,
|
|
{ EMPTY_DISPATCH_HANDLER },
|
|
{ EMPTY_DISPATCH_HANDLER },
|
|
},
|
|
};
|
|
|
|
/*!
|
|
* @brief Initialize the server extension
|
|
*/
|
|
DWORD __declspec(dllexport) InitServerExtension(Remote *remote)
|
|
{
|
|
DWORD index;
|
|
|
|
hMetSrv = remote->hMetSrv;
|
|
|
|
for (index = 0; customCommands[index].method; index++)
|
|
command_register(&customCommands[index]);
|
|
|
|
return ERROR_SUCCESS;
|
|
}
|
|
|
|
/*!
|
|
* @brief Deinitialize the server extension
|
|
*/
|
|
DWORD __declspec(dllexport) DeinitServerExtension(Remote *remote)
|
|
{
|
|
DWORD index;
|
|
|
|
for (index = 0; customCommands[index].method; index++)
|
|
command_deregister(&customCommands[index]);
|
|
|
|
return ERROR_SUCCESS;
|
|
}
|
|
|