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
  require 'rex/service_manager'
3
4
 
@@ -54,11 +55,39 @@ class Console::CommandDispatcher::Stdapi::Net
54
55
  # List of supported commands.
55
56
  #
56
57
  def commands
57
- {
58
+ all = {
58
59
  "ipconfig" => "Display interfaces",
60
+ "ifconfig" => "Display interfaces",
59
61
  "route" => "View and modify the routing table",
60
62
  "portfwd" => "Forward a local port to a remote service",
61
63
  }
64
+ reqs = {
65
+ "ipconfig" => [ "stdapi_net_config_get_interfaces" ],
66
+ "ifconfig" => [ "stdapi_net_config_get_interfaces" ],
67
+ "route" => [
68
+ # Also uses these, but we don't want to be unable to list them
69
+ # just because we can't alter them.
70
+ #"stdapi_net_config_add_route",
71
+ #"stdapi_net_config_remove_route",
72
+ "stdapi_net_config_get_routes"
73
+ ],
74
+ # Only creates tcp channels, which is something whose availability
75
+ # we can't check directly at the moment.
76
+ "portfwd" => [ ],
77
+ }
78
+
79
+ all.delete_if do |cmd, desc|
80
+ del = false
81
+ reqs[cmd].each do |req|
82
+ next if client.commands.include? req
83
+ del = true
84
+ break
85
+ end
86
+
87
+ del
88
+ end
89
+
90
+ all
62
91
  end
63
92
 
64
93
  #
@@ -77,12 +106,14 @@ class Console::CommandDispatcher::Stdapi::Net
77
106
  if (ifaces.length == 0)
78
107
  print_line("No interfaces were found.")
79
108
  else
80
- client.net.config.each_interface { |iface|
109
+ ifaces.sort{|a,b| a.index <=> b.index}.each do |iface|
81
110
  print("\n" + iface.pretty + "\n")
82
- }
111
+ end
83
112
  end
84
113
  end
85
114
 
115
+ alias :cmd_ifconfig :cmd_ipconfig
116
+
86
117
  #
87
118
  # Displays or modifies the routing table on the remote machine.
88
119
  #
@@ -114,25 +145,56 @@ class Console::CommandDispatcher::Stdapi::Net
114
145
  when "list"
115
146
  routes = client.net.config.routes
116
147
 
117
- if (routes.length == 0)
118
- print_line("No routes were found.")
148
+ # IPv4
149
+ tbl = Rex::Ui::Text::Table.new(
150
+ 'Header' => "IPv4 network routes",
151
+ 'Indent' => 4,
152
+ 'Columns' =>
153
+ [
154
+ "Subnet",
155
+ "Netmask",
156
+ "Gateway",
157
+ "Metric",
158
+ "Interface"
159
+ ])
160
+
161
+ routes.select {|route|
162
+ Rex::Socket.is_ipv4?(route.netmask)
163
+ }.each { |route|
164
+ tbl << [ route.subnet, route.netmask, route.gateway, route.metric, route.interface ]
165
+ }
166
+
167
+ if tbl.rows.length > 0
168
+ print("\n" + tbl.to_s + "\n")
119
169
  else
120
- tbl = Rex::Ui::Text::Table.new(
121
- 'Header' => "Network routes",
122
- 'Indent' => 4,
123
- 'Columns' =>
124
- [
125
- "Subnet",
126
- "Netmask",
127
- "Gateway"
128
- ])
129
-
130
- routes.each { |route|
131
- tbl << [ route.subnet, route.netmask, route.gateway ]
132
- }
170
+ print_line("No IPv4 routes were found.")
171
+ end
133
172
 
173
+ # IPv6
174
+ tbl = Rex::Ui::Text::Table.new(
175
+ 'Header' => "IPv6 network routes",
176
+ 'Indent' => 4,
177
+ 'Columns' =>
178
+ [
179
+ "Subnet",
180
+ "Netmask",
181
+ "Gateway",
182
+ "Metric",
183
+ "Interface"
184
+ ])
185
+
186
+ routes.select {|route|
187
+ Rex::Socket.is_ipv6?(route.netmask)
188
+ }.each { |route|
189
+ tbl << [ route.subnet, route.netmask, route.gateway, route.metric, route.interface ]
190
+ }
191
+
192
+ if tbl.rows.length > 0
134
193
  print("\n" + tbl.to_s + "\n")
194
+ else
195
+ print_line("No IPv6 routes were found.")
135
196
  end
197
+
136
198
  when "add"
137
199
  # Satisfy check to see that formatting is correct
138
200
  unless Rex::Socket::RangeWalker.new(args[0]).length == 1
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -48,23 +49,67 @@ class Console::CommandDispatcher::Stdapi::Sys
48
49
  # List of supported commands.
49
50
  #
50
51
  def commands
51
- {
52
- "clearev" => "Clear the event log",
53
- "execute" => "Execute a command",
54
- "getpid" => "Get the current process identifier",
55
- "getuid" => "Get the user that the server is running as",
56
- "getprivs" => "Attempt to enable all privileges available to the current process",
57
- "kill" => "Terminate a process",
58
- "ps" => "List running processes",
59
- "reboot" => "Reboots the remote computer",
60
- "reg" => "Modify and interact with the remote registry",
61
- "rev2self" => "Calls RevertToSelf() on the remote machine",
62
- "sysinfo" => "Gets information about the remote system, such as OS",
63
- "shell" => "Drop into a system command shell",
64
- "shutdown" => "Shuts down the remote computer",
65
- "steal_token" => "Attempts to steal an impersonation token from the target process",
52
+ all = {
53
+ "clearev" => "Clear the event log",
66
54
  "drop_token" => "Relinquishes any active impersonation token.",
55
+ "execute" => "Execute a command",
56
+ "getpid" => "Get the current process identifier",
57
+ "getprivs" => "Attempt to enable all privileges available to the current process",
58
+ "getuid" => "Get the user that the server is running as",
59
+ "kill" => "Terminate a process",
60
+ "ps" => "List running processes",
61
+ "reboot" => "Reboots the remote computer",
62
+ "reg" => "Modify and interact with the remote registry",
63
+ "rev2self" => "Calls RevertToSelf() on the remote machine",
64
+ "shell" => "Drop into a system command shell",
65
+ "shutdown" => "Shuts down the remote computer",
66
+ "steal_token" => "Attempts to steal an impersonation token from the target process",
67
+ "sysinfo" => "Gets information about the remote system, such as OS",
68
+ }
69
+ reqs = {
70
+ "clearev" => [ "stdapi_sys_eventlog_open", "stdapi_sys_eventlog_clear" ],
71
+ "drop_token" => [ "stdapi_sys_config_drop_token" ],
72
+ "execute" => [ "stdapi_sys_process_execute" ],
73
+ "getpid" => [ "stdapi_sys_process_getpid" ],
74
+ "getprivs" => [ "stdapi_sys_config_getprivs" ],
75
+ "getuid" => [ "stdapi_sys_config_getuid" ],
76
+ "kill" => [ "stdapi_sys_process_kill" ],
77
+ "ps" => [ "stdapi_sys_process_get_processes" ],
78
+ "reboot" => [ "stdapi_sys_power_exitwindows" ],
79
+ "reg" => [
80
+ "stdapi_registry_load_key",
81
+ "stdapi_registry_unload_key",
82
+ "stdapi_registry_open_key",
83
+ "stdapi_registry_open_remote_key",
84
+ "stdapi_registry_create_key",
85
+ "stdapi_registry_delete_key",
86
+ "stdapi_registry_close_key",
87
+ "stdapi_registry_enum_key",
88
+ "stdapi_registry_set_value",
89
+ "stdapi_registry_query_value",
90
+ "stdapi_registry_delete_value",
91
+ "stdapi_registry_query_class",
92
+ "stdapi_registry_enum_value",
93
+ ],
94
+ "rev2self" => [ "stdapi_sys_config_rev2self" ],
95
+ "shell" => [ "stdapi_sys_process_execute" ],
96
+ "shutdown" => [ "stdapi_sys_power_exitwindows" ],
97
+ "steal_token" => [ "stdapi_sys_config_steal_token" ],
98
+ "sysinfo" => [ "stdapi_sys_config_sysinfo" ],
67
99
  }
100
+
101
+ all.delete_if do |cmd, desc|
102
+ del = false
103
+ reqs[cmd].each do |req|
104
+ next if client.commands.include? req
105
+ del = true
106
+ break
107
+ end
108
+
109
+ del
110
+ end
111
+
112
+ all
68
113
  end
69
114
 
70
115
  #
@@ -153,12 +198,21 @@ class Console::CommandDispatcher::Stdapi::Sys
153
198
  # Drop into a system shell as specified by %COMSPEC% or
154
199
  # as appropriate for the host.
155
200
  def cmd_shell(*args)
156
- if client.platform =~/win/
201
+ case client.platform
202
+ when /win/
157
203
  path = client.fs.file.expand_path("%COMSPEC%")
158
204
  path = (path and not path.empty?) ? path : "cmd.exe"
159
205
  cmd_execute("-f", path, "-c", "-H", "-i", "-t")
206
+ when /linux/
207
+ # Don't expand_path() this because it's literal anyway
208
+ path = "/bin/sh"
209
+ cmd_execute("-f", path, "-c", "-i")
160
210
  else
161
- path = client.fs.file.expand_path("/bin/bash")
211
+ # Then this is a multi-platform meterpreter (php or java), which
212
+ # must special-case COMSPEC to return the system-specific shell.
213
+ path = client.fs.file.expand_path("%COMSPEC%")
214
+ # If that failed for whatever reason, guess it's unix
215
+ path = (path and not path.empty?) ? path : "/bin/sh"
162
216
  cmd_execute("-f", path, "-c", "-i")
163
217
  end
164
218
  end
@@ -220,38 +274,13 @@ class Console::CommandDispatcher::Stdapi::Sys
220
274
  #
221
275
  def cmd_ps(*args)
222
276
  processes = client.sys.process.get_processes
223
- tbl = Rex::Ui::Text::Table.new(
224
- 'Header' => "Process list",
225
- 'Indent' => 1,
226
- 'Columns' =>
227
- [
228
- "PID",
229
- "Name",
230
- "Arch",
231
- "Session",
232
- "User",
233
- "Path"
234
- ])
235
-
236
- processes.each { |ent|
237
-
238
- session = ent['session'] == 0xFFFFFFFF ? '' : ent['session'].to_s
239
- arch = ent['arch']
240
-
241
- # for display and consistency with payload naming we switch the internal 'x86_64' value to display 'x64'
242
- if( arch == ARCH_X86_64 )
243
- arch = "x64"
244
- end
245
-
246
- tbl << [ ent['pid'].to_s, ent['name'], arch, session, ent['user'], ent['path'] ]
247
- }
248
-
249
277
  if (processes.length == 0)
250
278
  print_line("No running processes were found.")
251
279
  else
252
- print("\n" + tbl.to_s + "\n")
280
+ print_line
281
+ print_line(processes.to_table("Indent" => 1).to_s)
282
+ print_line
253
283
  end
254
-
255
284
  return true
256
285
  end
257
286
 
@@ -299,7 +328,7 @@ class Console::CommandDispatcher::Stdapi::Sys
299
328
  " queryclass Queries the class of the supplied key [-k <key>]\n" +
300
329
  " setval Set a registry value [-k <key> -v <val> -d <data>]\n" +
301
330
  " deleteval Delete the supplied registry value [-k <key> -v <val>]\n" +
302
- " queryval Queries the data contents of a value [-k <key> -v <val>]\n\n")
331
+ " queryval Queries the data contents of a value [-k <key> -v <val>]\n\n")
303
332
  return false
304
333
  when "-k"
305
334
  key = val
@@ -333,7 +362,7 @@ class Console::CommandDispatcher::Stdapi::Sys
333
362
  # Rock it
334
363
  case cmd
335
364
  when "enumkey"
336
-
365
+
337
366
  open_key = nil
338
367
  if not rem
339
368
  open_key = client.sys.registry.open_key(root_key, base_key, KEY_READ + wowflag)
@@ -383,7 +412,7 @@ class Console::CommandDispatcher::Stdapi::Sys
383
412
  if remote_key
384
413
  open_key = remote_key.create_key(base_key, KEY_WRITE + wowflag)
385
414
  end
386
- end
415
+ end
387
416
 
388
417
  print_line("Successfully created key: #{key}")
389
418
 
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/post/meterpreter'
2
3
 
3
4
  module Rex
@@ -20,20 +21,50 @@ class Console::CommandDispatcher::Stdapi::Ui
20
21
  # List of supported commands.
21
22
  #
22
23
  def commands
23
- {
24
- "idletime" => "Returns the number of seconds the remote user has been idle",
25
- "uictl" => "Control some of the user interface components",
24
+ all = {
26
25
  "enumdesktops" => "List all accessible desktops and window stations",
27
26
  "getdesktop" => "Get the current meterpreter desktop",
28
- "setdesktop" => "Change the meterpreters current desktop",
27
+ "idletime" => "Returns the number of seconds the remote user has been idle",
28
+ "keyscan_dump" => "Dump the keystroke buffer",
29
29
  "keyscan_start" => "Start capturing keystrokes",
30
30
  "keyscan_stop" => "Stop capturing keystrokes",
31
- "keyscan_dump" => "Dump the keystroke buffer",
32
31
  "screenshot" => "Grab a screenshot of the interactive desktop",
32
+ "setdesktop" => "Change the meterpreters current desktop",
33
+ "uictl" => "Control some of the user interface components",
33
34
 
34
35
  # not working yet
35
36
  # "unlockdesktop" => "Unlock or lock the workstation (must be inside winlogon.exe)",
36
37
  }
38
+
39
+ reqs = {
40
+ "enumdesktops" => [ "stdapi_ui_desktop_enum" ],
41
+ "getdesktop" => [ "stdapi_ui_desktop_get" ],
42
+ "idletime" => [ "stdapi_ui_get_idle_time" ],
43
+ "keyscan_dump" => [ "stdapi_ui_get_keys" ],
44
+ "keyscan_start" => [ "stdapi_ui_start_keyscan" ],
45
+ "keyscan_stop" => [ "stdapi_ui_stop_keyscan" ],
46
+ "screenshot" => [ "stdapi_ui_desktop_screenshot" ],
47
+ "setdesktop" => [ "stdapi_ui_desktop_set" ],
48
+ "uictl" => [
49
+ "stdapi_ui_enable_mouse",
50
+ "stdapi_ui_disable_mouse",
51
+ "stdapi_ui_enable_keyboard",
52
+ "stdapi_ui_disable_keyboard",
53
+ ],
54
+ }
55
+
56
+ all.delete_if do |cmd, desc|
57
+ del = false
58
+ reqs[cmd].each do |req|
59
+ next if client.commands.include? req
60
+ del = true
61
+ break
62
+ end
63
+
64
+ del
65
+ end
66
+
67
+ all
37
68
  end
38
69
 
39
70
  #
@@ -51,7 +82,7 @@ class Console::CommandDispatcher::Stdapi::Ui
51
82
 
52
83
  print_line(
53
84
  "User has been idle for: #{Rex::ExtTime.sec_to_s(seconds)}")
54
-
85
+
55
86
  return true
56
87
  end
57
88
 
@@ -94,7 +125,7 @@ class Console::CommandDispatcher::Stdapi::Ui
94
125
 
95
126
  return true
96
127
  end
97
-
128
+
98
129
  #
99
130
  # Grab a screenshot of the current interactive desktop.
100
131
  #
@@ -102,14 +133,14 @@ class Console::CommandDispatcher::Stdapi::Ui
102
133
  path = Rex::Text.rand_text_alpha(8) + ".jpeg"
103
134
  quality = 50
104
135
  view = true
105
-
136
+
106
137
  screenshot_opts = Rex::Parser::Arguments.new(
107
138
  "-h" => [ false, "Help Banner." ],
108
139
  "-q" => [ true, "The JPEG image quality (Default: '#{quality}')" ],
109
140
  "-p" => [ true, "The JPEG image path (Default: '#{path}')" ],
110
141
  "-v" => [ true, "Automatically view the JPEG image (Default: '#{view}')" ]
111
142
  )
112
-
143
+
113
144
  screenshot_opts.parse( args ) { | opt, idx, val |
114
145
  case opt
115
146
  when "-h"
@@ -125,32 +156,32 @@ class Console::CommandDispatcher::Stdapi::Ui
125
156
  view = false if ( val =~ /^(f|n|0)/i )
126
157
  end
127
158
  }
128
-
159
+
129
160
  data = client.ui.screenshot( quality )
130
-
161
+
131
162
  if( data )
132
163
  ::File.open( path, 'wb' ) do |fd|
133
164
  fd.write( data )
134
165
  end
135
-
166
+
136
167
  path = ::File.expand_path( path )
137
-
168
+
138
169
  print_line( "Screenshot saved to: #{path}" )
139
-
170
+
140
171
  Rex::Compat.open_file( path ) if view
141
172
  end
142
-
173
+
143
174
  return true
144
175
  end
145
-
176
+
146
177
  #
147
178
  # Enumerate desktops
148
179
  #
149
180
  def cmd_enumdesktops(*args)
150
181
  print_line( "Enumerating all accessible desktops" )
151
-
182
+
152
183
  desktops = client.ui.enum_desktops
153
-
184
+
154
185
  desktopstable = Rex::Ui::Text::Table.new(
155
186
  'Header' => "Desktops",
156
187
  'Indent' => 4,
@@ -159,18 +190,18 @@ class Console::CommandDispatcher::Stdapi::Ui
159
190
  "Name"
160
191
  ]
161
192
  )
162
-
193
+
163
194
  desktops.each { | desktop |
164
195
  session = desktop['session'] == 0xFFFFFFFF ? '' : desktop['session'].to_s
165
196
  desktopstable << [ session, desktop['station'], desktop['name'] ]
166
197
  }
167
-
198
+
168
199
  if( desktops.length == 0 )
169
200
  print_line( "No accessible desktops were found." )
170
201
  else
171
202
  print( "\n" + desktopstable.to_s + "\n" )
172
203
  end
173
-
204
+
174
205
  return true
175
206
  end
176
207
 
@@ -178,26 +209,26 @@ class Console::CommandDispatcher::Stdapi::Ui
178
209
  # Get the current meterpreter desktop.
179
210
  #
180
211
  def cmd_getdesktop(*args)
181
-
212
+
182
213
  desktop = client.ui.get_desktop
183
-
214
+
184
215
  session = desktop['session'] == 0xFFFFFFFF ? '' : "Session #{desktop['session'].to_s}\\"
185
-
216
+
186
217
  print_line( "#{session}#{desktop['station']}\\#{desktop['name']}" )
187
-
218
+
188
219
  return true
189
220
  end
190
-
221
+
191
222
  #
192
223
  # Change the meterpreters current desktop.
193
224
  #
194
225
  def cmd_setdesktop( *args )
195
-
226
+
196
227
  switch = false
197
228
  dsession = -1
198
229
  dstation = 'WinSta0'
199
230
  dname = 'Default'
200
-
231
+
201
232
  setdesktop_opts = Rex::Parser::Arguments.new(
202
233
  "-h" => [ false, "Help Banner." ],
203
234
  #"-s" => [ true, "The session (Default: '#{dsession}')" ],
@@ -205,7 +236,7 @@ class Console::CommandDispatcher::Stdapi::Ui
205
236
  "-n" => [ true, "The desktop name (Default: '#{dname}')" ],
206
237
  "-i" => [ true, "Set this desktop as the interactive desktop (Default: '#{switch}')" ]
207
238
  )
208
-
239
+
209
240
  setdesktop_opts.parse( args ) { | opt, idx, val |
210
241
  case opt
211
242
  when "-h"
@@ -223,15 +254,15 @@ class Console::CommandDispatcher::Stdapi::Ui
223
254
  switch = true if ( val =~ /^(t|y|1)/i )
224
255
  end
225
256
  }
226
-
257
+
227
258
  if( client.ui.set_desktop( dsession, dstation, dname, switch ) )
228
259
  print_line( "#{ switch ? 'Switched' : 'Changed' } to desktop #{dstation}\\#{dname}" )
229
260
  else
230
261
  print_line( "Failed to #{ switch ? 'switch' : 'change' } to desktop #{dstation}\\#{dname}" )
231
262
  end
232
-
263
+
233
264
  return true
234
- end
265
+ end
235
266
 
236
267
  #
237
268
  # Unlock or lock the desktop
@@ -241,18 +272,18 @@ class Console::CommandDispatcher::Stdapi::Ui
241
272
  if(args.length > 0)
242
273
  mode = args[0].to_i
243
274
  end
244
-
275
+
245
276
  if(mode == 0)
246
277
  print_line("Unlocking the workstation...")
247
278
  client.ui.unlock_desktop(true)
248
279
  else
249
280
  print_line("Locking the workstation...")
250
- client.ui.unlock_desktop(false)
281
+ client.ui.unlock_desktop(false)
251
282
  end
252
283
 
253
284
  return true
254
- end
255
-
285
+ end
286
+
256
287
  #
257
288
  # Start the keyboard sniffer
258
289
  #
@@ -260,8 +291,8 @@ class Console::CommandDispatcher::Stdapi::Ui
260
291
  print_line("Starting the keystroke sniffer...")
261
292
  client.ui.keyscan_start
262
293
  return true
263
- end
264
-
294
+ end
295
+
265
296
  #
266
297
  # Stop the keyboard sniffer
267
298
  #
@@ -269,7 +300,7 @@ class Console::CommandDispatcher::Stdapi::Ui
269
300
  print_line("Stopping the keystroke sniffer...")
270
301
  client.ui.keyscan_stop
271
302
  return true
272
- end
303
+ end
273
304
 
274
305
  #
275
306
  # Dump captured keystrokes
@@ -278,9 +309,9 @@ class Console::CommandDispatcher::Stdapi::Ui
278
309
  print_line("Dumping captured keystrokes...")
279
310
  data = client.ui.keyscan_dump
280
311
  print_line(client.ui.keyscan_extract(data))
281
-
312
+
282
313
  return true
283
- end
314
+ end
284
315
 
285
316
  end
286
317