librex 0.0.65 → 0.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. data/README.markdown +1 -1
  2. data/lib/rex/arch.rb +1 -0
  3. data/lib/rex/arch/sparc.rb +16 -15
  4. data/lib/rex/arch/sparc.rb.ut.rb +2 -1
  5. data/lib/rex/arch/x86.rb +1 -0
  6. data/lib/rex/arch/x86.rb.ut.rb +2 -1
  7. data/lib/rex/assembly/nasm.rb +1 -0
  8. data/lib/rex/assembly/nasm.rb.ut.rb +2 -1
  9. data/lib/rex/compat.rb +13 -0
  10. data/lib/rex/constants.rb +5 -4
  11. data/lib/rex/elfparsey.rb +3 -2
  12. data/lib/rex/elfparsey/elf.rb +2 -1
  13. data/lib/rex/elfparsey/elfbase.rb +8 -7
  14. data/lib/rex/elfparsey/exceptions.rb +3 -2
  15. data/lib/rex/elfscan.rb +3 -2
  16. data/lib/rex/elfscan/scanner.rb +2 -1
  17. data/lib/rex/elfscan/search.rb +2 -1
  18. data/lib/rex/encoder/alpha2.rb +2 -1
  19. data/lib/rex/encoder/alpha2/alpha_mixed.rb +3 -2
  20. data/lib/rex/encoder/alpha2/alpha_upper.rb +5 -4
  21. data/lib/rex/encoder/alpha2/generic.rb +37 -60
  22. data/lib/rex/encoder/alpha2/unicode_mixed.rb +4 -9
  23. data/lib/rex/encoder/alpha2/unicode_upper.rb +4 -9
  24. data/lib/rex/encoder/ndr.rb +1 -0
  25. data/lib/rex/encoder/ndr.rb.ut.rb +2 -1
  26. data/lib/rex/encoder/nonalpha.rb +1 -0
  27. data/lib/rex/encoder/nonupper.rb +1 -0
  28. data/lib/rex/encoder/xdr.rb +9 -8
  29. data/lib/rex/encoder/xdr.rb.ut.rb +2 -1
  30. data/lib/rex/encoder/xor.rb +1 -0
  31. data/lib/rex/encoder/xor/dword.rb +2 -1
  32. data/lib/rex/encoder/xor/dword_additive.rb +2 -1
  33. data/lib/rex/encoders/xor_dword.rb +1 -0
  34. data/lib/rex/encoders/xor_dword_additive.rb +2 -1
  35. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +2 -1
  36. data/lib/rex/encoding/xor.rb +2 -1
  37. data/lib/rex/encoding/xor.rb.ts.rb +2 -1
  38. data/lib/rex/encoding/xor/byte.rb +2 -1
  39. data/lib/rex/encoding/xor/byte.rb.ut.rb +2 -1
  40. data/lib/rex/encoding/xor/dword.rb +2 -1
  41. data/lib/rex/encoding/xor/dword.rb.ut.rb +2 -1
  42. data/lib/rex/encoding/xor/dword_additive.rb +1 -0
  43. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +2 -1
  44. data/lib/rex/encoding/xor/exceptions.rb +1 -0
  45. data/lib/rex/encoding/xor/generic.rb +1 -0
  46. data/lib/rex/encoding/xor/generic.rb.ut.rb +2 -1
  47. data/lib/rex/encoding/xor/qword.rb +2 -1
  48. data/lib/rex/encoding/xor/word.rb +2 -1
  49. data/lib/rex/encoding/xor/word.rb.ut.rb +2 -1
  50. data/lib/rex/exceptions.rb +1 -0
  51. data/lib/rex/exceptions.rb.ut.rb +2 -1
  52. data/lib/rex/exploitation/cmdstager.rb +2 -1
  53. data/lib/rex/exploitation/cmdstager/base.rb +1 -0
  54. data/lib/rex/exploitation/cmdstager/debug_asm.rb +2 -1
  55. data/lib/rex/exploitation/cmdstager/debug_write.rb +2 -1
  56. data/lib/rex/exploitation/cmdstager/tftp.rb +2 -1
  57. data/lib/rex/exploitation/cmdstager/vbs.rb +2 -1
  58. data/lib/rex/exploitation/egghunter.rb +12 -11
  59. data/lib/rex/exploitation/egghunter.rb.ut.rb +2 -1
  60. data/lib/rex/exploitation/encryptjs.rb +1 -0
  61. data/lib/rex/exploitation/heaplib.rb +1 -0
  62. data/lib/rex/exploitation/javascriptosdetect.js +1014 -0
  63. data/lib/rex/exploitation/javascriptosdetect.rb +4 -857
  64. data/lib/rex/exploitation/jsobfu.rb +2 -1
  65. data/lib/rex/exploitation/obfuscatejs.rb +1 -0
  66. data/lib/rex/exploitation/omelet.rb +1 -0
  67. data/lib/rex/exploitation/omelet.rb.ut.rb +1 -0
  68. data/lib/rex/exploitation/opcodedb.rb +12 -11
  69. data/lib/rex/exploitation/opcodedb.rb.ut.rb +2 -1
  70. data/lib/rex/exploitation/seh.rb +3 -2
  71. data/lib/rex/exploitation/seh.rb.ut.rb +2 -1
  72. data/lib/rex/file.rb +4 -3
  73. data/lib/rex/file.rb.ut.rb +2 -1
  74. data/lib/rex/image_source.rb +3 -2
  75. data/lib/rex/image_source/disk.rb +3 -2
  76. data/lib/rex/image_source/image_source.rb +3 -2
  77. data/lib/rex/image_source/memory.rb +3 -2
  78. data/lib/rex/io/bidirectional_pipe.rb +1 -0
  79. data/lib/rex/io/datagram_abstraction.rb +2 -1
  80. data/lib/rex/io/ring_buffer.rb +49 -44
  81. data/lib/rex/io/ring_buffer.rb.ut.rb +4 -3
  82. data/lib/rex/io/stream.rb +1 -0
  83. data/lib/rex/io/stream_abstraction.rb +1 -0
  84. data/lib/rex/io/stream_server.rb +1 -0
  85. data/lib/rex/job_container.rb +1 -0
  86. data/lib/rex/logging.rb +2 -1
  87. data/lib/rex/logging/log_dispatcher.rb +5 -4
  88. data/lib/rex/logging/log_sink.rb +2 -1
  89. data/lib/rex/logging/sinks/flatfile.rb +4 -3
  90. data/lib/rex/logging/sinks/stderr.rb +2 -1
  91. data/lib/rex/machparsey.rb +2 -1
  92. data/lib/rex/machparsey/exceptions.rb +2 -1
  93. data/lib/rex/machparsey/mach.rb +20 -19
  94. data/lib/rex/machparsey/machbase.rb +27 -26
  95. data/lib/rex/machscan.rb +2 -1
  96. data/lib/rex/machscan/scanner.rb +1 -0
  97. data/lib/rex/mime.rb +2 -1
  98. data/lib/rex/mime/header.rb +1 -0
  99. data/lib/rex/mime/message.rb +4 -1
  100. data/lib/rex/mime/part.rb +2 -1
  101. data/lib/rex/nop/opty2.rb +2 -1
  102. data/lib/rex/nop/opty2.rb.ut.rb +2 -1
  103. data/lib/rex/nop/opty2_tables.rb +1 -0
  104. data/lib/rex/ole.rb +3 -2
  105. data/lib/rex/ole/clsid.rb +3 -2
  106. data/lib/rex/ole/difat.rb +3 -2
  107. data/lib/rex/ole/directory.rb +3 -2
  108. data/lib/rex/ole/direntry.rb +3 -2
  109. data/lib/rex/ole/fat.rb +3 -2
  110. data/lib/rex/ole/header.rb +3 -2
  111. data/lib/rex/ole/minifat.rb +3 -2
  112. data/lib/rex/ole/propset.rb +4 -3
  113. data/lib/rex/ole/samples/create_ole.rb +1 -0
  114. data/lib/rex/ole/samples/dir.rb +1 -0
  115. data/lib/rex/ole/samples/dump_stream.rb +1 -0
  116. data/lib/rex/ole/samples/ole_info.rb +1 -0
  117. data/lib/rex/ole/storage.rb +3 -2
  118. data/lib/rex/ole/stream.rb +3 -2
  119. data/lib/rex/ole/substorage.rb +3 -2
  120. data/lib/rex/ole/util.rb +3 -2
  121. data/lib/rex/parser/acunetix_nokogiri.rb +13 -12
  122. data/lib/rex/parser/apple_backup_manifestdb.rb +20 -19
  123. data/lib/rex/parser/appscan_nokogiri.rb +17 -16
  124. data/lib/rex/parser/arguments.rb +2 -1
  125. data/lib/rex/parser/arguments.rb.ut.rb +2 -1
  126. data/lib/rex/parser/burp_session_nokogiri.rb +8 -7
  127. data/lib/rex/parser/ci_nokogiri.rb +4 -3
  128. data/lib/rex/parser/foundstone_nokogiri.rb +18 -17
  129. data/lib/rex/parser/fusionvm_nokogiri.rb +109 -0
  130. data/lib/rex/parser/ini.rb +1 -0
  131. data/lib/rex/parser/ini.rb.ut.rb +2 -1
  132. data/lib/rex/parser/ip360_aspl_xml.rb +1 -0
  133. data/lib/rex/parser/ip360_xml.rb +4 -3
  134. data/lib/rex/parser/mbsa_nokogiri.rb +8 -7
  135. data/lib/rex/parser/nessus_xml.rb +3 -2
  136. data/lib/rex/parser/netsparker_xml.rb +10 -9
  137. data/lib/rex/parser/nexpose_raw_nokogiri.rb +372 -52
  138. data/lib/rex/parser/nexpose_simple_nokogiri.rb +8 -7
  139. data/lib/rex/parser/nexpose_xml.rb +1 -0
  140. data/lib/rex/parser/nmap_nokogiri.rb +63 -33
  141. data/lib/rex/parser/nmap_xml.rb +1 -0
  142. data/lib/rex/parser/nokogiri_doc_mixin.rb +35 -15
  143. data/lib/rex/parser/openvas_nokogiri.rb +172 -0
  144. data/lib/rex/parser/retina_xml.rb +1 -0
  145. data/lib/rex/parser/wapiti_nokogiri.rb +105 -0
  146. data/lib/rex/payloads.rb +2 -1
  147. data/lib/rex/payloads/win32.rb +2 -1
  148. data/lib/rex/payloads/win32/common.rb +2 -1
  149. data/lib/rex/payloads/win32/kernel.rb +2 -1
  150. data/lib/rex/payloads/win32/kernel/common.rb +4 -3
  151. data/lib/rex/payloads/win32/kernel/migration.rb +2 -1
  152. data/lib/rex/payloads/win32/kernel/recovery.rb +2 -1
  153. data/lib/rex/payloads/win32/kernel/stager.rb +21 -20
  154. data/lib/rex/peparsey.rb +3 -2
  155. data/lib/rex/peparsey/exceptions.rb +2 -1
  156. data/lib/rex/peparsey/pe.rb +3 -2
  157. data/lib/rex/peparsey/pe_memdump.rb +2 -1
  158. data/lib/rex/peparsey/pebase.rb +2 -1
  159. data/lib/rex/peparsey/section.rb +2 -1
  160. data/lib/rex/pescan.rb +3 -2
  161. data/lib/rex/pescan/analyze.rb +1 -0
  162. data/lib/rex/pescan/scanner.rb +1 -0
  163. data/lib/rex/pescan/search.rb +1 -0
  164. data/lib/rex/platforms.rb +2 -1
  165. data/lib/rex/platforms/windows.rb +2 -1
  166. data/lib/rex/poly.rb +2 -1
  167. data/lib/rex/poly/block.rb +16 -15
  168. data/lib/rex/poly/register.rb +2 -1
  169. data/lib/rex/poly/register/x86.rb +2 -1
  170. data/lib/rex/post.rb +2 -2
  171. data/lib/rex/post/dir.rb +2 -1
  172. data/lib/rex/post/file.rb +1 -0
  173. data/lib/rex/post/file_stat.rb +1 -0
  174. data/lib/rex/post/io.rb +2 -1
  175. data/lib/rex/post/meterpreter.rb +2 -1
  176. data/lib/rex/post/meterpreter/channel.rb +1 -0
  177. data/lib/rex/post/meterpreter/channel_container.rb +2 -1
  178. data/lib/rex/post/meterpreter/channels/pool.rb +1 -0
  179. data/lib/rex/post/meterpreter/channels/pools/file.rb +1 -0
  180. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +3 -2
  181. data/lib/rex/post/meterpreter/channels/stream.rb +1 -0
  182. data/lib/rex/post/meterpreter/client.rb +23 -1
  183. data/lib/rex/post/meterpreter/client_core.rb +10 -5
  184. data/lib/rex/post/meterpreter/dependencies.rb +2 -1
  185. data/lib/rex/post/meterpreter/extension.rb +2 -1
  186. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +7 -6
  187. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +2 -1
  188. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +5 -4
  189. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +2 -1
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +1 -0
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +1 -0
  192. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +7 -6
  193. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -0
  194. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +2 -1
  195. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +2 -1
  196. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +1 -0
  197. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +2 -1
  198. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +28 -11
  199. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +1 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +6 -5
  201. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +1 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +3 -2
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +1 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +2 -1
  205. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +39 -5
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +75 -18
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +18 -6
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +1 -0
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +1 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +1 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +1 -0
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +4 -1
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +1 -0
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +1 -0
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +1 -0
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +1 -0
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1 -0
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +1 -0
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +1 -0
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +1 -0
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +12 -0
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +1 -0
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +1 -0
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +1 -0
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +1 -0
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +7 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +1 -0
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +1 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +1 -0
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +1 -0
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +1 -0
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +1 -0
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +1 -0
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +1 -0
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +1 -0
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +1 -0
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +23 -0
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +29 -0
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +10 -5
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +9 -0
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +1 -0
  242. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +106 -0
  243. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +128 -0
  244. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +1 -0
  245. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +27 -6
  246. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +21 -0
  247. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +1 -0
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +1 -0
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +1 -0
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +1 -0
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +2 -1
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +43 -4
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +1 -0
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +2 -1
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +1 -0
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +1 -0
  257. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +1 -0
  258. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +1 -0
  259. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +1 -0
  260. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +1 -0
  261. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +1 -0
  262. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +7 -0
  263. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +14 -13
  264. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +1 -0
  265. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +2 -1
  266. data/lib/rex/post/meterpreter/object_aliases.rb +6 -5
  267. data/lib/rex/post/meterpreter/packet.rb +26 -6
  268. data/lib/rex/post/meterpreter/packet_dispatcher.rb +1 -0
  269. data/lib/rex/post/meterpreter/packet_parser.rb +1 -0
  270. data/lib/rex/post/meterpreter/packet_response_waiter.rb +1 -0
  271. data/lib/rex/post/meterpreter/ui/console.rb +1 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +1 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +103 -28
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +1 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +1 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +1 -0
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +3 -2
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +12 -11
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +2 -1
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +2 -1
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +53 -36
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +3 -2
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +87 -44
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +80 -18
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +77 -48
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +72 -41
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +24 -5
  288. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +2 -1
  289. data/lib/rex/post/permission.rb +2 -1
  290. data/lib/rex/post/process.rb +2 -1
  291. data/lib/rex/post/thread.rb +2 -1
  292. data/lib/rex/post/ui.rb +2 -1
  293. data/lib/rex/proto.rb +1 -0
  294. data/lib/rex/proto.rb.ts.rb +2 -1
  295. data/lib/rex/proto/dcerpc.rb +2 -1
  296. data/lib/rex/proto/dcerpc.rb.ts.rb +2 -1
  297. data/lib/rex/proto/dcerpc/client.rb +1 -0
  298. data/lib/rex/proto/dcerpc/client.rb.ut.rb +1 -0
  299. data/lib/rex/proto/dcerpc/exceptions.rb +2 -1
  300. data/lib/rex/proto/dcerpc/handle.rb +1 -0
  301. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +2 -1
  302. data/lib/rex/proto/dcerpc/ndr.rb +2 -1
  303. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +2 -1
  304. data/lib/rex/proto/dcerpc/packet.rb +52 -45
  305. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +12 -11
  306. data/lib/rex/proto/dcerpc/response.rb +1 -0
  307. data/lib/rex/proto/dcerpc/response.rb.ut.rb +2 -1
  308. data/lib/rex/proto/dcerpc/uuid.rb +13 -12
  309. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +2 -1
  310. data/lib/rex/proto/dhcp.rb +2 -1
  311. data/lib/rex/proto/dhcp/constants.rb +2 -1
  312. data/lib/rex/proto/dhcp/server.rb +4 -3
  313. data/lib/rex/proto/drda.rb +1 -0
  314. data/lib/rex/proto/drda.rb.ts.rb +1 -0
  315. data/lib/rex/proto/drda/constants.rb +1 -0
  316. data/lib/rex/proto/drda/constants.rb.ut.rb +1 -0
  317. data/lib/rex/proto/drda/packet.rb +11 -10
  318. data/lib/rex/proto/drda/packet.rb.ut.rb +5 -4
  319. data/lib/rex/proto/drda/utils.rb +4 -3
  320. data/lib/rex/proto/drda/utils.rb.ut.rb +3 -2
  321. data/lib/rex/proto/http.rb +2 -1
  322. data/lib/rex/proto/http.rb.ts.rb +2 -1
  323. data/lib/rex/proto/http/client.rb +29 -5
  324. data/lib/rex/proto/http/client.rb.ut.rb +1 -0
  325. data/lib/rex/proto/http/handler.rb +2 -1
  326. data/lib/rex/proto/http/handler/erb.rb +5 -4
  327. data/lib/rex/proto/http/handler/erb.rb.ut.rb +2 -1
  328. data/lib/rex/proto/http/handler/proc.rb +1 -0
  329. data/lib/rex/proto/http/handler/proc.rb.ut.rb +2 -1
  330. data/lib/rex/proto/http/header.rb +3 -3
  331. data/lib/rex/proto/http/header.rb.ut.rb +2 -1
  332. data/lib/rex/proto/http/packet.rb +1 -0
  333. data/lib/rex/proto/http/packet.rb.ut.rb +15 -14
  334. data/lib/rex/proto/http/request.rb +23 -22
  335. data/lib/rex/proto/http/request.rb.ut.rb +2 -1
  336. data/lib/rex/proto/http/response.rb +6 -5
  337. data/lib/rex/proto/http/response.rb.ut.rb +7 -6
  338. data/lib/rex/proto/http/server.rb +1 -0
  339. data/lib/rex/proto/http/server.rb.ut.rb +6 -5
  340. data/lib/rex/proto/iax2.rb +1 -0
  341. data/lib/rex/proto/iax2/call.rb +48 -47
  342. data/lib/rex/proto/iax2/client.rb +23 -22
  343. data/lib/rex/proto/iax2/codecs.rb +1 -0
  344. data/lib/rex/proto/iax2/codecs/alaw.rb +1 -0
  345. data/lib/rex/proto/iax2/codecs/g711.rb +4 -3
  346. data/lib/rex/proto/iax2/codecs/mulaw.rb +1 -0
  347. data/lib/rex/proto/iax2/constants.rb +1 -0
  348. data/lib/rex/proto/natpmp.rb +11 -0
  349. data/lib/rex/proto/natpmp/constants.rb +19 -0
  350. data/lib/rex/proto/natpmp/packet.rb +45 -0
  351. data/lib/rex/proto/ntlm.rb +1 -0
  352. data/lib/rex/proto/ntlm.rb.ut.rb +1 -0
  353. data/lib/rex/proto/ntlm/base.rb +38 -37
  354. data/lib/rex/proto/ntlm/constants.rb +1 -0
  355. data/lib/rex/proto/ntlm/crypt.rb +45 -44
  356. data/lib/rex/proto/ntlm/exceptions.rb +1 -0
  357. data/lib/rex/proto/ntlm/message.rb +30 -29
  358. data/lib/rex/proto/ntlm/utils.rb +116 -115
  359. data/lib/rex/proto/proxy/socks4a.rb +1 -0
  360. data/lib/rex/proto/rfb.rb +1 -0
  361. data/lib/rex/proto/rfb.rb.ut.rb +1 -0
  362. data/lib/rex/proto/rfb/cipher.rb +1 -0
  363. data/lib/rex/proto/rfb/client.rb +1 -0
  364. data/lib/rex/proto/rfb/constants.rb +1 -0
  365. data/lib/rex/proto/smb.rb +2 -1
  366. data/lib/rex/proto/smb.rb.ts.rb +2 -1
  367. data/lib/rex/proto/smb/client.rb +23 -22
  368. data/lib/rex/proto/smb/client.rb.ut.rb +1 -0
  369. data/lib/rex/proto/smb/constants.rb +1 -0
  370. data/lib/rex/proto/smb/constants.rb.ut.rb +2 -1
  371. data/lib/rex/proto/smb/crypt.rb +3 -2
  372. data/lib/rex/proto/smb/evasions.rb +1 -0
  373. data/lib/rex/proto/smb/exceptions.rb +6 -5
  374. data/lib/rex/proto/smb/simpleclient.rb +1 -0
  375. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +1 -0
  376. data/lib/rex/proto/smb/utils.rb +1 -0
  377. data/lib/rex/proto/smb/utils.rb.ut.rb +2 -1
  378. data/lib/rex/proto/sunrpc.rb +1 -0
  379. data/lib/rex/proto/sunrpc/client.rb +1 -0
  380. data/lib/rex/proto/tftp.rb +3 -1
  381. data/lib/rex/proto/tftp/client.rb +344 -0
  382. data/lib/rex/proto/tftp/constants.rb +2 -1
  383. data/lib/rex/proto/tftp/server.rb +2 -1
  384. data/lib/rex/proto/tftp/server.rb.ut.rb +3 -2
  385. data/lib/rex/registry.rb +14 -0
  386. data/lib/rex/registry/hive.rb +132 -0
  387. data/lib/rex/registry/lfkey.rb +51 -0
  388. data/lib/rex/registry/nodekey.rb +54 -0
  389. data/lib/rex/registry/regf.rb +25 -0
  390. data/lib/rex/registry/valuekey.rb +67 -0
  391. data/lib/rex/registry/valuelist.rb +29 -0
  392. data/lib/rex/ropbuilder.rb +2 -1
  393. data/lib/rex/ropbuilder/rop.rb +3 -2
  394. data/lib/rex/script.rb +1 -0
  395. data/lib/rex/script/base.rb +1 -0
  396. data/lib/rex/script/meterpreter.rb +1 -0
  397. data/lib/rex/script/shell.rb +1 -0
  398. data/lib/rex/service.rb +2 -1
  399. data/lib/rex/service_manager.rb +6 -5
  400. data/lib/rex/service_manager.rb.ut.rb +2 -1
  401. data/lib/rex/services/local_relay.rb +1 -0
  402. data/lib/rex/socket.rb +72 -36
  403. data/lib/rex/socket.rb.ut.rb +1 -0
  404. data/lib/rex/socket/comm.rb +1 -0
  405. data/lib/rex/socket/comm/local.rb +60 -13
  406. data/lib/rex/socket/comm/local.rb.ut.rb +2 -1
  407. data/lib/rex/socket/ip.rb +1 -0
  408. data/lib/rex/socket/parameters.rb +15 -14
  409. data/lib/rex/socket/parameters.rb.ut.rb +2 -1
  410. data/lib/rex/socket/range_walker.rb +71 -26
  411. data/lib/rex/socket/range_walker.rb.ut.rb +2 -1
  412. data/lib/rex/socket/ssl_tcp.rb +1 -0
  413. data/lib/rex/socket/ssl_tcp.rb.ut.rb +2 -1
  414. data/lib/rex/socket/ssl_tcp_server.rb +1 -0
  415. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +1 -0
  416. data/lib/rex/socket/subnet_walker.rb +1 -0
  417. data/lib/rex/socket/subnet_walker.rb.ut.rb +2 -1
  418. data/lib/rex/socket/switch_board.rb +1 -0
  419. data/lib/rex/socket/switch_board.rb.ut.rb +2 -1
  420. data/lib/rex/socket/tcp.rb +4 -3
  421. data/lib/rex/socket/tcp.rb.ut.rb +2 -1
  422. data/lib/rex/socket/tcp_server.rb +1 -0
  423. data/lib/rex/socket/tcp_server.rb.ut.rb +2 -1
  424. data/lib/rex/socket/udp.rb +2 -1
  425. data/lib/rex/socket/udp.rb.ut.rb +2 -1
  426. data/lib/rex/struct2.rb +2 -1
  427. data/lib/rex/struct2/c_struct.rb +2 -1
  428. data/lib/rex/struct2/c_struct_template.rb +2 -1
  429. data/lib/rex/struct2/constant.rb +2 -1
  430. data/lib/rex/struct2/element.rb +2 -1
  431. data/lib/rex/struct2/generic.rb +1 -0
  432. data/lib/rex/struct2/restraint.rb +2 -1
  433. data/lib/rex/struct2/s_string.rb +1 -0
  434. data/lib/rex/struct2/s_struct.rb +1 -0
  435. data/lib/rex/sync.rb +2 -1
  436. data/lib/rex/sync/event.rb +1 -0
  437. data/lib/rex/sync/read_write_lock.rb +1 -0
  438. data/lib/rex/sync/ref.rb +2 -1
  439. data/lib/rex/sync/thread_safe.rb +2 -1
  440. data/lib/rex/test.rb +2 -1
  441. data/lib/rex/text.rb +136 -19
  442. data/lib/rex/text.rb.ut.rb +1 -0
  443. data/lib/rex/thread_factory.rb +5 -4
  444. data/lib/rex/time.rb +2 -1
  445. data/lib/rex/transformer.rb +1 -0
  446. data/lib/rex/transformer.rb.ut.rb +2 -1
  447. data/lib/rex/ui.rb +2 -1
  448. data/lib/rex/ui/interactive.rb +10 -9
  449. data/lib/rex/ui/output.rb +1 -0
  450. data/lib/rex/ui/output/none.rb +2 -1
  451. data/lib/rex/ui/progress_tracker.rb +2 -1
  452. data/lib/rex/ui/subscriber.rb +9 -8
  453. data/lib/rex/ui/text/color.rb +1 -0
  454. data/lib/rex/ui/text/color.rb.ut.rb +1 -0
  455. data/lib/rex/ui/text/dispatcher_shell.rb +63 -23
  456. data/lib/rex/ui/text/input.rb +1 -0
  457. data/lib/rex/ui/text/input/buffer.rb +7 -6
  458. data/lib/rex/ui/text/input/readline.rb +14 -13
  459. data/lib/rex/ui/text/input/socket.rb +1 -0
  460. data/lib/rex/ui/text/input/stdio.rb +2 -1
  461. data/lib/rex/ui/text/irb_shell.rb +1 -0
  462. data/lib/rex/ui/text/output.rb +1 -0
  463. data/lib/rex/ui/text/output/buffer.rb +1 -0
  464. data/lib/rex/ui/text/output/file.rb +1 -0
  465. data/lib/rex/ui/text/output/socket.rb +1 -0
  466. data/lib/rex/ui/text/output/stdio.rb +1 -0
  467. data/lib/rex/ui/text/output/tee.rb +1 -0
  468. data/lib/rex/ui/text/progress_tracker.rb +2 -1
  469. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +2 -1
  470. data/lib/rex/ui/text/shell.rb +1 -0
  471. data/lib/rex/ui/text/table.rb +20 -14
  472. data/lib/rex/ui/text/table.rb.ut.rb +3 -2
  473. data/lib/rex/zip.rb +1 -0
  474. data/lib/rex/zip/archive.rb +2 -1
  475. data/lib/rex/zip/blocks.rb +3 -2
  476. data/lib/rex/zip/entry.rb +6 -7
  477. data/lib/rex/zip/jar.rb +4 -3
  478. data/lib/rex/zip/samples/comment.rb +1 -0
  479. data/lib/rex/zip/samples/mkwar.rb +1 -0
  480. data/lib/rex/zip/samples/mkzip.rb +1 -0
  481. data/lib/rex/zip/samples/recursive.rb +1 -0
  482. metadata +433 -435
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  require 'rex/post/ui'
4
5
 
@@ -10,7 +11,7 @@ module Stdapi
10
11
 
11
12
  ###
12
13
  #
13
- # Allows for interacting with the user interface on the remote machine,
14
+ # Allows for interacting with the user interface on the remote machine,
14
15
  # such as by disabling the keyboard and mouse.
15
16
  #
16
17
  # WARNING:
@@ -46,7 +47,7 @@ class UI < Rex::Post::UI
46
47
  # Disable keyboard input on the remote machine.
47
48
  #
48
49
  def disable_keyboard
49
- return enable_keyboard(false)
50
+ return enable_keyboard(false)
50
51
  end
51
52
 
52
53
  #
@@ -112,7 +113,7 @@ class UI < Rex::Post::UI
112
113
  end
113
114
  return desktopz
114
115
  end
115
-
116
+
116
117
  #
117
118
  # Get the current desktop meterpreter is using.
118
119
  #
@@ -129,10 +130,10 @@ class UI < Rex::Post::UI
129
130
  end
130
131
  return desktop
131
132
  end
132
-
133
+
133
134
  #
134
- # Change the meterpreters current desktop. The switch param sets this
135
- # new desktop as the interactive one (The local users visible desktop
135
+ # Change the meterpreters current desktop. The switch param sets this
136
+ # new desktop as the interactive one (The local users visible desktop
136
137
  # with screen/keyboard/mouse control).
137
138
  #
138
139
  def set_desktop( session=-1, station='WinSta0', name='Default', switch=false )
@@ -147,12 +148,12 @@ class UI < Rex::Post::UI
147
148
  end
148
149
  return false
149
150
  end
150
-
151
+
151
152
  #
152
153
  # Grab a screenshot of the interactive desktop
153
154
  #
154
155
  def screenshot( quality=50 )
155
- request = Packet.create_request( 'stdapi_ui_desktop_screenshot' )
156
+ request = Packet.create_request( 'stdapi_ui_desktop_screenshot' )
156
157
  request.add_tlv( TLV_TYPE_DESKTOP_SCREENSHOT_QUALITY, quality )
157
158
  # include the x64 screenshot dll if the host OS is x64
158
159
  if( client.sys.config.sysinfo['Architecture'] =~ /^\S*x64\S*/ )
@@ -191,7 +192,7 @@ class UI < Rex::Post::UI
191
192
  response = client.send_request(request)
192
193
  return true
193
194
  end
194
-
195
+
195
196
  #
196
197
  # Start the keyboard sniffer
197
198
  #
@@ -218,7 +219,7 @@ class UI < Rex::Post::UI
218
219
  response = client.send_request(request)
219
220
  return response.get_tlv_value(TLV_TYPE_KEYS_DUMP);
220
221
  end
221
-
222
+
222
223
  #
223
224
  # Extract the keystroke from the buffer data
224
225
  #
@@ -228,11 +229,11 @@ class UI < Rex::Post::UI
228
229
  fl = (inp & 0xff00) >> 8
229
230
  vk = (inp & 0xff)
230
231
  kc = VirtualKeyCodes[vk]
231
-
232
+
232
233
  f_shift = fl & (1<<1)
233
234
  f_ctrl = fl & (1<<2)
234
235
  f_alt = fl & (1<<3)
235
-
236
+
236
237
  if(kc)
237
238
  name = ((f_shift != 0 and kc.length > 1) ? kc[1] : kc[0])
238
239
  case name
@@ -250,7 +251,7 @@ class UI < Rex::Post::UI
250
251
  end
251
252
  return outp
252
253
  end
253
-
254
+
254
255
  protected
255
256
  attr_accessor :client # :nodoc:
256
257
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  module Rex
4
5
  module Post
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  module Rex
4
5
  module Post
@@ -27,4 +28,4 @@ module InboundPacketHandler
27
28
 
28
29
  end
29
30
 
30
- end; end; end
31
+ end; end; end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  module Rex
4
5
  module Post
@@ -44,7 +45,7 @@ module ObjectAliasesContainer
44
45
 
45
46
  items << current_path
46
47
 
47
- items.concat(dump_alias_tree(current_path,
48
+ items.concat(dump_alias_tree(current_path,
48
49
  current.aliases[x]))
49
50
  }
50
51
  end
@@ -60,19 +61,19 @@ end
60
61
 
61
62
  ###
62
63
  #
63
- # Generic object aliases from a class instance referenced symbol to an
64
+ # Generic object aliases from a class instance referenced symbol to an
64
65
  # associated object of an arbitrary type
65
66
  #
66
67
  ###
67
68
  class ObjectAliases
68
69
  include Rex::Post::Meterpreter::ObjectAliasesContainer
69
-
70
+
70
71
  ##
71
72
  #
72
73
  # Constructor
73
74
  #
74
75
  ##
75
-
76
+
76
77
  # An instance
77
78
  def initialize(aliases = {})
78
79
  initialize_aliases(aliases)
@@ -80,4 +81,4 @@ class ObjectAliases
80
81
  end
81
82
 
82
83
 
83
- end; end; end
84
+ end; end; end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  module Rex
4
5
  module Post
@@ -54,6 +55,7 @@ TLV_TYPE_REQUEST_ID = TLV_META_TYPE_STRING | 2
54
55
  TLV_TYPE_EXCEPTION = TLV_META_TYPE_GROUP | 3
55
56
  TLV_TYPE_RESULT = TLV_META_TYPE_UINT | 4
56
57
 
58
+
57
59
  TLV_TYPE_STRING = TLV_META_TYPE_STRING | 10
58
60
  TLV_TYPE_UINT = TLV_META_TYPE_UINT | 11
59
61
  TLV_TYPE_BOOL = TLV_META_TYPE_BOOL | 12
@@ -129,13 +131,14 @@ class Tlv
129
131
 
130
132
  def inspect
131
133
  utype = type ^ TLV_META_TYPE_COMPRESSED
134
+ group = false
132
135
  meta = case (utype & TLV_META_MASK)
133
136
  when TLV_META_TYPE_STRING; "STRING"
134
137
  when TLV_META_TYPE_UINT; "INT"
135
138
  when TLV_META_TYPE_RAW; "RAW"
136
139
  when TLV_META_TYPE_BOOL; "BOOL"
137
140
  when TLV_META_TYPE_QWORD; "QWORD"
138
- when TLV_META_TYPE_GROUP; "GROUP"
141
+ when TLV_META_TYPE_GROUP; group=true; "GROUP"
139
142
  when TLV_META_TYPE_COMPLEX; "COMPLEX"
140
143
  else; 'unknown-meta-type'
141
144
  end
@@ -175,16 +178,33 @@ class Tlv
175
178
  when TLV_TYPE_MIGRATE_PAYLOAD; "MIGRATE-PAYLOAD"
176
179
  when TLV_TYPE_MIGRATE_ARCH; "MIGRATE-ARCH"
177
180
 
178
- # Extension classes don't exist yet, so can't use their constants
179
- # here.
180
- #when Extensions::Stdapi::TLV_TYPE_IP; 'ip-address'
181
+ #when Extensions::Stdapi::TLV_TYPE_NETWORK_INTERFACE; 'network-interface'
182
+ #when Extensions::Stdapi::TLV_TYPE_IP; 'ip-address'
183
+ #when Extensions::Stdapi::TLV_TYPE_NETMASK; 'netmask'
184
+ #when Extensions::Stdapi::TLV_TYPE_MAC_ADDRESS; 'mac-address'
185
+ #when Extensions::Stdapi::TLV_TYPE_MAC_NAME; 'interface-name'
186
+ #when Extensions::Stdapi::TLV_TYPE_IP6_SCOPE; 'address-scope'
187
+ #when Extensions::Stdapi::TLV_TYPE_INTERFACE_MTU; 'interface-mtu'
188
+ #when Extensions::Stdapi::TLV_TYPE_INTERFACE_FLAGS; 'interface-flags'
189
+ #when Extensions::Stdapi::TLV_TYPE_INTERFACE_INDEX; 'interface-index'
190
+
181
191
  else; "unknown-#{type}"
182
192
  end
183
193
  val = value.inspect
184
194
  if val.length > 50
185
195
  val = val[0,50] + ' ..."'
186
196
  end
187
- "#<#{self.class} type=#{stype} #{self.class.to_s =~ /Packet/ ? "tlvs=#{@tlvs.inspect}" : "meta=#{meta} value=#{val}"} >"
197
+ group ||= (self.class.to_s =~ /Packet/)
198
+ if group
199
+ tlvs_inspect = "tlvs=[\n"
200
+ @tlvs.each { |t|
201
+ tlvs_inspect << " #{t.inspect}\n"
202
+ }
203
+ tlvs_inspect << "]"
204
+ else
205
+ tlvs_inspect = "meta=#{meta.ljust 10} value=#{val}"
206
+ end
207
+ "#<#{self.class} type=#{stype.ljust 15} #{tlvs_inspect}>"
188
208
  end
189
209
 
190
210
  ##
@@ -366,7 +386,7 @@ class GroupTlv < Tlv
366
386
  # Synonym for each.
367
387
  #
368
388
  def each_tlv(type = TLV_TYPE_ANY, &block)
369
- each(type, block)
389
+ each(type, &block)
370
390
  end
371
391
 
372
392
  #
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  require 'rex/post/meterpreter/packet_response_waiter'
4
5
  require 'rex/logging'
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  module Rex
4
5
  module Post
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  require 'timeout'
4
5
  require 'thread'
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/ui'
2
3
  require 'rex/post/meterpreter'
3
4
  require 'rex/logging'
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/logging'
2
3
 
3
4
  module Rex
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
  require 'rex/parser/arguments'
3
4
 
@@ -43,11 +44,9 @@ class Console::CommandDispatcher::Core
43
44
  "close" => "Closes a channel",
44
45
  "channel" => "Displays information about active channels",
45
46
  "exit" => "Terminate the meterpreter session",
46
- "detach" => "Detach the meterpreter session (for http/https)",
47
47
  "help" => "Help menu",
48
48
  "interact" => "Interacts with a channel",
49
49
  "irb" => "Drop into irb scripting mode",
50
- "migrate" => "Migrate the server to another process",
51
50
  "use" => "Deprecated alias for 'load'",
52
51
  "load" => "Load one or more meterpreter extensions",
53
52
  "quit" => "Terminate the meterpreter session",
@@ -61,6 +60,18 @@ class Console::CommandDispatcher::Core
61
60
  "enable_unicode_encoding" => "Enables encoding of unicode strings",
62
61
  "disable_unicode_encoding" => "Disables encoding of unicode strings"
63
62
  }
63
+
64
+ if client.passive_service
65
+ c["detach"] = "Detach the meterpreter session (for http/https)"
66
+ end
67
+ # The only meterp that implements this right now is native Windows and for
68
+ # whatever reason it is not adding core_migrate to its list of commands.
69
+ # Use a dumb platform til it gets sorted.
70
+ #if client.commands.include? "core_migrate"
71
+ if client.platform =~ /win/
72
+ c["migrate"] = "Migrate the server to another process"
73
+ end
74
+
64
75
  if (msf_loaded?)
65
76
  c["info"] = "Displays information about a Post module"
66
77
  end
@@ -83,6 +94,7 @@ class Console::CommandDispatcher::Core
83
94
  end
84
95
 
85
96
  def cmd_background
97
+ print_status "Backgrounding session #{client.name}..."
86
98
  client.interacting = false
87
99
  end
88
100
 
@@ -91,6 +103,7 @@ class Console::CommandDispatcher::Core
91
103
  #
92
104
  @@channel_opts = Rex::Parser::Arguments.new(
93
105
  "-c" => [ true, "Close the given channel." ],
106
+ "-k" => [ true, "Close the given channel." ],
94
107
  "-i" => [ true, "Interact with the given channel." ],
95
108
  "-l" => [ false, "List active channels." ],
96
109
  "-r" => [ true, "Read from the given channel." ],
@@ -108,7 +121,7 @@ class Console::CommandDispatcher::Core
108
121
  # Performs operations on the supplied channel.
109
122
  #
110
123
  def cmd_channel(*args)
111
- if args.include?("-h") or args.include?("--help")
124
+ if args.empty? or args.include?("-h") or args.include?("--help")
112
125
  cmd_channel_help
113
126
  return
114
127
  end
@@ -122,7 +135,7 @@ class Console::CommandDispatcher::Core
122
135
  case opt
123
136
  when "-l"
124
137
  mode = :list
125
- when "-c"
138
+ when "-c", "-k"
126
139
  mode = :close
127
140
  chan = val
128
141
  when "-i"
@@ -179,14 +192,35 @@ class Console::CommandDispatcher::Core
179
192
  end
180
193
  end
181
194
 
195
+ def cmd_channel_tabs(str, words)
196
+ case words.length
197
+ when 1
198
+ @@channel_opts.fmt.keys
199
+ when 2
200
+ case words[1]
201
+ when "-k", "-c", "-i", "-r", "-w"
202
+ tab_complete_channels
203
+ else
204
+ []
205
+ end
206
+ else
207
+ []
208
+ end
209
+ end
210
+
211
+ def cmd_close_help
212
+ print_line "Usage: close <channel_id>"
213
+ print_line
214
+ print_line "Closes the supplied channel."
215
+ print_line
216
+ end
217
+
182
218
  #
183
219
  # Closes a supplied channel.
184
220
  #
185
221
  def cmd_close(*args)
186
222
  if (args.length == 0)
187
- print_line(
188
- "Usage: close channel_id\n\n" +
189
- "Closes the supplied channel.")
223
+ cmd_close_help
190
224
  return true
191
225
  end
192
226
 
@@ -203,6 +237,12 @@ class Console::CommandDispatcher::Core
203
237
  end
204
238
  end
205
239
 
240
+ def cmd_close_tabs(str, words)
241
+ return [] if words.length > 1
242
+
243
+ return tab_complete_channels
244
+ end
245
+
206
246
  #
207
247
  # Terminates the meterpreter session.
208
248
  #
@@ -215,6 +255,17 @@ class Console::CommandDispatcher::Core
215
255
 
216
256
  alias cmd_quit cmd_exit
217
257
 
258
+ def cmd_detach_help
259
+ print_line "Detach from the victim. Only possible for non-stream sessions (http/https)"
260
+ print_line
261
+ print_line "The victim will continue to attempt to call back to the handler until it"
262
+ print_line "successfully connects (which may happen immediately if you have a handler"
263
+ print_line "running in the background), or reaches its expiration."
264
+ print_line
265
+ print_line "This session may #{client.passive_service ? "" : "NOT"} be detached."
266
+ print_line
267
+ end
268
+
218
269
  #
219
270
  # Disconnects the session
220
271
  #
@@ -227,14 +278,19 @@ class Console::CommandDispatcher::Core
227
278
  shell.stop
228
279
  end
229
280
 
281
+ def cmd_interact_help
282
+ print_line "Usage: interact <channel_id>"
283
+ print_line
284
+ print_line "Interacts with the supplied channel."
285
+ print_line
286
+ end
287
+
230
288
  #
231
289
  # Interacts with a channel.
232
290
  #
233
291
  def cmd_interact(*args)
234
292
  if (args.length == 0)
235
- print_line(
236
- "Usage: interact channel_id\n\n" +
237
- "Interacts with the supplied channel.")
293
+ cmd_info_help
238
294
  return true
239
295
  end
240
296
 
@@ -250,6 +306,8 @@ class Console::CommandDispatcher::Core
250
306
  end
251
307
  end
252
308
 
309
+ alias cmd_interact_tabs cmd_close_tabs
310
+
253
311
  #
254
312
  # Runs the IRB scripting shell
255
313
  #
@@ -260,15 +318,20 @@ class Console::CommandDispatcher::Core
260
318
  Rex::Ui::Text::IrbShell.new(binding).run
261
319
  end
262
320
 
321
+ def cmd_migrate_help
322
+ print_line "Usage: migrate <pid>"
323
+ print_line
324
+ print_line "Migrates the server instance to another process."
325
+ print_line "NOTE: Any open channels or other dynamic state will be lost."
326
+ print_line
327
+ end
328
+
263
329
  #
264
330
  # Migrates the server to the supplied process identifier.
265
331
  #
266
332
  def cmd_migrate(*args)
267
333
  if (args.length == 0)
268
- print_line(
269
- "Usage: migrate pid\n\n" +
270
- "Migrates the server instance to another process.\n" +
271
- "Note: Any open channels or other dynamic state will be lost.")
334
+ cmd_migrate_help
272
335
  return true
273
336
  end
274
337
 
@@ -370,14 +433,19 @@ class Console::CommandDispatcher::Core
370
433
  alias cmd_use_help cmd_load_help
371
434
  alias cmd_use_tabs cmd_load_tabs
372
435
 
436
+ def cmd_read_help
437
+ print_line "Usage: read <channel_id> [length]"
438
+ print_line
439
+ print_line "Reads data from the supplied channel."
440
+ print_line
441
+ end
442
+
373
443
  #
374
444
  # Reads data from a channel.
375
445
  #
376
446
  def cmd_read(*args)
377
447
  if (args.length == 0)
378
- print_line(
379
- "Usage: read channel_id [length]\n\n" +
380
- "Reads data from the supplied channel.")
448
+ cmd_read_help
381
449
  return true
382
450
  end
383
451
 
@@ -401,6 +469,8 @@ class Console::CommandDispatcher::Core
401
469
  return true
402
470
  end
403
471
 
472
+ alias cmd_read_tabs cmd_close_tabs
473
+
404
474
  def cmd_run_help
405
475
  print_line "Usage: run <script> [arguments]"
406
476
  print_line
@@ -668,17 +738,15 @@ class Console::CommandDispatcher::Core
668
738
  return true
669
739
  end
670
740
 
671
- def cmd_resource_tabs(str, words)
672
- return [] if words.length > 1
673
-
674
- tab_complete_filenames(str, words)
741
+ def cmd_resource_help
742
+ print_line "Usage: resource <path1> [path2 ...]"
743
+ print_line
744
+ print_line "Run the commands stored in the supplied files."
745
+ print_line
675
746
  end
676
747
 
677
748
  def cmd_resource(*args)
678
749
  if args.empty?
679
- print(
680
- "Usage: resource path1 path2" +
681
- "Run the commands stored in the supplied files.\n")
682
750
  return false
683
751
  end
684
752
  args.each do |glob|
@@ -709,6 +777,12 @@ class Console::CommandDispatcher::Core
709
777
  end
710
778
  end
711
779
 
780
+ def cmd_resource_tabs(str, words)
781
+ return [] if words.length > 1
782
+
783
+ tab_complete_filenames(str, words)
784
+ end
785
+
712
786
  def cmd_enable_unicode_encoding
713
787
  client.encode_unicode = true
714
788
  print_status("Unicode encoding is enabled")
@@ -782,12 +856,9 @@ protected
782
856
  end
783
857
 
784
858
  def tab_complete_postmods
785
- # XXX This might get slow with a large number of post
786
- # modules. The proper solution is probably to implement a
787
- # Module::Post#session_compatible?(session_object_or_int) method
788
859
  tabs = client.framework.modules.post.map { |name,klass|
789
860
  mod = klass.new
790
- if mod.compatible_sessions.include?(client.sid)
861
+ if mod.session_compatible?(client)
791
862
  mod.fullname.dup
792
863
  else
793
864
  nil
@@ -798,6 +869,10 @@ protected
798
869
  tabs.compact
799
870
  end
800
871
 
872
+ def tab_complete_channels
873
+ client.channels.keys.map { |k| k.to_s }
874
+ end
875
+
801
876
  end
802
877
 
803
878
  end