librex 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (435) hide show
  1. data/README.markdown +1 -1
  2. metadata +3 -436
  3. data/lib/rex/LICENSE +0 -29
  4. data/lib/rex/arch.rb +0 -103
  5. data/lib/rex/arch/sparc.rb +0 -75
  6. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  7. data/lib/rex/arch/x86.rb +0 -513
  8. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  9. data/lib/rex/assembly/nasm.rb +0 -104
  10. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  11. data/lib/rex/codepage.map +0 -104
  12. data/lib/rex/compat.rb +0 -311
  13. data/lib/rex/constants.rb +0 -113
  14. data/lib/rex/elfparsey.rb +0 -11
  15. data/lib/rex/elfparsey/elf.rb +0 -123
  16. data/lib/rex/elfparsey/elfbase.rb +0 -258
  17. data/lib/rex/elfparsey/exceptions.rb +0 -27
  18. data/lib/rex/elfscan.rb +0 -12
  19. data/lib/rex/elfscan/scanner.rb +0 -207
  20. data/lib/rex/elfscan/search.rb +0 -46
  21. data/lib/rex/encoder/alpha2.rb +0 -31
  22. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  23. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  24. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  25. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  26. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  27. data/lib/rex/encoder/ndr.rb +0 -89
  28. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  29. data/lib/rex/encoder/nonalpha.rb +0 -61
  30. data/lib/rex/encoder/nonupper.rb +0 -64
  31. data/lib/rex/encoder/xdr.rb +0 -106
  32. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  33. data/lib/rex/encoder/xor.rb +0 -69
  34. data/lib/rex/encoder/xor/dword.rb +0 -13
  35. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  36. data/lib/rex/encoders/xor_dword.rb +0 -35
  37. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  38. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  39. data/lib/rex/encoding/xor.rb +0 -20
  40. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  41. data/lib/rex/encoding/xor/byte.rb +0 -15
  42. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  43. data/lib/rex/encoding/xor/dword.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  45. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  46. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  47. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  48. data/lib/rex/encoding/xor/generic.rb +0 -146
  49. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  50. data/lib/rex/encoding/xor/qword.rb +0 -15
  51. data/lib/rex/encoding/xor/word.rb +0 -21
  52. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  53. data/lib/rex/exceptions.rb +0 -275
  54. data/lib/rex/exceptions.rb.ut.rb +0 -44
  55. data/lib/rex/exploitation/cmdstager.rb +0 -9
  56. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  57. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  58. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  59. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  60. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  61. data/lib/rex/exploitation/egghunter.rb +0 -277
  62. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  63. data/lib/rex/exploitation/encryptjs.rb +0 -77
  64. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  65. data/lib/rex/exploitation/heaplib.rb +0 -94
  66. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  67. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  68. data/lib/rex/exploitation/omelet.rb +0 -320
  69. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  70. data/lib/rex/exploitation/opcodedb.rb +0 -818
  71. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  72. data/lib/rex/exploitation/seh.rb +0 -92
  73. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  74. data/lib/rex/file.rb +0 -112
  75. data/lib/rex/file.rb.ut.rb +0 -16
  76. data/lib/rex/image_source.rb +0 -12
  77. data/lib/rex/image_source/disk.rb +0 -60
  78. data/lib/rex/image_source/image_source.rb +0 -46
  79. data/lib/rex/image_source/memory.rb +0 -37
  80. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  81. data/lib/rex/io/datagram_abstraction.rb +0 -35
  82. data/lib/rex/io/ring_buffer.rb +0 -364
  83. data/lib/rex/io/stream.rb +0 -319
  84. data/lib/rex/io/stream_abstraction.rb +0 -197
  85. data/lib/rex/io/stream_server.rb +0 -211
  86. data/lib/rex/job_container.rb +0 -187
  87. data/lib/rex/logging.rb +0 -4
  88. data/lib/rex/logging/log_dispatcher.rb +0 -179
  89. data/lib/rex/logging/log_sink.rb +0 -42
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -55
  91. data/lib/rex/logging/sinks/stderr.rb +0 -43
  92. data/lib/rex/machparsey.rb +0 -9
  93. data/lib/rex/machparsey/exceptions.rb +0 -34
  94. data/lib/rex/machparsey/mach.rb +0 -209
  95. data/lib/rex/machparsey/machbase.rb +0 -408
  96. data/lib/rex/machscan.rb +0 -9
  97. data/lib/rex/machscan/scanner.rb +0 -217
  98. data/lib/rex/mime.rb +0 -9
  99. data/lib/rex/mime/header.rb +0 -77
  100. data/lib/rex/mime/message.rb +0 -144
  101. data/lib/rex/mime/part.rb +0 -20
  102. data/lib/rex/nop/opty2.rb +0 -108
  103. data/lib/rex/nop/opty2.rb.ut.rb +0 -23
  104. data/lib/rex/nop/opty2_tables.rb +0 -300
  105. data/lib/rex/ole.rb +0 -205
  106. data/lib/rex/ole/clsid.rb +0 -47
  107. data/lib/rex/ole/difat.rb +0 -141
  108. data/lib/rex/ole/directory.rb +0 -231
  109. data/lib/rex/ole/direntry.rb +0 -240
  110. data/lib/rex/ole/docs/dependencies.txt +0 -8
  111. data/lib/rex/ole/docs/references.txt +0 -1
  112. data/lib/rex/ole/fat.rb +0 -99
  113. data/lib/rex/ole/header.rb +0 -204
  114. data/lib/rex/ole/minifat.rb +0 -77
  115. data/lib/rex/ole/propset.rb +0 -144
  116. data/lib/rex/ole/samples/create_ole.rb +0 -27
  117. data/lib/rex/ole/samples/dir.rb +0 -35
  118. data/lib/rex/ole/samples/dump_stream.rb +0 -34
  119. data/lib/rex/ole/samples/ole_info.rb +0 -23
  120. data/lib/rex/ole/storage.rb +0 -395
  121. data/lib/rex/ole/stream.rb +0 -53
  122. data/lib/rex/ole/substorage.rb +0 -49
  123. data/lib/rex/ole/util.rb +0 -157
  124. data/lib/rex/parser/arguments.rb +0 -97
  125. data/lib/rex/parser/arguments.rb.ut.rb +0 -67
  126. data/lib/rex/parser/ini.rb +0 -185
  127. data/lib/rex/parser/ini.rb.ut.rb +0 -29
  128. data/lib/rex/parser/ip360_aspl_xml.rb +0 -102
  129. data/lib/rex/parser/ip360_xml.rb +0 -97
  130. data/lib/rex/parser/nessus_xml.rb +0 -118
  131. data/lib/rex/parser/netsparker_xml.rb +0 -94
  132. data/lib/rex/parser/nexpose_xml.rb +0 -136
  133. data/lib/rex/parser/nmap_xml.rb +0 -137
  134. data/lib/rex/parser/retina_xml.rb +0 -109
  135. data/lib/rex/payloads.rb +0 -1
  136. data/lib/rex/payloads/win32.rb +0 -2
  137. data/lib/rex/payloads/win32/common.rb +0 -26
  138. data/lib/rex/payloads/win32/kernel.rb +0 -53
  139. data/lib/rex/payloads/win32/kernel/common.rb +0 -54
  140. data/lib/rex/payloads/win32/kernel/migration.rb +0 -12
  141. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -50
  142. data/lib/rex/payloads/win32/kernel/stager.rb +0 -194
  143. data/lib/rex/peparsey.rb +0 -12
  144. data/lib/rex/peparsey/exceptions.rb +0 -32
  145. data/lib/rex/peparsey/pe.rb +0 -212
  146. data/lib/rex/peparsey/pe_memdump.rb +0 -63
  147. data/lib/rex/peparsey/pebase.rb +0 -1680
  148. data/lib/rex/peparsey/section.rb +0 -136
  149. data/lib/rex/pescan.rb +0 -13
  150. data/lib/rex/pescan/analyze.rb +0 -309
  151. data/lib/rex/pescan/scanner.rb +0 -206
  152. data/lib/rex/pescan/search.rb +0 -56
  153. data/lib/rex/platforms.rb +0 -1
  154. data/lib/rex/platforms/windows.rb +0 -51
  155. data/lib/rex/poly.rb +0 -132
  156. data/lib/rex/poly/block.rb +0 -477
  157. data/lib/rex/poly/register.rb +0 -100
  158. data/lib/rex/poly/register/x86.rb +0 -40
  159. data/lib/rex/post.rb +0 -8
  160. data/lib/rex/post/dir.rb +0 -51
  161. data/lib/rex/post/file.rb +0 -172
  162. data/lib/rex/post/file_stat.rb +0 -220
  163. data/lib/rex/post/gen.pl +0 -13
  164. data/lib/rex/post/io.rb +0 -182
  165. data/lib/rex/post/meterpreter.rb +0 -4
  166. data/lib/rex/post/meterpreter/channel.rb +0 -445
  167. data/lib/rex/post/meterpreter/channel_container.rb +0 -54
  168. data/lib/rex/post/meterpreter/channels/pool.rb +0 -160
  169. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -62
  170. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -103
  171. data/lib/rex/post/meterpreter/channels/stream.rb +0 -87
  172. data/lib/rex/post/meterpreter/client.rb +0 -364
  173. data/lib/rex/post/meterpreter/client_core.rb +0 -274
  174. data/lib/rex/post/meterpreter/dependencies.rb +0 -3
  175. data/lib/rex/post/meterpreter/extension.rb +0 -32
  176. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -58
  177. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -16
  178. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -94
  179. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -21
  180. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +0 -57
  181. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +0 -15
  182. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -118
  183. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -61
  184. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -111
  185. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -28
  186. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -101
  187. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -26
  188. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -333
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -282
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -266
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -103
  192. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -48
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -144
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -73
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -56
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +0 -137
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +0 -180
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -167
  199. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +0 -208
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -6
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +0 -38106
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -31
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +0 -47
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -36
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +0 -1818
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +0 -96
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +0 -3848
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +0 -26
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +0 -153
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +0 -21
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +0 -3169
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +0 -599
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +0 -318
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +0 -100
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -42
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +0 -148
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -127
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +0 -309
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +0 -204
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +0 -51
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +0 -630
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +0 -75
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -103
  224. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -149
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -97
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -192
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -41
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -61
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -370
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -129
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -55
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -336
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -141
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -279
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -193
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -102
  237. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -180
  238. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -211
  239. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -227
  240. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +0 -63
  241. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -30
  242. data/lib/rex/post/meterpreter/object_aliases.rb +0 -83
  243. data/lib/rex/post/meterpreter/packet.rb +0 -688
  244. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -431
  245. data/lib/rex/post/meterpreter/packet_parser.rb +0 -94
  246. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -83
  247. data/lib/rex/post/meterpreter/ui/console.rb +0 -137
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -62
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -730
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -108
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -241
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +0 -231
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -61
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -98
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -51
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -132
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -187
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -65
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -442
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -298
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -486
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -315
  263. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +0 -157
  264. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -95
  265. data/lib/rex/post/permission.rb +0 -26
  266. data/lib/rex/post/process.rb +0 -57
  267. data/lib/rex/post/thread.rb +0 -57
  268. data/lib/rex/post/ui.rb +0 -52
  269. data/lib/rex/proto.rb +0 -13
  270. data/lib/rex/proto.rb.ts.rb +0 -8
  271. data/lib/rex/proto/dcerpc.rb +0 -6
  272. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -9
  273. data/lib/rex/proto/dcerpc/client.rb +0 -361
  274. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -491
  275. data/lib/rex/proto/dcerpc/exceptions.rb +0 -150
  276. data/lib/rex/proto/dcerpc/handle.rb +0 -47
  277. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -85
  278. data/lib/rex/proto/dcerpc/ndr.rb +0 -72
  279. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -41
  280. data/lib/rex/proto/dcerpc/packet.rb +0 -253
  281. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -56
  282. data/lib/rex/proto/dcerpc/response.rb +0 -187
  283. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -15
  284. data/lib/rex/proto/dcerpc/uuid.rb +0 -84
  285. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -46
  286. data/lib/rex/proto/dhcp.rb +0 -7
  287. data/lib/rex/proto/dhcp/constants.rb +0 -33
  288. data/lib/rex/proto/dhcp/server.rb +0 -292
  289. data/lib/rex/proto/drda.rb +0 -5
  290. data/lib/rex/proto/drda.rb.ts.rb +0 -17
  291. data/lib/rex/proto/drda/constants.rb +0 -49
  292. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -23
  293. data/lib/rex/proto/drda/packet.rb +0 -252
  294. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -109
  295. data/lib/rex/proto/drda/utils.rb +0 -123
  296. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -84
  297. data/lib/rex/proto/http.rb +0 -5
  298. data/lib/rex/proto/http.rb.ts.rb +0 -12
  299. data/lib/rex/proto/http/client.rb +0 -821
  300. data/lib/rex/proto/http/client.rb.ut.rb +0 -95
  301. data/lib/rex/proto/http/handler.rb +0 -46
  302. data/lib/rex/proto/http/handler/erb.rb +0 -128
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -21
  304. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  305. data/lib/rex/proto/http/handler/proc.rb +0 -60
  306. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -24
  307. data/lib/rex/proto/http/header.rb +0 -161
  308. data/lib/rex/proto/http/header.rb.ut.rb +0 -46
  309. data/lib/rex/proto/http/packet.rb +0 -407
  310. data/lib/rex/proto/http/packet.rb.ut.rb +0 -165
  311. data/lib/rex/proto/http/request.rb +0 -356
  312. data/lib/rex/proto/http/request.rb.ut.rb +0 -214
  313. data/lib/rex/proto/http/response.rb +0 -90
  314. data/lib/rex/proto/http/response.rb.ut.rb +0 -149
  315. data/lib/rex/proto/http/server.rb +0 -369
  316. data/lib/rex/proto/http/server.rb.ut.rb +0 -79
  317. data/lib/rex/proto/ntlm.rb +0 -7
  318. data/lib/rex/proto/ntlm.rb.ut.rb +0 -177
  319. data/lib/rex/proto/ntlm/base.rb +0 -326
  320. data/lib/rex/proto/ntlm/constants.rb +0 -74
  321. data/lib/rex/proto/ntlm/crypt.rb +0 -415
  322. data/lib/rex/proto/ntlm/exceptions.rb +0 -16
  323. data/lib/rex/proto/ntlm/message.rb +0 -536
  324. data/lib/rex/proto/ntlm/utils.rb +0 -764
  325. data/lib/rex/proto/proxy/socks4a.rb +0 -440
  326. data/lib/rex/proto/rfb.rb +0 -19
  327. data/lib/rex/proto/rfb.rb.ut.rb +0 -37
  328. data/lib/rex/proto/rfb/cipher.rb +0 -84
  329. data/lib/rex/proto/rfb/client.rb +0 -207
  330. data/lib/rex/proto/rfb/constants.rb +0 -52
  331. data/lib/rex/proto/smb.rb +0 -7
  332. data/lib/rex/proto/smb.rb.ts.rb +0 -8
  333. data/lib/rex/proto/smb/client.rb +0 -1952
  334. data/lib/rex/proto/smb/client.rb.ut.rb +0 -223
  335. data/lib/rex/proto/smb/constants.rb +0 -1047
  336. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -18
  337. data/lib/rex/proto/smb/crypt.rb +0 -36
  338. data/lib/rex/proto/smb/evasions.rb +0 -66
  339. data/lib/rex/proto/smb/exceptions.rb +0 -858
  340. data/lib/rex/proto/smb/simpleclient.rb +0 -306
  341. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -128
  342. data/lib/rex/proto/smb/utils.rb +0 -103
  343. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -20
  344. data/lib/rex/proto/sunrpc.rb +0 -1
  345. data/lib/rex/proto/sunrpc/client.rb +0 -195
  346. data/lib/rex/proto/tftp.rb +0 -12
  347. data/lib/rex/proto/tftp/constants.rb +0 -39
  348. data/lib/rex/proto/tftp/server.rb +0 -497
  349. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -28
  350. data/lib/rex/script.rb +0 -42
  351. data/lib/rex/script/base.rb +0 -59
  352. data/lib/rex/script/meterpreter.rb +0 -15
  353. data/lib/rex/script/shell.rb +0 -9
  354. data/lib/rex/service.rb +0 -48
  355. data/lib/rex/service_manager.rb +0 -141
  356. data/lib/rex/service_manager.rb.ut.rb +0 -32
  357. data/lib/rex/services/local_relay.rb +0 -423
  358. data/lib/rex/socket.rb +0 -684
  359. data/lib/rex/socket.rb.ut.rb +0 -107
  360. data/lib/rex/socket/comm.rb +0 -119
  361. data/lib/rex/socket/comm/local.rb +0 -412
  362. data/lib/rex/socket/comm/local.rb.ut.rb +0 -75
  363. data/lib/rex/socket/ip.rb +0 -130
  364. data/lib/rex/socket/parameters.rb +0 -345
  365. data/lib/rex/socket/parameters.rb.ut.rb +0 -51
  366. data/lib/rex/socket/range_walker.rb +0 -346
  367. data/lib/rex/socket/range_walker.rb.ut.rb +0 -55
  368. data/lib/rex/socket/ssl_tcp.rb +0 -184
  369. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -39
  370. data/lib/rex/socket/ssl_tcp_server.rb +0 -122
  371. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -61
  372. data/lib/rex/socket/subnet_walker.rb +0 -75
  373. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -28
  374. data/lib/rex/socket/switch_board.rb +0 -278
  375. data/lib/rex/socket/switch_board.rb.ut.rb +0 -52
  376. data/lib/rex/socket/tcp.rb +0 -76
  377. data/lib/rex/socket/tcp.rb.ut.rb +0 -64
  378. data/lib/rex/socket/tcp_server.rb +0 -66
  379. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -44
  380. data/lib/rex/socket/udp.rb +0 -164
  381. data/lib/rex/socket/udp.rb.ut.rb +0 -44
  382. data/lib/rex/struct2.rb +0 -5
  383. data/lib/rex/struct2/c_struct.rb +0 -181
  384. data/lib/rex/struct2/c_struct_template.rb +0 -39
  385. data/lib/rex/struct2/constant.rb +0 -26
  386. data/lib/rex/struct2/element.rb +0 -44
  387. data/lib/rex/struct2/generic.rb +0 -73
  388. data/lib/rex/struct2/restraint.rb +0 -54
  389. data/lib/rex/struct2/s_string.rb +0 -72
  390. data/lib/rex/struct2/s_struct.rb +0 -111
  391. data/lib/rex/sync.rb +0 -6
  392. data/lib/rex/sync/event.rb +0 -94
  393. data/lib/rex/sync/read_write_lock.rb +0 -176
  394. data/lib/rex/sync/ref.rb +0 -57
  395. data/lib/rex/sync/thread_safe.rb +0 -82
  396. data/lib/rex/test.rb +0 -35
  397. data/lib/rex/text.rb +0 -1163
  398. data/lib/rex/text.rb.ut.rb +0 -190
  399. data/lib/rex/thread_factory.rb +0 -42
  400. data/lib/rex/time.rb +0 -65
  401. data/lib/rex/transformer.rb +0 -115
  402. data/lib/rex/transformer.rb.ut.rb +0 -38
  403. data/lib/rex/ui.rb +0 -21
  404. data/lib/rex/ui/interactive.rb +0 -298
  405. data/lib/rex/ui/output.rb +0 -78
  406. data/lib/rex/ui/output/none.rb +0 -18
  407. data/lib/rex/ui/progress_tracker.rb +0 -96
  408. data/lib/rex/ui/subscriber.rb +0 -149
  409. data/lib/rex/ui/text/color.rb +0 -97
  410. data/lib/rex/ui/text/color.rb.ut.rb +0 -18
  411. data/lib/rex/ui/text/dispatcher_shell.rb +0 -467
  412. data/lib/rex/ui/text/input.rb +0 -117
  413. data/lib/rex/ui/text/input/buffer.rb +0 -75
  414. data/lib/rex/ui/text/input/readline.rb +0 -129
  415. data/lib/rex/ui/text/input/socket.rb +0 -95
  416. data/lib/rex/ui/text/input/stdio.rb +0 -45
  417. data/lib/rex/ui/text/irb_shell.rb +0 -57
  418. data/lib/rex/ui/text/output.rb +0 -80
  419. data/lib/rex/ui/text/output/buffer.rb +0 -61
  420. data/lib/rex/ui/text/output/file.rb +0 -43
  421. data/lib/rex/ui/text/output/socket.rb +0 -43
  422. data/lib/rex/ui/text/output/stdio.rb +0 -40
  423. data/lib/rex/ui/text/progress_tracker.rb +0 -56
  424. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -34
  425. data/lib/rex/ui/text/shell.rb +0 -328
  426. data/lib/rex/ui/text/table.rb +0 -279
  427. data/lib/rex/ui/text/table.rb.ut.rb +0 -55
  428. data/lib/rex/zip.rb +0 -93
  429. data/lib/rex/zip/archive.rb +0 -184
  430. data/lib/rex/zip/blocks.rb +0 -182
  431. data/lib/rex/zip/entry.rb +0 -104
  432. data/lib/rex/zip/samples/comment.rb +0 -32
  433. data/lib/rex/zip/samples/mkwar.rb +0 -138
  434. data/lib/rex/zip/samples/mkzip.rb +0 -19
  435. data/lib/rex/zip/samples/recursive.rb +0 -58
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # $Revision: 9333 $
4
- #
5
- # $Id: server.rb.ut.rb 9333 2010-05-21 00:03:04Z jduck $
6
- #
7
-
8
- require 'rex/compat'
9
- require 'rex/proto/tftp'
10
-
11
- content = nil
12
-
13
- fn = ARGV.shift
14
- if (fn and fn.length > 0)
15
- File.open(fn, "rb") do |fd|
16
- content = fd.read(fd.stat.size)
17
- end
18
- end
19
-
20
- content ||= "A" * (1024*1024)
21
-
22
-
23
- tftp = Rex::Proto::TFTP::Server.new
24
- tftp.register_file("poo", content)
25
- tftp.start
26
-
27
- #loop { break if not tftp.thread.alive? }
28
- tftp.thread.join
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- module Rex
4
-
5
- ###
6
- #
7
- # This class provides an easy interface for loading and executing ruby
8
- # scripts.
9
- #
10
- ###
11
- module Script
12
-
13
- class Completed < ::RuntimeError
14
- end
15
-
16
- #
17
- # Reads the contents of the supplied file and exeutes them.
18
- #
19
- def self.execute_file(file, in_binding = nil)
20
- str = ''
21
- buf = ::File.read(file, ::File.size(file))
22
- execute(buf, in_binding)
23
- end
24
-
25
- #
26
- # Executes arbitrary ruby from the supplied string.
27
- #
28
- def self.execute(str, in_binding = nil)
29
- begin
30
- eval(str, in_binding)
31
- rescue Completed
32
- end
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- require 'rex/script/base'
40
- require 'rex/script/shell'
41
- require 'rex/script/meterpreter'
42
-
@@ -1,59 +0,0 @@
1
- module Rex
2
- module Script
3
- class Base
4
-
5
- class OutputSink
6
- def print(msg); end
7
- def print_line(msg); end
8
- def print_status(msg); end
9
- def print_good(msg); end
10
- def print_error(msg); end
11
- end
12
-
13
- attr_accessor :client, :framework, :path, :error, :args
14
- attr_accessor :session, :sink, :workspace
15
-
16
- def initialize(client, path)
17
- self.client = client
18
- self.framework = client.framework
19
- self.path = path
20
- self.sink = OutputSink.new
21
-
22
- if(client.framework.db and client.framework.db.active)
23
- self.workspace = client.framework.db.find_workspace( client.workspace.to_s ) || client.framework.db.workspace
24
- end
25
-
26
- # Convenience aliases
27
- self.session = self.client
28
- end
29
-
30
- def output
31
- client.user_output || self.sink
32
- end
33
-
34
- def completed
35
- raise Rex::Script::Completed
36
- end
37
-
38
- def run(args=[])
39
- self.args = args = args.flatten
40
- begin
41
- eval(::File.read(self.path, ::File.size(self.path)), binding )
42
- rescue ::Interrupt
43
- rescue ::Rex::Script::Completed
44
- rescue ::Exception => e
45
- self.error = e
46
- raise e
47
- end
48
- end
49
-
50
- def print(*args); output.print(*args); end
51
- def print_status(*args); output.print_status(*args); end
52
- def print_error(*args); output.print_error(*args); end
53
- def print_good(*args); output.print_good(*args); end
54
- def print_line(*args); output.print_line(*args); end
55
-
56
- end
57
- end
58
- end
59
-
@@ -1,15 +0,0 @@
1
-
2
- module Rex
3
- module Script
4
- class Meterpreter < Base
5
-
6
- begin
7
- require 'msf/scripts/meterpreter'
8
- include Msf::Scripts::Meterpreter::Common
9
- rescue ::LoadError
10
- end
11
-
12
- end
13
- end
14
- end
15
-
@@ -1,9 +0,0 @@
1
-
2
- module Rex
3
- module Script
4
- class Shell < Base
5
-
6
- end
7
- end
8
- end
9
-
@@ -1,48 +0,0 @@
1
- require 'rex'
2
- require 'rex/proto'
3
-
4
- module Rex
5
-
6
- ###
7
- #
8
- # The service module is used to extend classes that are passed into the
9
- # service manager start routine. It provides extra methods, such as reference
10
- # counting, that are used to track the service instances more uniformly.
11
- #
12
- ###
13
- module Service
14
- include Ref
15
-
16
- require 'rex/services/local_relay'
17
-
18
- #
19
- # Returns the hardcore, as in porno, alias for this service. This is used
20
- # by the service manager to manage singleton services.
21
- #
22
- def self.hardcore_alias(*args)
23
- return "__#{args}"
24
- end
25
-
26
- def deref
27
- rv = super
28
-
29
- # If there's only one reference, then it's the service managers.
30
- if @_references == 1
31
- Rex::ServiceManager.stop_service(self)
32
- end
33
-
34
- rv
35
- end
36
-
37
- #
38
- # Calls stop on the service once the ref count drops.
39
- #
40
- def cleanup
41
- stop
42
- end
43
-
44
- attr_accessor :alias
45
-
46
- end
47
-
48
- end
@@ -1,141 +0,0 @@
1
- require 'singleton'
2
- require 'rex'
3
- require 'rex/service'
4
-
5
- module Rex
6
-
7
- ###
8
- #
9
- # This class manages service allocation and interaction. This class can be
10
- # used to start HTTP servers and manage them and all that stuff. Yup.
11
- #
12
- ###
13
- class ServiceManager < Hash
14
-
15
- #
16
- # This class is a singleton.
17
- #
18
- include Singleton
19
-
20
- #
21
- # Calls the instance method to start a service.
22
- #
23
- def self.start(klass, *args)
24
- self.instance.start(klass, *args)
25
- end
26
-
27
- #
28
- # Calls the instance method to stop a service.
29
- #
30
- def self.stop(klass, *args)
31
- self.instance.stop(klass, *args)
32
- end
33
-
34
- #
35
- # Stop a service using the alias that's associated with it.
36
- #
37
- def self.stop_by_alias(als)
38
- self.instance.stop_by_alias(als)
39
- end
40
-
41
- #
42
- # Stop the supplied service instance.
43
- #
44
- def self.stop_service(service)
45
- self.instance.stop_service(service)
46
- end
47
-
48
- #
49
- # Starts a service and assigns it a unique name in the service hash.
50
- #
51
- def start(klass, *args)
52
- # Get the hardcore alias.
53
- hals = "#{klass}" + klass.hardcore_alias(*args)
54
-
55
- # Has a service already been constructed for this guy? If so, increment
56
- # its reference count like it aint no thang.
57
- if (inst = self[hals])
58
- inst.ref
59
- return inst
60
- end
61
-
62
- inst = klass.new(*args)
63
- als = inst.alias
64
-
65
- # Find an alias that isn't taken.
66
- if (self[als])
67
- cnt = 1
68
- cnt += 1 while (self[als + " #{cnt}"])
69
- als = inst.alias + " #{cnt}"
70
- end
71
-
72
- # Extend the instance as a service.
73
- inst.extend(Rex::Service)
74
-
75
- # Re-aliases the instance.
76
- inst.alias = als
77
-
78
- # Fire up the engines. If an error occurs an exception will be
79
- # raised.
80
- inst.start
81
-
82
- # Alias associate and initialize reference counting
83
- self[als] = self[hals] = inst.refinit
84
-
85
- # Pass the caller a reference
86
- inst.ref
87
-
88
- inst
89
- end
90
-
91
- #
92
- # Stop a service using a given klass and arguments. These should mirror
93
- # what was originally passed to start exactly. If the reference count of
94
- # the service drops to zero the service will be destroyed.
95
- #
96
- def stop(klass, *args)
97
- stop_service(hals[hardcore_alias(klass, *args)])
98
- end
99
-
100
- #
101
- # Stops a service using the provided alias.
102
- #
103
- def stop_by_alias(als)
104
- stop_service(self[als])
105
- end
106
-
107
- #
108
- # Stops a service instance.
109
- #
110
- def stop_service(inst)
111
- # Stop the service and be done wif it, but only if the number of
112
- # references has dropped to zero
113
- if (inst)
114
- # Since the instance may have multiple aliases, scan through
115
- # all the pairs for matching stuff.
116
- self.each_pair { |cals, cinst|
117
- self.delete(cals) if (inst == cinst)
118
- }
119
-
120
- # Lose the list-held reference to the instance
121
- inst.deref
122
-
123
- return true
124
- end
125
-
126
- # Return false if the service isn't there
127
- return false
128
- end
129
-
130
- protected
131
-
132
- #
133
- # Returns the alias for a given service instance.
134
- #
135
- def hardcore_alias(klass, *args)
136
- "__#{klass.name}#{args}"
137
- end
138
-
139
- end
140
-
141
- end
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..'))
4
-
5
- require 'test/unit'
6
- require 'rex/service_manager'
7
-
8
- class Rex::ServiceManager::UnitTest < Test::Unit::TestCase
9
-
10
- Klass = Rex::ServiceManager
11
-
12
- def test_svcm
13
- begin
14
- c = Klass
15
- s = c.start(Rex::Proto::Http::Server, 8090)
16
- assert_not_nil(s)
17
- t = c.start(Rex::Proto::Http::Server, 8090)
18
- assert_not_nil(t)
19
- assert_equal(s, t)
20
- z = c.start(Rex::Proto::Http::Server, 8091)
21
- assert_not_equal(t, z)
22
- assert_equal("HTTP Server", s.alias)
23
- assert_equal("HTTP Server 1", z.alias)
24
- ensure
25
- c.stop_by_alias(s.alias) if (s)
26
- c.stop_by_alias(z.alias) if (z)
27
- c.stop_by_alias(t.alias) if (t)
28
- end
29
-
30
- end
31
-
32
- end
@@ -1,423 +0,0 @@
1
- require 'thread'
2
- require 'rex/socket'
3
-
4
- module Rex
5
- module Services
6
-
7
- ###
8
- #
9
- # This service acts as a local TCP relay whereby clients can connect to a
10
- # local listener that forwards to an arbitrary remote endpoint. Interaction
11
- # with the remote endpoint socket requires that it implement the
12
- # Rex::IO::Stream interface.
13
- #
14
- ###
15
- class LocalRelay
16
-
17
- include Rex::Service
18
-
19
- ###
20
- #
21
- # This module is used to extend streams such that they can be associated
22
- # with a relay context and the other side of the stream.
23
- #
24
- ###
25
- module Stream
26
-
27
- #
28
- # This method is called when the other side has data that has been read
29
- # in.
30
- #
31
- def on_other_data(data)
32
- if (relay.on_other_data_proc)
33
- relay.on_other_data_proc.call(relay, self, data)
34
- else
35
- put(data)
36
- end
37
- end
38
-
39
- attr_accessor :relay
40
- attr_accessor :other_stream
41
- end
42
-
43
- ###
44
- #
45
- # This module is used to extend stream servers such that they can be
46
- # associated with a relay context.
47
- #
48
- ###
49
- module StreamServer
50
-
51
- #
52
- # This method is called when the stream server receives a local
53
- # connection such that the remote half can be allocated. The return
54
- # value of the callback should be a Stream instance.
55
- #
56
- def on_local_connection(relay, lfd)
57
- if (relay.on_local_connection_proc)
58
- relay.on_local_connection_proc.call(relay, lfd)
59
- end
60
- end
61
-
62
- attr_accessor :relay
63
- end
64
-
65
-
66
- ###
67
- #
68
- # This class acts as an instance of a given local relay.
69
- #
70
- ###
71
- class Relay
72
-
73
- def initialize(name, listener, opts = {})
74
- self.name = name
75
- self.listener = listener
76
- self.opts = opts
77
- self.on_local_connection_proc = opts['OnLocalConnection']
78
- self.on_conn_close_proc = opts['OnConnectionClose']
79
- self.on_other_data_proc = opts['OnOtherData']
80
- if (not $dispatcher['rex'])
81
- register_log_source('rex', $dispatcher['core'], get_log_level('core'))
82
- end
83
- end
84
-
85
- def shutdown
86
- begin
87
- listener.shutdown if (listener)
88
- rescue ::Exception
89
- end
90
- end
91
-
92
- def close
93
- begin
94
- listener.close if (listener)
95
- rescue ::Exception
96
- end
97
- listener = nil
98
- end
99
-
100
- attr_reader :name, :listener, :opts
101
- attr_accessor :on_local_connection_proc
102
- attr_accessor :on_conn_close_proc
103
- attr_accessor :on_other_data_proc
104
- protected
105
- attr_writer :name, :listener, :opts
106
-
107
- end
108
-
109
- #
110
- # Initializes the local tcp relay monitor.
111
- #
112
- def initialize
113
- self.relays = Hash.new
114
- self.rfds = Array.new
115
- self.relay_thread = nil
116
- self.relay_mutex = Mutex.new
117
- end
118
-
119
- ##
120
- #
121
- # Service interface implementors
122
- #
123
- ##
124
-
125
- #
126
- # Returns the hardcore alias for the local relay service.
127
- #
128
- def self.hardcore_alias(*args)
129
- "__#{args}"
130
- end
131
-
132
- #
133
- # Returns the alias for this service.
134
- #
135
- def alias
136
- super || "Local Relay"
137
- end
138
-
139
- #
140
- # Starts the thread that monitors the local relays.
141
- #
142
- def start
143
- if (!self.relay_thread)
144
- self.relay_thread = Rex::ThreadFactory.spawn("LocalRelay", false) {
145
- begin
146
- monitor_relays
147
- rescue ::Exception
148
- elog("Error in #{self} monitor_relays: #{$!}", 'rex')
149
- end
150
- }
151
- end
152
- end
153
-
154
- #
155
- # Stops the thread that monitors the local relays and destroys all local
156
- # listeners.
157
- #
158
- def stop
159
- if (self.relay_thread)
160
- self.relay_thread.kill
161
- self.relay_thread = nil
162
- end
163
-
164
- self.relay_mutex.synchronize {
165
- self.relays.delete_if { |k, v|
166
- v.shutdown
167
- v.close
168
- true
169
- }
170
- }
171
-
172
- # Flush the relay list and read fd list
173
- self.relays.clear
174
- self.rfds.clear
175
- end
176
-
177
- ##
178
- #
179
- # Adding/removing local tcp relays
180
- #
181
- ##
182
-
183
- #
184
- # Starts a local TCP relay.
185
- #
186
- def start_tcp_relay(lport, opts = {})
187
- # Make sure our options are valid
188
- if ((opts['PeerHost'] == nil or opts['PeerPort'] == nil) and (opts['Stream'] != true))
189
- raise ArgumentError, "Missing peer host or peer port.", caller
190
- end
191
-
192
- listener = Rex::Socket.create_tcp_server(
193
- 'LocalHost' => opts['LocalHost'],
194
- 'LocalPort' => lport)
195
-
196
- opts['LocalPort'] = lport
197
- opts['__RelayType'] = 'tcp'
198
-
199
- start_relay(listener, lport.to_s + (opts['LocalHost'] || '0.0.0.0'), opts)
200
- end
201
-
202
- #
203
- # Starts a local relay on the supplied local port. This listener will call
204
- # the supplied callback procedures when various events occur.
205
- #
206
- def start_relay(stream_server, name, opts = {})
207
- # Create a Relay instance with the local stream and remote stream
208
- relay = Relay.new(name, stream_server, opts)
209
-
210
- # Extend the stream_server so that we can associate it with this relay
211
- stream_server.extend(StreamServer)
212
- stream_server.relay = relay
213
-
214
- # Add the stream associations the appropriate lists and hashes
215
- self.relay_mutex.synchronize {
216
- self.relays[name] = relay
217
-
218
- self.rfds << stream_server
219
- }
220
- end
221
-
222
- #
223
- # Stops relaying on a given local port.
224
- #
225
- def stop_tcp_relay(lport, lhost = nil)
226
- stop_relay(lport.to_s + (lhost || '0.0.0.0'))
227
- end
228
-
229
- #
230
- # Stops a relay with a given name.
231
- #
232
- def stop_relay(name)
233
- rv = false
234
-
235
- self.relay_mutex.synchronize {
236
- relay = self.relays[name]
237
-
238
- if (relay)
239
- close_relay(relay)
240
- rv = true
241
- end
242
- }
243
-
244
- rv
245
- end
246
-
247
- #
248
- # Enumerate each TCP relay
249
- #
250
- def each_tcp_relay(&block)
251
- self.relays.each_pair { |name, relay|
252
- next if (relay.opts['__RelayType'] != 'tcp')
253
-
254
- yield(
255
- relay.opts['LocalHost'] || '0.0.0.0',
256
- relay.opts['LocalPort'],
257
- relay.opts['PeerHost'],
258
- relay.opts['PeerPort'],
259
- relay.opts)
260
- }
261
- end
262
-
263
- protected
264
-
265
- attr_accessor :relays, :relay_thread, :relay_mutex
266
- attr_accessor :rfds
267
-
268
- #
269
- # Closes an cleans up a specific relay
270
- #
271
- def close_relay(relay)
272
- self.rfds.delete(relay.listener)
273
- self.relays.delete(relay.name)
274
-
275
- begin
276
- relay.shutdown
277
- relay.close
278
- rescue IOError
279
- end
280
- end
281
-
282
- #
283
- # Closes a specific relay connection without tearing down the actual relay
284
- # itself.
285
- #
286
- def close_relay_conn(fd)
287
- relay = fd.relay
288
- ofd = fd.other_stream
289
-
290
- self.rfds.delete(fd)
291
-
292
- begin
293
- if (relay.on_conn_close_proc)
294
- relay.on_conn_close_proc.call(fd)
295
- end
296
-
297
- fd.shutdown
298
- fd.close
299
- rescue IOError
300
- end
301
-
302
- if (ofd)
303
- self.rfds.delete(ofd)
304
-
305
- begin
306
- if (relay.on_conn_close_proc)
307
- relay.on_conn_close_proc.call(ofd)
308
- end
309
-
310
- ofd.shutdown
311
- ofd.close
312
- rescue IOError
313
- end
314
- end
315
- end
316
-
317
- #
318
- # Accepts a client connection on a local relay.
319
- #
320
- def accept_relay_conn(srvfd)
321
- relay = srvfd.relay
322
-
323
- begin
324
- dlog("Accepting relay client connection...", 'rex', LEV_3)
325
-
326
- # Accept the child connection
327
- lfd = srvfd.accept
328
- dlog("Got left side of relay: #{lfd}", 'rex', LEV_3)
329
-
330
- # Call the relay's on_local_connection method which should return a
331
- # remote connection on success
332
- rfd = srvfd.on_local_connection(relay, lfd)
333
-
334
- dlog("Got right side of relay: #{rfd}", 'rex', LEV_3)
335
- rescue
336
- wlog("Failed to get remote half of local connection on relay #{relay.name}: #{$!}", 'rex')
337
- lfd.close
338
- return
339
- end
340
-
341
- # If we have both sides, then we rock. Extend the instances, associate
342
- # them with the relay, associate them with each other, and add them to
343
- # the list of polling file descriptors
344
- if (lfd and rfd)
345
- lfd.extend(Stream)
346
- rfd.extend(Stream)
347
-
348
- lfd.relay = relay
349
- rfd.relay = relay
350
-
351
- lfd.other_stream = rfd
352
- rfd.other_stream = lfd
353
-
354
- self.rfds << lfd
355
- self.rfds << rfd
356
-
357
- # Otherwise, we don't have both sides, we'll close them.
358
- else
359
- close_relay_conn(lfd)
360
- end
361
- end
362
-
363
- #
364
- # Monitors the relays for data and passes it in both directions.
365
- #
366
- def monitor_relays
367
- begin
368
- # Helps with latency
369
- Thread.current.priority = 2
370
-
371
- # Poll all the streams...
372
- begin
373
- socks = Rex::ThreadSafe.select(rfds, nil, nil, 0.25)
374
- rescue StreamClosedError => e
375
- dlog("monitor_relays: closing stream #{e.stream}", 'rex', LEV_3)
376
-
377
- # Close the relay connection that is associated with the stream
378
- # closed error
379
- if (e.stream.kind_of?(Stream))
380
- close_relay_conn(e.stream)
381
- end
382
-
383
- dlog("monitor_relays: closed stream #{e.stream}", 'rex', LEV_3)
384
-
385
- next
386
- rescue
387
- elog("Error in #{self} monitor_relays select: #{$!.class} #{$!}", 'rex')
388
- return
389
- end
390
-
391
- # If socks is nil, go again.
392
- next unless socks
393
-
394
- # Process read-ready file descriptors, if any.
395
- socks[0].each { |rfd|
396
-
397
- # If this file descriptor is a server, accept the connection
398
- if (rfd.kind_of?(StreamServer))
399
- accept_relay_conn(rfd)
400
- # Otherwise, it's a relay connection, read data from one side
401
- # and write it to the other
402
- else
403
- begin
404
- # Pass the data onto the other fd, most likely writing it.
405
- data = rfd.sysread(65536)
406
- rfd.other_stream.on_other_data(data)
407
- # If we catch an error, close the connection
408
- rescue ::Exception
409
- elog("Error in #{self} monitor_relays read: #{$!}", 'rex')
410
- close_relay_conn(rfd)
411
- end
412
- end
413
-
414
- } if (socks[0])
415
-
416
- end while true
417
- end
418
-
419
- end
420
-
421
- end
422
- end
423
-