librex 0.0.65 → 0.0.66

Sign up to get free protection for your applications and to get access to all the features.
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,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -18,7 +19,7 @@ class Console::CommandDispatcher::Priv
18
19
 
19
20
  Klass = Console::CommandDispatcher::Priv
20
21
 
21
- Dispatchers =
22
+ Dispatchers =
22
23
  [
23
24
  Klass::Elevate,
24
25
  Klass::Passwd,
@@ -58,4 +59,4 @@ end
58
59
  end
59
60
  end
60
61
  end
61
- end
62
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -15,7 +16,7 @@ class Console::CommandDispatcher::Priv::Elevate
15
16
  Klass = Console::CommandDispatcher::Priv::Elevate
16
17
 
17
18
  include Console::CommandDispatcher
18
-
19
+
19
20
  ELEVATE_TECHNIQUE_NONE = -1
20
21
  ELEVATE_TECHNIQUE_ANY = 0
21
22
  ELEVATE_TECHNIQUE_SERVICE_NAMEDPIPE = 1
@@ -23,7 +24,7 @@ class Console::CommandDispatcher::Priv::Elevate
23
24
  ELEVATE_TECHNIQUE_SERVICE_TOKENDUP = 3
24
25
  ELEVATE_TECHNIQUE_VULN_KITRAP0D = 4
25
26
 
26
- ELEVATE_TECHNIQUE_DESCRIPTION = [ "All techniques available",
27
+ ELEVATE_TECHNIQUE_DESCRIPTION = [ "All techniques available",
27
28
  "Service - Named Pipe Impersonation (In Memory/Admin)",
28
29
  "Service - Named Pipe Impersonation (Dropper/Admin)",
29
30
  "Service - Token Duplication (In Memory/Admin)",
@@ -44,23 +45,23 @@ class Console::CommandDispatcher::Priv::Elevate
44
45
  def name
45
46
  "Priv: Elevate"
46
47
  end
47
-
48
+
48
49
 
49
50
  #
50
51
  # Attempt to elevate the meterpreter to that of local system.
51
52
  #
52
53
  def cmd_getsystem( *args )
53
-
54
+
54
55
  technique = ELEVATE_TECHNIQUE_ANY
55
-
56
+
56
57
  desc = ""
57
58
  ELEVATE_TECHNIQUE_DESCRIPTION.each_index { |i| desc += "\n\t\t#{i} : #{ELEVATE_TECHNIQUE_DESCRIPTION[i]}" }
58
-
59
+
59
60
  getsystem_opts = Rex::Parser::Arguments.new(
60
61
  "-h" => [ false, "Help Banner." ],
61
62
  "-t" => [ true, "The technique to use. (Default to \'#{technique}\')." + desc ]
62
63
  )
63
-
64
+
64
65
  getsystem_opts.parse(args) { | opt, idx, val |
65
66
  case opt
66
67
  when "-h"
@@ -77,16 +78,16 @@ class Console::CommandDispatcher::Priv::Elevate
77
78
  print_error( "Technique '#{technique}' is out of range." );
78
79
  return false;
79
80
  end
80
-
81
+
81
82
  result = client.priv.getsystem( technique )
82
-
83
+
83
84
  # got system?
84
85
  if result[0]
85
86
  print_line( "...got system (via technique #{result[1]})." );
86
87
  else
87
88
  print_line( "...failed to get system." );
88
89
  end
89
-
90
+
90
91
  return result
91
92
  end
92
93
 
@@ -95,4 +96,4 @@ end
95
96
  end
96
97
  end
97
98
  end
98
- end
99
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -48,4 +49,4 @@ end
48
49
  end
49
50
  end
50
51
  end
51
- end
52
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -104,7 +105,7 @@ class Console::CommandDispatcher::Priv::Timestomp
104
105
  # If any one of the four times were specified, change them.
105
106
  if (modified or accessed or creation or emodified)
106
107
  print_status("Setting specific MACE attributes on #{file_path}")
107
- client.priv.fs.set_file_mace(file_path, modified, accessed,
108
+ client.priv.fs.set_file_mace(file_path, modified, accessed,
108
109
  creation, emodified)
109
110
  end
110
111
  end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -33,28 +34,29 @@ class Console::CommandDispatcher::Sniffer
33
34
  "sniffer_stop" => "Stop packet capture on a specific interface",
34
35
  "sniffer_stats" => "View statistics of an active capture",
35
36
  "sniffer_dump" => "Retrieve captured packet data to PCAP file",
37
+ "sniffer_release" => "Free captured packets on a specific interface instead of downloading them",
36
38
  }
37
39
  end
38
40
 
39
41
 
40
42
  def cmd_sniffer_interfaces(*args)
41
-
43
+
42
44
  ifaces = client.sniffer.interfaces()
43
45
 
44
46
  print_line()
45
47
 
46
48
  ifaces.each do |i|
47
- print_line(sprintf("%d - '%s' ( type:%d mtu:%d usable:%s dhcp:%s wifi:%s )",
49
+ print_line(sprintf("%d - '%s' ( type:%d mtu:%d usable:%s dhcp:%s wifi:%s )",
48
50
  i['idx'], i['description'],
49
51
  i['type'], i['mtu'], i['usable'], i['dhcp'], i['wireless'])
50
52
  )
51
53
  end
52
-
54
+
53
55
  print_line()
54
56
 
55
57
  return true
56
58
  end
57
-
59
+
58
60
  def cmd_sniffer_start(*args)
59
61
  intf = args.shift.to_i
60
62
  if (intf == 0)
@@ -63,87 +65,102 @@ class Console::CommandDispatcher::Sniffer
63
65
  end
64
66
  maxp = (args.shift || 50000).to_i
65
67
  bpf = args.join(" ")
66
-
68
+
67
69
  client.sniffer.capture_start(intf, maxp, bpf)
68
70
  print_status("Capture started on interface #{intf} (#{maxp} packet buffer)")
69
71
  return true
70
72
  end
71
-
73
+
72
74
  def cmd_sniffer_stop(*args)
73
- intf = args[0].to_i
75
+ intf = args[0].to_i
74
76
  if (intf == 0)
75
77
  print_error("Usage: sniffer_stop [interface-id]")
76
78
  return
77
79
  end
78
-
79
- client.sniffer.capture_stop(intf)
80
+
81
+ res = client.sniffer.capture_stop(intf)
80
82
  print_status("Capture stopped on interface #{intf}")
83
+ print_status("There are #{res[:packets]} packets (#{res[:bytes]} bytes) remaining")
84
+ print_status("Download or release them using 'sniffer_dump' or 'sniffer_release'")
81
85
  return true
82
86
  end
83
-
87
+
84
88
  def cmd_sniffer_stats(*args)
85
- intf = args[0].to_i
89
+ intf = args[0].to_i
86
90
  if (intf == 0)
87
91
  print_error("Usage: sniffer_stats [interface-id]")
88
92
  return
89
93
  end
90
-
94
+
91
95
  stats = client.sniffer.capture_stats(intf)
92
96
  print_status("Capture statistics for interface #{intf}")
93
97
  stats.each_key do |k|
94
98
  print_line("\t#{k}: #{stats[k]}")
95
99
  end
96
-
97
- return true
100
+
101
+ return true
102
+ end
103
+
104
+ def cmd_sniffer_release(*args)
105
+ intf = args[0].to_i
106
+ if (intf == 0)
107
+ print_error("Usage: sniffer_release [interface-id]")
108
+ return
109
+ end
110
+
111
+ res = client.sniffer.capture_release(intf)
112
+ print_status("Flushed #{res[:packets]} packets (#{res[:bytes]} bytes) from interface #{intf}")
113
+
114
+ return true
98
115
  end
99
-
116
+
100
117
  def cmd_sniffer_dump(*args)
101
- intf = args[0].to_i
118
+ intf = args[0].to_i
102
119
  if (intf == 0 or not args[1])
103
120
  print_error("Usage: sniffer_dump [interface-id] [pcap-file]")
104
121
  return
105
122
  end
106
-
123
+
107
124
  path_cap = args[1]
108
125
  path_raw = args[1] + '.raw'
109
-
126
+
110
127
  fd = ::File.new(path_raw, 'wb+')
111
-
128
+
112
129
  print_status("Flushing packet capture buffer for interface #{intf}...")
113
130
  res = client.sniffer.capture_dump(intf)
114
131
  print_status("Flushed #{res[:packets]} packets (#{res[:bytes]} bytes)")
115
-
132
+
116
133
  bytes_all = res[:bytes] || 0
117
134
  bytes_got = 0
118
135
  bytes_pct = 0
119
-
136
+ linktype = res[:linktype]
120
137
  while (bytes_all > 0)
121
138
  res = client.sniffer.capture_dump_read(intf,1024*512)
122
-
139
+
123
140
  bytes_got += res[:bytes]
124
141
 
125
142
  pct = ((bytes_got.to_f / bytes_all.to_f) * 100).to_i
126
143
  if(pct > bytes_pct)
127
144
  print_status("Downloaded #{"%.3d" % pct}% (#{bytes_got}/#{bytes_all})...")
128
145
  bytes_pct = pct
129
- end
146
+ end
130
147
  break if res[:bytes] == 0
131
148
  fd.write(res[:data])
132
149
  end
133
-
150
+
134
151
  fd.close
135
-
152
+
136
153
  print_status("Download completed, converting to PCAP...")
137
-
154
+
138
155
  fd = nil
139
156
  if(::File.exist?(path_cap))
140
157
  fd = ::File.new(path_cap, 'ab+')
141
158
  else
142
159
  fd = ::File.new(path_cap, 'wb+')
143
- fd.write([0xa1b2c3d4, 2, 4, 0, 0, 65536, 1].pack('NnnNNNN'))
144
- end
160
+ fd.write([0xa1b2c3d4, 2, 4, 0, 0, 65536, linktype].pack('NnnNNNN'))
161
+ end
145
162
 
146
- pkts = {}
163
+ pkts = {}
147
164
  od = ::File.new(path_raw, 'rb')
148
165
 
149
166
 
@@ -151,27 +168,27 @@ class Console::CommandDispatcher::Sniffer
151
168
  while(true)
152
169
  buf = od.read(20)
153
170
  break if not buf
154
-
171
+
155
172
  idh,idl,thi,tlo,len = buf.unpack('N5')
156
173
  break if not len
157
- if(len > 10000)
174
+ if(len > 10000)
158
175
  print_error("Corrupted packet data (length:#{len})")
159
176
  break
160
177
  end
161
-
178
+
162
179
  pkt_id = (idh << 32) +idl
163
180
  pkt_ts = Rex::Proto::SMB::Utils.time_smb_to_unix(thi,tlo)
164
181
  pkt = od.read(len)
165
-
182
+
166
183
  fd.write([pkt_ts,0,len,len].pack('NNNN')+pkt)
167
184
  end
168
185
  od.close
169
186
  fd.close
170
-
187
+
171
188
  ::File.unlink(path_raw)
172
189
  print_status("PCAP file written to #{path_cap}")
173
- end
174
-
190
+ end
191
+
175
192
  #
176
193
  # Name for this dispatcher
177
194
  # sni
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -20,7 +21,7 @@ class Console::CommandDispatcher::Stdapi
20
21
 
21
22
  Klass = Console::CommandDispatcher::Stdapi
22
23
 
23
- Dispatchers =
24
+ Dispatchers =
24
25
  [
25
26
  Klass::Fs,
26
27
  Klass::Net,
@@ -62,4 +63,4 @@ end
62
63
  end
63
64
  end
64
65
  end
65
- end
66
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'tempfile'
2
3
  require 'rex/post/meterpreter'
3
4
 
@@ -34,24 +35,56 @@ class Console::CommandDispatcher::Stdapi::Fs
34
35
  # List of supported commands.
35
36
  #
36
37
  def commands
37
- {
38
+ all = {
38
39
  "cat" => "Read the contents of a file to the screen",
39
40
  "cd" => "Change directory",
41
+ "del" => "Delete the specified file",
40
42
  "download" => "Download a file or directory",
41
43
  "edit" => "Edit a file",
44
+ "getlwd" => "Print local working directory",
42
45
  "getwd" => "Print working directory",
46
+ "lcd" => "Change local working directory",
47
+ "lpwd" => "Print local working directory",
43
48
  "ls" => "List files",
44
49
  "mkdir" => "Make directory",
45
50
  "pwd" => "Print working directory",
51
+ "rm" => "Delete the specified file",
46
52
  "rmdir" => "Remove directory",
53
+ "search" => "Search for files",
47
54
  "upload" => "Upload a file or directory",
48
- "lcd" => "Change local working directory",
49
- "getlwd" => "Print local working directory",
50
- "lpwd" => "Print local working directory",
51
- "rm" => "Delete the specified file",
52
- "del" => "Delete the specified file",
53
- "search" => "Search for files"
54
55
  }
56
+
57
+ reqs = {
58
+ "cat" => [ ],
59
+ "cd" => [ "stdapi_fs_chdir" ],
60
+ "del" => [ "stdapi_fs_rm" ],
61
+ "download" => [ ],
62
+ "edit" => [ ],
63
+ "getlwd" => [ ],
64
+ "getwd" => [ "stdapi_fs_getwd" ],
65
+ "lcd" => [ ],
66
+ "lpwd" => [ ],
67
+ "ls" => [ "stdapi_fs_stat", "stdapi_fs_ls" ],
68
+ "mkdir" => [ "stdapi_fs_mkdir" ],
69
+ "pwd" => [ "stdapi_fs_getwd" ],
70
+ "rmdir" => [ "stdapi_fs_delete_dir" ],
71
+ "rm" => [ "stdapi_fs_delete_file" ],
72
+ "search" => [ "stdapi_fs_search" ],
73
+ "upload" => [ ],
74
+ }
75
+
76
+ all.delete_if do |cmd, desc|
77
+ del = false
78
+ reqs[cmd].each do |req|
79
+ next if client.commands.include? req
80
+ del = true
81
+ break
82
+ end
83
+
84
+ del
85
+ end
86
+
87
+ all
55
88
  end
56
89
 
57
90
  #
@@ -65,18 +98,18 @@ class Console::CommandDispatcher::Stdapi::Fs
65
98
  # Search for files.
66
99
  #
67
100
  def cmd_search( *args )
68
-
101
+
69
102
  root = nil
70
103
  glob = nil
71
104
  recurse = true
72
-
105
+
73
106
  opts = Rex::Parser::Arguments.new(
74
107
  "-h" => [ false, "Help Banner." ],
75
108
  "-d" => [ true, "The directory/drive to begin searching from. Leave empty to search all drives. (Default: #{root})" ],
76
109
  "-f" => [ true, "The file pattern glob to search for. (e.g. *secret*.doc?)" ],
77
110
  "-r" => [ true, "Recursivly search sub directories. (Default: #{recurse})" ]
78
111
  )
79
-
112
+
80
113
  opts.parse(args) { | opt, idx, val |
81
114
  case opt
82
115
  when "-h"
@@ -92,14 +125,14 @@ class Console::CommandDispatcher::Stdapi::Fs
92
125
  recurse = false if( val =~ /^(f|n|0)/i )
93
126
  end
94
127
  }
95
-
128
+
96
129
  if( not glob )
97
130
  print_error( "You must specify a valid file glob to search for, e.g. >search -f *.doc" )
98
131
  return
99
132
  end
100
-
133
+
101
134
  files = client.fs.file.search( root, glob, recurse )
102
-
135
+
103
136
  if( not files.empty? )
104
137
  print_line( "Found #{files.length} result#{ files.length > 1 ? 's' : '' }..." )
105
138
  files.each do | file |
@@ -112,9 +145,9 @@ class Console::CommandDispatcher::Stdapi::Fs
112
145
  else
113
146
  print_line( "No files matching your search were found." )
114
147
  end
115
-
148
+
116
149
  end
117
-
150
+
118
151
  #
119
152
  # Reads the contents of a file and prints them to the screen.
120
153
  #
@@ -124,13 +157,17 @@ class Console::CommandDispatcher::Stdapi::Fs
124
157
  return true
125
158
  end
126
159
 
127
- fd = client.fs.file.new(args[0], "rb")
160
+ if (client.fs.file.stat(args[0]).directory?)
161
+ print_error("#{args[0]} is a directory")
162
+ else
163
+ fd = client.fs.file.new(args[0], "rb")
128
164
 
129
- until fd.eof?
130
- print(fd.read)
131
- end
165
+ until fd.eof?
166
+ print(fd.read)
167
+ end
132
168
 
133
- fd.close
169
+ fd.close
170
+ end
134
171
 
135
172
  true
136
173
  end
@@ -165,7 +202,7 @@ class Console::CommandDispatcher::Stdapi::Fs
165
202
 
166
203
  return true
167
204
  end
168
-
205
+
169
206
  #
170
207
  # Delete the specified file.
171
208
  #
@@ -179,7 +216,7 @@ class Console::CommandDispatcher::Stdapi::Fs
179
216
 
180
217
  return true
181
218
  end
182
-
219
+
183
220
  alias :cmd_del :cmd_rm
184
221
 
185
222
  def cmd_download_help
@@ -188,7 +225,7 @@ class Console::CommandDispatcher::Stdapi::Fs
188
225
  print_line "Downloads remote files and directories to the local machine."
189
226
  print_line @@download_opts.usage
190
227
  end
191
-
228
+
192
229
  #
193
230
  # Downloads a file or directory from the remote machine to the local
194
231
  # machine.
@@ -246,7 +283,7 @@ class Console::CommandDispatcher::Stdapi::Fs
246
283
  }
247
284
  end
248
285
  }
249
-
286
+
250
287
  return true
251
288
  end
252
289
 
@@ -307,6 +344,7 @@ class Console::CommandDispatcher::Stdapi::Fs
307
344
  path = args[0] || client.fs.dir.getwd
308
345
  tbl = Rex::Ui::Text::Table.new(
309
346
  'Header' => "Listing: #{path}",
347
+ 'SortIndex' => 4,
310
348
  'Columns' =>
311
349
  [
312
350
  'Mode',
@@ -317,26 +355,31 @@ class Console::CommandDispatcher::Stdapi::Fs
317
355
  ])
318
356
 
319
357
  items = 0
320
-
321
- # Enumerate each item...
322
- client.fs.dir.entries_with_info(path).sort { |a,b| a['FileName'] <=> b['FileName'] }.each { |p|
323
-
324
- tbl <<
325
- [
326
- p['StatBuf'] ? p['StatBuf'].prettymode : '',
327
- p['StatBuf'] ? p['StatBuf'].size : '',
328
- p['StatBuf'] ? p['StatBuf'].ftype[0,3] : '',
329
- p['StatBuf'] ? p['StatBuf'].mtime : '',
330
- p['FileName'] || 'unknown'
331
- ]
332
-
333
- items += 1
334
- }
335
-
336
- if (items > 0)
337
- print("\n" + tbl.to_s + "\n")
358
+ stat = client.fs.file.stat(path)
359
+ if stat.directory?
360
+ # Enumerate each item...
361
+ # No need to sort as Table will do it for us
362
+ client.fs.dir.entries_with_info(path).each { |p|
363
+
364
+ tbl <<
365
+ [
366
+ p['StatBuf'] ? p['StatBuf'].prettymode : '',
367
+ p['StatBuf'] ? p['StatBuf'].size : '',
368
+ p['StatBuf'] ? p['StatBuf'].ftype[0,3] : '',
369
+ p['StatBuf'] ? p['StatBuf'].mtime : '',
370
+ p['FileName'] || 'unknown'
371
+ ]
372
+
373
+ items += 1
374
+ }
375
+
376
+ if (items > 0)
377
+ print("\n" + tbl.to_s + "\n")
378
+ else
379
+ print_line("No entries exist in #{path}")
380
+ end
338
381
  else
339
- print_line("No entries exist in #{path}")
382
+ print_line("#{stat.prettymode} #{stat.size} #{stat.ftype[0,3]} #{stat.mtime} #{path}")
340
383
  end
341
384
 
342
385
  return true
@@ -444,7 +487,7 @@ class Console::CommandDispatcher::Stdapi::Fs
444
487
  }
445
488
  end
446
489
  }
447
-
490
+
448
491
  return true
449
492
  end
450
493