1
mirror of https://github.com/rapid7/metasploit-payloads synced 2024-11-26 17:41:08 +01:00
metasploit-payloads/c/meterpreter/source/common/common_config.h
2022-04-26 23:49:04 +01:00

113 lines
3.5 KiB
C

/*!
* @file config.h
* @brief Declarations of functions and types that define endpoint and transport configurations.
*/
#ifndef _METERPRETER_COMMON_CONFIG_H
#define _METERPRETER_COMMON_CONFIG_H
/*! @brief This is the size of the certificate hash that is validated (sha1) */
#define CERT_HASH_SIZE 20
#define URL_SIZE 512
#define UA_SIZE 256
#define UUID_SIZE 16
#define PROXY_HOST_SIZE 128
#define PROXY_USER_SIZE 64
#define PROXY_PASS_SIZE 64
#define LOG_PATH_SIZE 260 // https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd
typedef wchar_t CHARTYPE;
typedef CHARTYPE* STRTYPE;
typedef CHARTYPE const * CSTRTYPE;
// Make sure we byte-align based on what we're given in the structure definitions
#pragma pack(push, 1)
typedef struct _MetsrvSession
{
union
{
UINT_PTR handle;
BYTE padding[8];
} comms_handle; ///! Socket/handle for communications (if there is one).
DWORD exit_func; ///! Exit func identifier for when the session ends.
int expiry; ///! The total number of seconds to wait before killing off the session.
BYTE uuid[UUID_SIZE]; ///! UUID
BYTE session_guid[sizeof(GUID)]; ///! Current session GUID
#ifdef DEBUGTRACE
CHARTYPE log_path[LOG_PATH_SIZE]; ///! Location to place the log file. Only set when msfconsole specifies MeterpreterDebugLogging
#endif
} MetsrvSession;
typedef struct _MetsrvTransportCommon
{
CHARTYPE url[URL_SIZE]; ///! Transport url: scheme://host:port/URI
int comms_timeout; ///! Number of sessions to wait for a new packet.
int retry_total; ///! Total seconds to retry comms for.
int retry_wait; ///! Seconds to wait between reconnects.
} MetsrvTransportCommon;
typedef struct _MetsrvTransportProxy
{
CHARTYPE hostname[PROXY_HOST_SIZE]; ///! Proxy hostname.
CHARTYPE username[PROXY_USER_SIZE]; ///! Proxy username.
CHARTYPE password[PROXY_PASS_SIZE]; ///! Proxy password.
} MetsrvTransportProxy;
typedef struct _MetsrvTransportHttp
{
MetsrvTransportCommon common;
MetsrvTransportProxy proxy;
CHARTYPE ua[256]; ///! User agent string.
BYTE ssl_cert_hash[CERT_HASH_SIZE]; ///! Expected SSL certificate hash.
CHARTYPE custom_headers[1]; ///! Custom headers to add to outbound requests (arb length, NULL terminated).
} MetsrvTransportHttp;
typedef struct _MetsrvTransportTcp
{
MetsrvTransportCommon common;
} MetsrvTransportTcp;
typedef struct _MetsrvTransportNamedPipe
{
MetsrvTransportCommon common;
} MetsrvTransportNamedPipe;
typedef struct _MetsrvExtension
{
DWORD size; ///! Size of the extension.
BYTE dll[1]; ///! Array of extension bytes (will be more than 1).
} MetsrvExtension;
typedef struct _MetsrvConfig
{
MetsrvSession session;
MetsrvTransportCommon transports[1]; ///! Placeholder for 0 or more transports
// Extensions will appear after this
// After extensions, we get a list of extension initialisers
// <name of extension>\x00<datasize><data>
// <name of extension>\x00<datasize><data>
// \x00
} MetsrvConfig;
// We force 64bit alignment for HANDLES and POINTERS in order
// to be cross compatible between x86 and x64 migration.
typedef struct _COMMONMIGRATECONTEXT
{
union
{
HANDLE hEvent;
BYTE bPadding1[8];
} e;
union
{
LPBYTE lpPayload;
BYTE bPadding2[8];
} p;
} COMMONMIGRATECONTEXT, * LPCOMMONMIGRATECONTEXT;
#pragma pack(pop)
#endif