dstruct 0.0.1

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 (491) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +23 -0
  3. data/examples/smb_example.rb +35 -0
  4. data/lib/rex.rb +108 -0
  5. data/lib/rex/LICENSE +29 -0
  6. data/lib/rex/arch.rb +104 -0
  7. data/lib/rex/arch/sparc.rb +75 -0
  8. data/lib/rex/arch/x86.rb +524 -0
  9. data/lib/rex/assembly/nasm.rb +104 -0
  10. data/lib/rex/codepage.map +104 -0
  11. data/lib/rex/compat.rb +389 -0
  12. data/lib/rex/constants.rb +124 -0
  13. data/lib/rex/elfparsey.rb +9 -0
  14. data/lib/rex/elfparsey/elf.rb +121 -0
  15. data/lib/rex/elfparsey/elfbase.rb +256 -0
  16. data/lib/rex/elfparsey/exceptions.rb +25 -0
  17. data/lib/rex/elfscan.rb +10 -0
  18. data/lib/rex/elfscan/scanner.rb +226 -0
  19. data/lib/rex/elfscan/search.rb +44 -0
  20. data/lib/rex/encoder/alpha2.rb +31 -0
  21. data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
  22. data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
  23. data/lib/rex/encoder/alpha2/generic.rb +90 -0
  24. data/lib/rex/encoder/alpha2/unicode_mixed.rb +116 -0
  25. data/lib/rex/encoder/alpha2/unicode_upper.rb +123 -0
  26. data/lib/rex/encoder/bloxor/bloxor.rb +327 -0
  27. data/lib/rex/encoder/ndr.rb +90 -0
  28. data/lib/rex/encoder/nonalpha.rb +61 -0
  29. data/lib/rex/encoder/nonupper.rb +64 -0
  30. data/lib/rex/encoder/xdr.rb +107 -0
  31. data/lib/rex/encoder/xor.rb +69 -0
  32. data/lib/rex/encoder/xor/dword.rb +13 -0
  33. data/lib/rex/encoder/xor/dword_additive.rb +13 -0
  34. data/lib/rex/encoders/xor_dword.rb +35 -0
  35. data/lib/rex/encoders/xor_dword_additive.rb +53 -0
  36. data/lib/rex/encoding/xor.rb +20 -0
  37. data/lib/rex/encoding/xor/byte.rb +15 -0
  38. data/lib/rex/encoding/xor/dword.rb +21 -0
  39. data/lib/rex/encoding/xor/dword_additive.rb +92 -0
  40. data/lib/rex/encoding/xor/exceptions.rb +17 -0
  41. data/lib/rex/encoding/xor/generic.rb +146 -0
  42. data/lib/rex/encoding/xor/qword.rb +15 -0
  43. data/lib/rex/encoding/xor/word.rb +21 -0
  44. data/lib/rex/exceptions.rb +275 -0
  45. data/lib/rex/exploitation/cmdstager.rb +10 -0
  46. data/lib/rex/exploitation/cmdstager/base.rb +190 -0
  47. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  48. data/lib/rex/exploitation/cmdstager/debug_asm.rb +140 -0
  49. data/lib/rex/exploitation/cmdstager/debug_write.rb +134 -0
  50. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  51. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  52. data/lib/rex/exploitation/cmdstager/tftp.rb +71 -0
  53. data/lib/rex/exploitation/cmdstager/vbs.rb +126 -0
  54. data/lib/rex/exploitation/egghunter.rb +425 -0
  55. data/lib/rex/exploitation/encryptjs.rb +78 -0
  56. data/lib/rex/exploitation/heaplib.js.b64 +331 -0
  57. data/lib/rex/exploitation/heaplib.rb +107 -0
  58. data/lib/rex/exploitation/js.rb +6 -0
  59. data/lib/rex/exploitation/js/detect.rb +69 -0
  60. data/lib/rex/exploitation/js/memory.rb +81 -0
  61. data/lib/rex/exploitation/js/network.rb +84 -0
  62. data/lib/rex/exploitation/js/utils.rb +33 -0
  63. data/lib/rex/exploitation/jsobfu.rb +513 -0
  64. data/lib/rex/exploitation/obfuscatejs.rb +336 -0
  65. data/lib/rex/exploitation/omelet.rb +321 -0
  66. data/lib/rex/exploitation/opcodedb.rb +819 -0
  67. data/lib/rex/exploitation/powershell.rb +62 -0
  68. data/lib/rex/exploitation/powershell/function.rb +63 -0
  69. data/lib/rex/exploitation/powershell/obfu.rb +98 -0
  70. data/lib/rex/exploitation/powershell/output.rb +151 -0
  71. data/lib/rex/exploitation/powershell/param.rb +23 -0
  72. data/lib/rex/exploitation/powershell/parser.rb +183 -0
  73. data/lib/rex/exploitation/powershell/psh_methods.rb +70 -0
  74. data/lib/rex/exploitation/powershell/script.rb +99 -0
  75. data/lib/rex/exploitation/ropdb.rb +190 -0
  76. data/lib/rex/exploitation/seh.rb +93 -0
  77. data/lib/rex/file.rb +160 -0
  78. data/lib/rex/image_source.rb +10 -0
  79. data/lib/rex/image_source/disk.rb +58 -0
  80. data/lib/rex/image_source/image_source.rb +44 -0
  81. data/lib/rex/image_source/memory.rb +35 -0
  82. data/lib/rex/io/bidirectional_pipe.rb +161 -0
  83. data/lib/rex/io/datagram_abstraction.rb +35 -0
  84. data/lib/rex/io/ring_buffer.rb +369 -0
  85. data/lib/rex/io/stream.rb +312 -0
  86. data/lib/rex/io/stream_abstraction.rb +209 -0
  87. data/lib/rex/io/stream_server.rb +221 -0
  88. data/lib/rex/job_container.rb +200 -0
  89. data/lib/rex/logging.rb +4 -0
  90. data/lib/rex/logging/log_dispatcher.rb +180 -0
  91. data/lib/rex/logging/log_sink.rb +43 -0
  92. data/lib/rex/logging/sinks/flatfile.rb +56 -0
  93. data/lib/rex/logging/sinks/stderr.rb +44 -0
  94. data/lib/rex/mac_oui.rb +16581 -0
  95. data/lib/rex/machparsey.rb +9 -0
  96. data/lib/rex/machparsey/exceptions.rb +34 -0
  97. data/lib/rex/machparsey/mach.rb +209 -0
  98. data/lib/rex/machparsey/machbase.rb +408 -0
  99. data/lib/rex/machscan.rb +9 -0
  100. data/lib/rex/machscan/scanner.rb +217 -0
  101. data/lib/rex/mime.rb +10 -0
  102. data/lib/rex/mime/encoding.rb +17 -0
  103. data/lib/rex/mime/header.rb +78 -0
  104. data/lib/rex/mime/message.rb +150 -0
  105. data/lib/rex/mime/part.rb +50 -0
  106. data/lib/rex/nop/opty2.rb +109 -0
  107. data/lib/rex/nop/opty2_tables.rb +301 -0
  108. data/lib/rex/ole.rb +202 -0
  109. data/lib/rex/ole/clsid.rb +44 -0
  110. data/lib/rex/ole/difat.rb +138 -0
  111. data/lib/rex/ole/directory.rb +228 -0
  112. data/lib/rex/ole/direntry.rb +237 -0
  113. data/lib/rex/ole/docs/dependencies.txt +8 -0
  114. data/lib/rex/ole/docs/references.txt +1 -0
  115. data/lib/rex/ole/fat.rb +96 -0
  116. data/lib/rex/ole/header.rb +201 -0
  117. data/lib/rex/ole/minifat.rb +74 -0
  118. data/lib/rex/ole/propset.rb +141 -0
  119. data/lib/rex/ole/samples/create_ole.rb +27 -0
  120. data/lib/rex/ole/samples/dir.rb +35 -0
  121. data/lib/rex/ole/samples/dump_stream.rb +34 -0
  122. data/lib/rex/ole/samples/ole_info.rb +23 -0
  123. data/lib/rex/ole/storage.rb +392 -0
  124. data/lib/rex/ole/stream.rb +50 -0
  125. data/lib/rex/ole/substorage.rb +46 -0
  126. data/lib/rex/ole/util.rb +154 -0
  127. data/lib/rex/parser/acunetix_nokogiri.rb +406 -0
  128. data/lib/rex/parser/apple_backup_manifestdb.rb +132 -0
  129. data/lib/rex/parser/appscan_nokogiri.rb +367 -0
  130. data/lib/rex/parser/arguments.rb +108 -0
  131. data/lib/rex/parser/burp_session_nokogiri.rb +291 -0
  132. data/lib/rex/parser/ci_nokogiri.rb +193 -0
  133. data/lib/rex/parser/foundstone_nokogiri.rb +342 -0
  134. data/lib/rex/parser/fusionvm_nokogiri.rb +109 -0
  135. data/lib/rex/parser/group_policy_preferences.rb +185 -0
  136. data/lib/rex/parser/ini.rb +186 -0
  137. data/lib/rex/parser/ip360_aspl_xml.rb +103 -0
  138. data/lib/rex/parser/ip360_xml.rb +98 -0
  139. data/lib/rex/parser/mbsa_nokogiri.rb +256 -0
  140. data/lib/rex/parser/nessus_xml.rb +121 -0
  141. data/lib/rex/parser/netsparker_xml.rb +109 -0
  142. data/lib/rex/parser/nexpose_raw_nokogiri.rb +686 -0
  143. data/lib/rex/parser/nexpose_simple_nokogiri.rb +330 -0
  144. data/lib/rex/parser/nexpose_xml.rb +172 -0
  145. data/lib/rex/parser/nmap_nokogiri.rb +394 -0
  146. data/lib/rex/parser/nmap_xml.rb +166 -0
  147. data/lib/rex/parser/nokogiri_doc_mixin.rb +233 -0
  148. data/lib/rex/parser/openvas_nokogiri.rb +172 -0
  149. data/lib/rex/parser/outpost24_nokogiri.rb +240 -0
  150. data/lib/rex/parser/retina_xml.rb +110 -0
  151. data/lib/rex/parser/unattend.rb +171 -0
  152. data/lib/rex/parser/wapiti_nokogiri.rb +105 -0
  153. data/lib/rex/payloads.rb +2 -0
  154. data/lib/rex/payloads/win32.rb +3 -0
  155. data/lib/rex/payloads/win32/common.rb +27 -0
  156. data/lib/rex/payloads/win32/kernel.rb +54 -0
  157. data/lib/rex/payloads/win32/kernel/common.rb +55 -0
  158. data/lib/rex/payloads/win32/kernel/migration.rb +13 -0
  159. data/lib/rex/payloads/win32/kernel/recovery.rb +51 -0
  160. data/lib/rex/payloads/win32/kernel/stager.rb +195 -0
  161. data/lib/rex/peparsey.rb +10 -0
  162. data/lib/rex/peparsey/exceptions.rb +30 -0
  163. data/lib/rex/peparsey/pe.rb +210 -0
  164. data/lib/rex/peparsey/pe_memdump.rb +61 -0
  165. data/lib/rex/peparsey/pebase.rb +1662 -0
  166. data/lib/rex/peparsey/section.rb +128 -0
  167. data/lib/rex/pescan.rb +11 -0
  168. data/lib/rex/pescan/analyze.rb +366 -0
  169. data/lib/rex/pescan/scanner.rb +230 -0
  170. data/lib/rex/pescan/search.rb +68 -0
  171. data/lib/rex/platforms.rb +2 -0
  172. data/lib/rex/platforms/windows.rb +52 -0
  173. data/lib/rex/poly.rb +134 -0
  174. data/lib/rex/poly/block.rb +480 -0
  175. data/lib/rex/poly/machine.rb +13 -0
  176. data/lib/rex/poly/machine/machine.rb +830 -0
  177. data/lib/rex/poly/machine/x86.rb +509 -0
  178. data/lib/rex/poly/register.rb +101 -0
  179. data/lib/rex/poly/register/x86.rb +41 -0
  180. data/lib/rex/post.rb +7 -0
  181. data/lib/rex/post/dir.rb +51 -0
  182. data/lib/rex/post/file.rb +172 -0
  183. data/lib/rex/post/file_stat.rb +220 -0
  184. data/lib/rex/post/gen.pl +13 -0
  185. data/lib/rex/post/io.rb +182 -0
  186. data/lib/rex/post/meterpreter.rb +5 -0
  187. data/lib/rex/post/meterpreter/channel.rb +446 -0
  188. data/lib/rex/post/meterpreter/channel_container.rb +54 -0
  189. data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
  190. data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
  191. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
  192. data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
  193. data/lib/rex/post/meterpreter/client.rb +483 -0
  194. data/lib/rex/post/meterpreter/client_core.rb +352 -0
  195. data/lib/rex/post/meterpreter/dependencies.rb +3 -0
  196. data/lib/rex/post/meterpreter/extension.rb +32 -0
  197. data/lib/rex/post/meterpreter/extensions/android/android.rb +128 -0
  198. data/lib/rex/post/meterpreter/extensions/android/tlv.rb +40 -0
  199. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
  200. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +17 -0
  201. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  202. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  203. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  204. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  205. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  206. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  207. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  208. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
  209. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +22 -0
  210. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  211. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  212. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  213. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +43 -0
  214. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  215. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +17 -0
  216. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  217. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  218. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
  219. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +16 -0
  220. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
  221. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
  222. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +109 -0
  223. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +29 -0
  224. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +117 -0
  225. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +27 -0
  226. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +396 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +284 -0
  228. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +399 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +104 -0
  230. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
  231. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  232. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +256 -0
  233. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +129 -0
  234. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  235. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  236. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +67 -0
  237. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +139 -0
  238. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +180 -0
  239. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +168 -0
  240. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +209 -0
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38146 -0
  242. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +48 -0
  243. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2102 -0
  244. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +32 -0
  245. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +97 -0
  246. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3852 -0
  247. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +100 -0
  248. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +168 -0
  249. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_psapi.rb +32 -0
  250. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +32 -0
  251. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3170 -0
  252. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  253. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +87 -0
  254. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  255. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +613 -0
  256. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +388 -0
  257. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +111 -0
  258. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +149 -0
  259. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +27 -0
  260. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +515 -0
  261. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +319 -0
  262. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +23 -0
  263. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +301 -0
  264. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +56 -0
  265. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +106 -0
  266. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +676 -0
  267. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +96 -0
  268. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +151 -0
  269. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +128 -0
  270. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +192 -0
  271. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
  272. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +60 -0
  273. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +408 -0
  274. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
  275. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
  276. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
  277. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
  278. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +328 -0
  279. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +193 -0
  280. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
  281. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +188 -0
  282. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +180 -0
  283. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +236 -0
  284. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +259 -0
  285. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +201 -0
  286. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
  287. data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
  288. data/lib/rex/post/meterpreter/packet.rb +709 -0
  289. data/lib/rex/post/meterpreter/packet_dispatcher.rb +543 -0
  290. data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
  291. data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
  292. data/lib/rex/post/meterpreter/ui/console.rb +142 -0
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +86 -0
  294. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/android.rb +383 -0
  295. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +939 -0
  296. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +109 -0
  297. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  298. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  299. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  300. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  301. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  302. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  303. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +242 -0
  304. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  305. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  306. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  307. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  308. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  309. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +232 -0
  310. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +62 -0
  311. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +97 -0
  312. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +52 -0
  313. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +133 -0
  314. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +204 -0
  315. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +66 -0
  316. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +527 -0
  317. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +448 -0
  318. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +906 -0
  319. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +318 -0
  320. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +343 -0
  321. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +99 -0
  322. data/lib/rex/post/permission.rb +26 -0
  323. data/lib/rex/post/process.rb +57 -0
  324. data/lib/rex/post/thread.rb +57 -0
  325. data/lib/rex/post/ui.rb +52 -0
  326. data/lib/rex/proto.rb +15 -0
  327. data/lib/rex/proto/addp.rb +218 -0
  328. data/lib/rex/proto/dcerpc.rb +7 -0
  329. data/lib/rex/proto/dcerpc/client.rb +362 -0
  330. data/lib/rex/proto/dcerpc/exceptions.rb +151 -0
  331. data/lib/rex/proto/dcerpc/handle.rb +48 -0
  332. data/lib/rex/proto/dcerpc/ndr.rb +73 -0
  333. data/lib/rex/proto/dcerpc/packet.rb +264 -0
  334. data/lib/rex/proto/dcerpc/response.rb +188 -0
  335. data/lib/rex/proto/dcerpc/uuid.rb +85 -0
  336. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  337. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  338. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  339. data/lib/rex/proto/dhcp.rb +7 -0
  340. data/lib/rex/proto/dhcp/constants.rb +34 -0
  341. data/lib/rex/proto/dhcp/server.rb +334 -0
  342. data/lib/rex/proto/drda.rb +6 -0
  343. data/lib/rex/proto/drda/constants.rb +50 -0
  344. data/lib/rex/proto/drda/packet.rb +253 -0
  345. data/lib/rex/proto/drda/utils.rb +124 -0
  346. data/lib/rex/proto/http.rb +7 -0
  347. data/lib/rex/proto/http/client.rb +722 -0
  348. data/lib/rex/proto/http/client_request.rb +472 -0
  349. data/lib/rex/proto/http/handler.rb +47 -0
  350. data/lib/rex/proto/http/handler/erb.rb +129 -0
  351. data/lib/rex/proto/http/handler/proc.rb +61 -0
  352. data/lib/rex/proto/http/header.rb +173 -0
  353. data/lib/rex/proto/http/packet.rb +414 -0
  354. data/lib/rex/proto/http/request.rb +354 -0
  355. data/lib/rex/proto/http/response.rb +151 -0
  356. data/lib/rex/proto/http/server.rb +385 -0
  357. data/lib/rex/proto/iax2.rb +2 -0
  358. data/lib/rex/proto/iax2/call.rb +326 -0
  359. data/lib/rex/proto/iax2/client.rb +218 -0
  360. data/lib/rex/proto/iax2/codecs.rb +5 -0
  361. data/lib/rex/proto/iax2/codecs/alaw.rb +16 -0
  362. data/lib/rex/proto/iax2/codecs/g711.rb +2176 -0
  363. data/lib/rex/proto/iax2/codecs/mulaw.rb +17 -0
  364. data/lib/rex/proto/iax2/constants.rb +262 -0
  365. data/lib/rex/proto/ipmi.rb +57 -0
  366. data/lib/rex/proto/ipmi/channel_auth_reply.rb +89 -0
  367. data/lib/rex/proto/ipmi/open_session_reply.rb +36 -0
  368. data/lib/rex/proto/ipmi/rakp2.rb +36 -0
  369. data/lib/rex/proto/ipmi/utils.rb +125 -0
  370. data/lib/rex/proto/natpmp.rb +7 -0
  371. data/lib/rex/proto/natpmp/constants.rb +19 -0
  372. data/lib/rex/proto/natpmp/packet.rb +45 -0
  373. data/lib/rex/proto/ntlm.rb +8 -0
  374. data/lib/rex/proto/ntlm/base.rb +327 -0
  375. data/lib/rex/proto/ntlm/constants.rb +75 -0
  376. data/lib/rex/proto/ntlm/crypt.rb +412 -0
  377. data/lib/rex/proto/ntlm/exceptions.rb +17 -0
  378. data/lib/rex/proto/ntlm/message.rb +534 -0
  379. data/lib/rex/proto/ntlm/utils.rb +765 -0
  380. data/lib/rex/proto/ntp.rb +3 -0
  381. data/lib/rex/proto/ntp/constants.rb +12 -0
  382. data/lib/rex/proto/ntp/modes.rb +130 -0
  383. data/lib/rex/proto/pjl.rb +31 -0
  384. data/lib/rex/proto/pjl/client.rb +163 -0
  385. data/lib/rex/proto/proxy/socks4a.rb +441 -0
  386. data/lib/rex/proto/rfb.rb +13 -0
  387. data/lib/rex/proto/rfb/cipher.rb +82 -0
  388. data/lib/rex/proto/rfb/client.rb +205 -0
  389. data/lib/rex/proto/rfb/constants.rb +50 -0
  390. data/lib/rex/proto/sip.rb +4 -0
  391. data/lib/rex/proto/sip/response.rb +61 -0
  392. data/lib/rex/proto/smb.rb +8 -0
  393. data/lib/rex/proto/smb/client.rb +2064 -0
  394. data/lib/rex/proto/smb/constants.rb +1064 -0
  395. data/lib/rex/proto/smb/crypt.rb +37 -0
  396. data/lib/rex/proto/smb/evasions.rb +67 -0
  397. data/lib/rex/proto/smb/exceptions.rb +867 -0
  398. data/lib/rex/proto/smb/simpleclient.rb +173 -0
  399. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  400. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  401. data/lib/rex/proto/smb/utils.rb +104 -0
  402. data/lib/rex/proto/sunrpc.rb +2 -0
  403. data/lib/rex/proto/sunrpc/client.rb +196 -0
  404. data/lib/rex/proto/tftp.rb +13 -0
  405. data/lib/rex/proto/tftp/client.rb +344 -0
  406. data/lib/rex/proto/tftp/constants.rb +39 -0
  407. data/lib/rex/proto/tftp/server.rb +497 -0
  408. data/lib/rex/random_identifier_generator.rb +177 -0
  409. data/lib/rex/registry.rb +14 -0
  410. data/lib/rex/registry/hive.rb +132 -0
  411. data/lib/rex/registry/lfkey.rb +51 -0
  412. data/lib/rex/registry/nodekey.rb +54 -0
  413. data/lib/rex/registry/regf.rb +25 -0
  414. data/lib/rex/registry/valuekey.rb +67 -0
  415. data/lib/rex/registry/valuelist.rb +29 -0
  416. data/lib/rex/ropbuilder.rb +8 -0
  417. data/lib/rex/ropbuilder/rop.rb +271 -0
  418. data/lib/rex/script.rb +42 -0
  419. data/lib/rex/script/base.rb +61 -0
  420. data/lib/rex/script/meterpreter.rb +16 -0
  421. data/lib/rex/script/shell.rb +10 -0
  422. data/lib/rex/service.rb +49 -0
  423. data/lib/rex/service_manager.rb +154 -0
  424. data/lib/rex/services/local_relay.rb +424 -0
  425. data/lib/rex/socket.rb +788 -0
  426. data/lib/rex/socket/comm.rb +120 -0
  427. data/lib/rex/socket/comm/local.rb +526 -0
  428. data/lib/rex/socket/ip.rb +132 -0
  429. data/lib/rex/socket/parameters.rb +363 -0
  430. data/lib/rex/socket/range_walker.rb +470 -0
  431. data/lib/rex/socket/ssl_tcp.rb +345 -0
  432. data/lib/rex/socket/ssl_tcp_server.rb +188 -0
  433. data/lib/rex/socket/subnet_walker.rb +76 -0
  434. data/lib/rex/socket/switch_board.rb +289 -0
  435. data/lib/rex/socket/tcp.rb +79 -0
  436. data/lib/rex/socket/tcp_server.rb +67 -0
  437. data/lib/rex/socket/udp.rb +165 -0
  438. data/lib/rex/sslscan/result.rb +201 -0
  439. data/lib/rex/sslscan/scanner.rb +206 -0
  440. data/lib/rex/struct2.rb +5 -0
  441. data/lib/rex/struct2/c_struct.rb +181 -0
  442. data/lib/rex/struct2/c_struct_template.rb +39 -0
  443. data/lib/rex/struct2/constant.rb +26 -0
  444. data/lib/rex/struct2/element.rb +44 -0
  445. data/lib/rex/struct2/generic.rb +73 -0
  446. data/lib/rex/struct2/restraint.rb +54 -0
  447. data/lib/rex/struct2/s_string.rb +72 -0
  448. data/lib/rex/struct2/s_struct.rb +111 -0
  449. data/lib/rex/sync.rb +6 -0
  450. data/lib/rex/sync/event.rb +85 -0
  451. data/lib/rex/sync/read_write_lock.rb +177 -0
  452. data/lib/rex/sync/ref.rb +58 -0
  453. data/lib/rex/sync/thread_safe.rb +83 -0
  454. data/lib/rex/text.rb +1813 -0
  455. data/lib/rex/thread_factory.rb +43 -0
  456. data/lib/rex/time.rb +66 -0
  457. data/lib/rex/transformer.rb +116 -0
  458. data/lib/rex/ui.rb +22 -0
  459. data/lib/rex/ui/interactive.rb +304 -0
  460. data/lib/rex/ui/output.rb +85 -0
  461. data/lib/rex/ui/output/none.rb +19 -0
  462. data/lib/rex/ui/progress_tracker.rb +97 -0
  463. data/lib/rex/ui/subscriber.rb +160 -0
  464. data/lib/rex/ui/text/color.rb +98 -0
  465. data/lib/rex/ui/text/dispatcher_shell.rb +538 -0
  466. data/lib/rex/ui/text/input.rb +119 -0
  467. data/lib/rex/ui/text/input/buffer.rb +79 -0
  468. data/lib/rex/ui/text/input/readline.rb +129 -0
  469. data/lib/rex/ui/text/input/socket.rb +96 -0
  470. data/lib/rex/ui/text/input/stdio.rb +46 -0
  471. data/lib/rex/ui/text/irb_shell.rb +62 -0
  472. data/lib/rex/ui/text/output.rb +86 -0
  473. data/lib/rex/ui/text/output/buffer.rb +62 -0
  474. data/lib/rex/ui/text/output/buffer/stdout.rb +26 -0
  475. data/lib/rex/ui/text/output/file.rb +44 -0
  476. data/lib/rex/ui/text/output/socket.rb +44 -0
  477. data/lib/rex/ui/text/output/stdio.rb +53 -0
  478. data/lib/rex/ui/text/output/tee.rb +56 -0
  479. data/lib/rex/ui/text/progress_tracker.rb +57 -0
  480. data/lib/rex/ui/text/shell.rb +403 -0
  481. data/lib/rex/ui/text/table.rb +346 -0
  482. data/lib/rex/zip.rb +96 -0
  483. data/lib/rex/zip/archive.rb +130 -0
  484. data/lib/rex/zip/blocks.rb +184 -0
  485. data/lib/rex/zip/entry.rb +122 -0
  486. data/lib/rex/zip/jar.rb +283 -0
  487. data/lib/rex/zip/samples/comment.rb +32 -0
  488. data/lib/rex/zip/samples/mkwar.rb +138 -0
  489. data/lib/rex/zip/samples/mkzip.rb +19 -0
  490. data/lib/rex/zip/samples/recursive.rb +58 -0
  491. metadata +536 -0
@@ -0,0 +1,180 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/post/thread'
4
+ require 'rex/post/meterpreter/client'
5
+ require 'rex/post/meterpreter/extensions/stdapi/constants'
6
+
7
+ module Rex
8
+ module Post
9
+ module Meterpreter
10
+ module Extensions
11
+ module Stdapi
12
+ module Sys
13
+
14
+ ##
15
+ #
16
+ # This class implements the Rex::Post::Thread interface which
17
+ # wrappers a logical thread for a given process.
18
+ #
19
+ ##
20
+ class Thread < Rex::Post::Thread
21
+
22
+ include Rex::Post::Meterpreter::ObjectAliasesContainer
23
+
24
+ ##
25
+ #
26
+ # Constructor
27
+ #
28
+ ##
29
+
30
+ #
31
+ # Initialize the thread instance.
32
+ #
33
+ def initialize(process, handle, tid)
34
+ self.process = process
35
+ self.handle = handle
36
+ self.tid = tid
37
+ ObjectSpace.define_finalizer( self, self.class.finalize(self.process.client, self.handle) )
38
+ end
39
+
40
+ def self.finalize(client,handle)
41
+ proc { self.close(client,handle) }
42
+ end
43
+
44
+ ##
45
+ #
46
+ # Execution
47
+ #
48
+ ##
49
+
50
+ #
51
+ # Suspends the thread's execution.
52
+ #
53
+ def suspend
54
+ request = Packet.create_request('stdapi_sys_process_thread_suspend')
55
+
56
+ request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
57
+
58
+ process.client.send_request(request)
59
+
60
+ return true
61
+ end
62
+
63
+ #
64
+ # Resumes the thread's execution.
65
+ #
66
+ def resume
67
+ request = Packet.create_request('stdapi_sys_process_thread_resume')
68
+
69
+ request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
70
+
71
+ process.client.send_request(request)
72
+
73
+ return true
74
+ end
75
+
76
+ #
77
+ # Terminates the thread's execution.
78
+ #
79
+ def terminate(code)
80
+ request = Packet.create_request('stdapi_sys_process_thread_terminate')
81
+
82
+ request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
83
+ request.add_tlv(TLV_TYPE_EXIT_CODE, code)
84
+
85
+ process.client.send_request(request)
86
+
87
+ return true
88
+ end
89
+
90
+ ##
91
+ #
92
+ # Register manipulation
93
+ #
94
+ ##
95
+
96
+ #
97
+ # Queries the register state of the thread.
98
+ #
99
+ def query_regs
100
+ request = Packet.create_request('stdapi_sys_process_thread_query_regs')
101
+ regs = {}
102
+
103
+ request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
104
+
105
+ response = process.client.send_request(request)
106
+
107
+ response.each(TLV_TYPE_REGISTER) { |reg|
108
+ regs[reg.get_tlv_value(TLV_TYPE_REGISTER_NAME)] = reg.get_tlv_value(TLV_TYPE_REGISTER_VALUE_32)
109
+ }
110
+
111
+ return regs
112
+ end
113
+
114
+ #
115
+ # Sets the register state of the thread. The registers are supplied
116
+ # in the form of a hash.
117
+ #
118
+ def set_regs(regs_hash)
119
+ request = Packet.create_request('stdapi_sys_process_thread_set_regs')
120
+
121
+ request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
122
+
123
+ # Add all of the register that we're setting
124
+ regs_hash.each_key { |name|
125
+ t = request.add_tlv(TLV_TYPE_REGISTER)
126
+
127
+ t.add_tlv(TLV_TYPE_REGISTER_NAME, name)
128
+ t.add_tlv(TLV_TYPE_REGISTER_VALUE_32, regs_hash[name])
129
+ }
130
+
131
+ process.client.send_request(request)
132
+
133
+ return true
134
+ end
135
+
136
+ #
137
+ # Formats the registers in a pretty way.
138
+ #
139
+ def pretty_regs
140
+ regs = query_regs
141
+
142
+ buf = sprintf("eax=%.8x ebx=%.8x ecx=%.8x edx=%.8x esi=%.8x edi=%.8x\n",
143
+ regs['eax'], regs['ebx'], regs['ecx'], regs['edx'], regs['esi'], regs['edi'])
144
+ buf += sprintf("eip=%.8x esp=%.8x ebp=%.8x\n",
145
+ regs['eip'], regs['esp'], regs['ebp'])
146
+ buf += sprintf("cs=%.4x ss=%.4x ds=%.4x es=%.4x fs=%.4x gs=%.4x\n",
147
+ regs['cs'], regs['ss'], regs['ds'], regs['es'], regs['fs'], regs['gs'])
148
+
149
+ return buf
150
+ end
151
+
152
+ ##
153
+ #
154
+ # Closure
155
+ #
156
+ ##
157
+
158
+ #
159
+ # Closes the thread handle.
160
+ #
161
+ def self.close(client, handle)
162
+ request = Packet.create_request('stdapi_sys_process_thread_close')
163
+ request.add_tlv(TLV_TYPE_THREAD_HANDLE, handle)
164
+ client.send_request(request, nil)
165
+ handle = nil
166
+ return true
167
+ end
168
+
169
+ # Instance method
170
+ def close
171
+ self.class.close(self.process.client, self.handle)
172
+ end
173
+
174
+ attr_reader :process, :handle, :tid # :nodoc:
175
+ protected
176
+ attr_writer :process, :handle, :tid # :nodoc:
177
+
178
+ end
179
+
180
+ end; end; end; end; end; end
@@ -0,0 +1,236 @@
1
+ # -*- coding: binary -*-
2
+
3
+ module Rex
4
+ module Post
5
+ module Meterpreter
6
+ module Extensions
7
+ module Stdapi
8
+
9
+ ##
10
+ #
11
+ # General
12
+ #
13
+ ##
14
+
15
+ TLV_TYPE_HANDLE = TLV_META_TYPE_QWORD | 600
16
+ TLV_TYPE_INHERIT = TLV_META_TYPE_BOOL | 601
17
+ TLV_TYPE_PROCESS_HANDLE = TLV_META_TYPE_QWORD | 630
18
+ TLV_TYPE_THREAD_HANDLE = TLV_META_TYPE_QWORD | 631
19
+ TLV_TYPE_PRIVILEGE = TLV_META_TYPE_STRING | 632
20
+
21
+ ##
22
+ #
23
+ # Fs
24
+ #
25
+ ##
26
+
27
+ TLV_TYPE_DIRECTORY_PATH = TLV_META_TYPE_STRING | 1200
28
+ TLV_TYPE_FILE_NAME = TLV_META_TYPE_STRING | 1201
29
+ TLV_TYPE_FILE_PATH = TLV_META_TYPE_STRING | 1202
30
+ TLV_TYPE_FILE_MODE = TLV_META_TYPE_STRING | 1203
31
+ TLV_TYPE_FILE_SIZE = TLV_META_TYPE_UINT | 1204
32
+
33
+ TLV_TYPE_STAT_BUF = TLV_META_TYPE_COMPLEX | 1220
34
+
35
+ TLV_TYPE_SEARCH_RECURSE = TLV_META_TYPE_BOOL | 1230
36
+ TLV_TYPE_SEARCH_GLOB = TLV_META_TYPE_STRING | 1231
37
+ TLV_TYPE_SEARCH_ROOT = TLV_META_TYPE_STRING | 1232
38
+ TLV_TYPE_SEARCH_RESULTS = TLV_META_TYPE_GROUP | 1233
39
+ ##
40
+ #
41
+ # Net
42
+ #
43
+ ##
44
+ TLV_TYPE_HOST_NAME = TLV_META_TYPE_STRING | 1400
45
+ TLV_TYPE_PORT = TLV_META_TYPE_UINT | 1401
46
+ TLV_TYPE_INTERFACE_MTU = TLV_META_TYPE_UINT | 1402
47
+ TLV_TYPE_INTERFACE_FLAGS = TLV_META_TYPE_STRING | 1403
48
+ TLV_TYPE_INTERFACE_INDEX = TLV_META_TYPE_UINT | 1404
49
+
50
+ TLV_TYPE_SUBNET = TLV_META_TYPE_RAW | 1420
51
+ TLV_TYPE_NETMASK = TLV_META_TYPE_RAW | 1421
52
+ TLV_TYPE_GATEWAY = TLV_META_TYPE_RAW | 1422
53
+ TLV_TYPE_NETWORK_ROUTE = TLV_META_TYPE_GROUP | 1423
54
+ TLV_TYPE_IP_PREFIX = TLV_META_TYPE_UINT | 1424
55
+ TLV_TYPE_ARP_ENTRY = TLV_META_TYPE_GROUP | 1425
56
+
57
+ TLV_TYPE_IP = TLV_META_TYPE_RAW | 1430
58
+ TLV_TYPE_MAC_ADDRESS = TLV_META_TYPE_RAW | 1431
59
+ TLV_TYPE_MAC_NAME = TLV_META_TYPE_STRING | 1432
60
+ TLV_TYPE_NETWORK_INTERFACE = TLV_META_TYPE_GROUP | 1433
61
+ TLV_TYPE_IP6_SCOPE = TLV_META_TYPE_RAW | 1434
62
+
63
+ TLV_TYPE_SUBNET_STRING = TLV_META_TYPE_STRING | 1440
64
+ TLV_TYPE_NETMASK_STRING = TLV_META_TYPE_STRING | 1441
65
+ TLV_TYPE_GATEWAY_STRING = TLV_META_TYPE_STRING | 1442
66
+ TLV_TYPE_ROUTE_METRIC = TLV_META_TYPE_UINT | 1443
67
+
68
+ # Resolve
69
+ TLV_TYPE_ADDR_TYPE = TLV_META_TYPE_UINT | 1444
70
+
71
+ # Proxy configuration
72
+ TLV_TYPE_PROXY_CFG_AUTODETECT = TLV_META_TYPE_BOOL | 1445
73
+ TLV_TYPE_PROXY_CFG_AUTOCONFIGURL = TLV_META_TYPE_STRING | 1446
74
+ TLV_TYPE_PROXY_CFG_PROXY = TLV_META_TYPE_STRING | 1447
75
+ TLV_TYPE_PROXY_CFG_PROXYBYPASS = TLV_META_TYPE_STRING | 1448
76
+
77
+ # Socket
78
+ TLV_TYPE_PEER_HOST = TLV_META_TYPE_STRING | 1500
79
+ TLV_TYPE_PEER_PORT = TLV_META_TYPE_UINT | 1501
80
+ TLV_TYPE_LOCAL_HOST = TLV_META_TYPE_STRING | 1502
81
+ TLV_TYPE_LOCAL_PORT = TLV_META_TYPE_UINT | 1503
82
+ TLV_TYPE_CONNECT_RETRIES = TLV_META_TYPE_UINT | 1504
83
+ TLV_TYPE_NETSTAT_ENTRY = TLV_META_TYPE_GROUP | 1505
84
+ TLV_TYPE_PEER_HOST_RAW = TLV_META_TYPE_RAW | 1506
85
+ TLV_TYPE_LOCAL_HOST_RAW = TLV_META_TYPE_RAW | 1507
86
+
87
+ TLV_TYPE_SHUTDOWN_HOW = TLV_META_TYPE_UINT | 1530
88
+
89
+ ##
90
+ #
91
+ # Sys
92
+ #
93
+ ##
94
+
95
+ PROCESS_EXECUTE_FLAG_HIDDEN = (1 << 0)
96
+ PROCESS_EXECUTE_FLAG_CHANNELIZED = (1 << 1)
97
+ PROCESS_EXECUTE_FLAG_SUSPENDED = (1 << 2)
98
+ PROCESS_EXECUTE_FLAG_USE_THREAD_TOKEN = (1 << 3)
99
+ PROCESS_EXECUTE_FLAG_DESKTOP = (1 << 4)
100
+ PROCESS_EXECUTE_FLAG_SESSION = (1 << 5)
101
+
102
+ # Registry
103
+ TLV_TYPE_HKEY = TLV_META_TYPE_QWORD | 1000
104
+ TLV_TYPE_ROOT_KEY = TLV_TYPE_HKEY
105
+ TLV_TYPE_BASE_KEY = TLV_META_TYPE_STRING | 1001
106
+ TLV_TYPE_PERMISSION = TLV_META_TYPE_UINT | 1002
107
+ TLV_TYPE_KEY_NAME = TLV_META_TYPE_STRING | 1003
108
+ TLV_TYPE_VALUE_NAME = TLV_META_TYPE_STRING | 1010
109
+ TLV_TYPE_VALUE_TYPE = TLV_META_TYPE_UINT | 1011
110
+ TLV_TYPE_VALUE_DATA = TLV_META_TYPE_RAW | 1012
111
+ TLV_TYPE_TARGET_HOST = TLV_META_TYPE_STRING | 1013
112
+
113
+ # Config
114
+ TLV_TYPE_COMPUTER_NAME = TLV_META_TYPE_STRING | 1040
115
+ TLV_TYPE_OS_NAME = TLV_META_TYPE_STRING | 1041
116
+ TLV_TYPE_USER_NAME = TLV_META_TYPE_STRING | 1042
117
+ TLV_TYPE_ARCHITECTURE = TLV_META_TYPE_STRING | 1043
118
+ TLV_TYPE_LANG_SYSTEM = TLV_META_TYPE_STRING | 1044
119
+
120
+ # Environment
121
+ TLV_TYPE_ENV_VARIABLE = TLV_META_TYPE_STRING | 1100
122
+ TLV_TYPE_ENV_VALUE = TLV_META_TYPE_STRING | 1101
123
+ TLV_TYPE_ENV_GROUP = TLV_META_TYPE_GROUP | 1102
124
+
125
+ DELETE_KEY_FLAG_RECURSIVE = (1 << 0)
126
+
127
+ # Process
128
+ TLV_TYPE_BASE_ADDRESS = TLV_META_TYPE_QWORD | 2000
129
+ TLV_TYPE_ALLOCATION_TYPE = TLV_META_TYPE_UINT | 2001
130
+ TLV_TYPE_PROTECTION = TLV_META_TYPE_UINT | 2002
131
+ TLV_TYPE_PROCESS_PERMS = TLV_META_TYPE_UINT | 2003
132
+ TLV_TYPE_PROCESS_MEMORY = TLV_META_TYPE_RAW | 2004
133
+ TLV_TYPE_ALLOC_BASE_ADDRESS = TLV_META_TYPE_QWORD | 2005
134
+ TLV_TYPE_MEMORY_STATE = TLV_META_TYPE_UINT | 2006
135
+ TLV_TYPE_MEMORY_TYPE = TLV_META_TYPE_UINT | 2007
136
+ TLV_TYPE_ALLOC_PROTECTION = TLV_META_TYPE_UINT | 2008
137
+ TLV_TYPE_PID = TLV_META_TYPE_UINT | 2300
138
+ TLV_TYPE_PROCESS_NAME = TLV_META_TYPE_STRING | 2301
139
+ TLV_TYPE_PROCESS_PATH = TLV_META_TYPE_STRING | 2302
140
+ TLV_TYPE_PROCESS_GROUP = TLV_META_TYPE_GROUP | 2303
141
+ TLV_TYPE_PROCESS_FLAGS = TLV_META_TYPE_UINT | 2304
142
+ TLV_TYPE_PROCESS_ARGUMENTS = TLV_META_TYPE_STRING | 2305
143
+ TLV_TYPE_PROCESS_ARCH = TLV_META_TYPE_UINT | 2306
144
+ TLV_TYPE_PARENT_PID = TLV_META_TYPE_UINT | 2307
145
+ TLV_TYPE_PROCESS_SESSION = TLV_META_TYPE_UINT | 2308
146
+
147
+ TLV_TYPE_IMAGE_FILE = TLV_META_TYPE_STRING | 2400
148
+ TLV_TYPE_IMAGE_FILE_PATH = TLV_META_TYPE_STRING | 2401
149
+ TLV_TYPE_PROCEDURE_NAME = TLV_META_TYPE_STRING | 2402
150
+ TLV_TYPE_PROCEDURE_ADDRESS = TLV_META_TYPE_QWORD | 2403
151
+ TLV_TYPE_IMAGE_BASE = TLV_META_TYPE_QWORD | 2404
152
+ TLV_TYPE_IMAGE_GROUP = TLV_META_TYPE_GROUP | 2405
153
+ TLV_TYPE_IMAGE_NAME = TLV_META_TYPE_STRING | 2406
154
+
155
+ TLV_TYPE_THREAD_ID = TLV_META_TYPE_UINT | 2500
156
+ TLV_TYPE_THREAD_PERMS = TLV_META_TYPE_UINT | 2502
157
+ TLV_TYPE_EXIT_CODE = TLV_META_TYPE_UINT | 2510
158
+ TLV_TYPE_ENTRY_POINT = TLV_META_TYPE_QWORD | 2511
159
+ TLV_TYPE_ENTRY_PARAMETER = TLV_META_TYPE_QWORD | 2512
160
+ TLV_TYPE_CREATION_FLAGS = TLV_META_TYPE_UINT | 2513
161
+
162
+ TLV_TYPE_REGISTER_NAME = TLV_META_TYPE_STRING | 2540
163
+ TLV_TYPE_REGISTER_SIZE = TLV_META_TYPE_UINT | 2541
164
+ TLV_TYPE_REGISTER_VALUE_32 = TLV_META_TYPE_UINT | 2542
165
+ TLV_TYPE_REGISTER = TLV_META_TYPE_GROUP | 2550
166
+
167
+ ##
168
+ #
169
+ # Ui
170
+ #
171
+ ##
172
+ TLV_TYPE_IDLE_TIME = TLV_META_TYPE_UINT | 3000
173
+ TLV_TYPE_KEYS_DUMP = TLV_META_TYPE_STRING | 3001
174
+ TLV_TYPE_DESKTOP_SCREENSHOT = TLV_META_TYPE_RAW | 3002
175
+ TLV_TYPE_DESKTOP_SWITCH = TLV_META_TYPE_BOOL | 3003
176
+ TLV_TYPE_DESKTOP = TLV_META_TYPE_GROUP | 3004
177
+ TLV_TYPE_DESKTOP_SESSION = TLV_META_TYPE_UINT | 3005
178
+ TLV_TYPE_DESKTOP_STATION = TLV_META_TYPE_STRING | 3006
179
+ TLV_TYPE_DESKTOP_NAME = TLV_META_TYPE_STRING | 3007
180
+ TLV_TYPE_DESKTOP_SCREENSHOT_QUALITY = TLV_META_TYPE_UINT | 3008
181
+ TLV_TYPE_DESKTOP_SCREENSHOT_PE32DLL_LENGTH = TLV_META_TYPE_UINT | 3009
182
+ TLV_TYPE_DESKTOP_SCREENSHOT_PE32DLL_BUFFER = TLV_META_TYPE_STRING | 3010
183
+ TLV_TYPE_DESKTOP_SCREENSHOT_PE64DLL_LENGTH = TLV_META_TYPE_UINT | 3011
184
+ TLV_TYPE_DESKTOP_SCREENSHOT_PE64DLL_BUFFER = TLV_META_TYPE_STRING | 3012
185
+
186
+ ##
187
+ #
188
+ # Event Log
189
+ #
190
+ ##
191
+ TLV_TYPE_EVENT_SOURCENAME = TLV_META_TYPE_STRING | 4000
192
+ TLV_TYPE_EVENT_HANDLE = TLV_META_TYPE_QWORD | 4001
193
+ TLV_TYPE_EVENT_NUMRECORDS = TLV_META_TYPE_UINT | 4002
194
+
195
+ TLV_TYPE_EVENT_READFLAGS = TLV_META_TYPE_UINT | 4003
196
+ TLV_TYPE_EVENT_RECORDOFFSET = TLV_META_TYPE_UINT | 4004
197
+
198
+ TLV_TYPE_EVENT_RECORDNUMBER = TLV_META_TYPE_UINT | 4006
199
+ TLV_TYPE_EVENT_TIMEGENERATED= TLV_META_TYPE_UINT | 4007
200
+ TLV_TYPE_EVENT_TIMEWRITTEN = TLV_META_TYPE_UINT | 4008
201
+ TLV_TYPE_EVENT_ID = TLV_META_TYPE_UINT | 4009
202
+ TLV_TYPE_EVENT_TYPE = TLV_META_TYPE_UINT | 4010
203
+ TLV_TYPE_EVENT_CATEGORY = TLV_META_TYPE_UINT | 4011
204
+ TLV_TYPE_EVENT_STRING = TLV_META_TYPE_STRING | 4012
205
+ TLV_TYPE_EVENT_DATA = TLV_META_TYPE_RAW | 4013
206
+
207
+ ##
208
+ #
209
+ # Power
210
+ #
211
+ ##
212
+ TLV_TYPE_POWER_FLAGS = TLV_META_TYPE_UINT | 4100
213
+ TLV_TYPE_POWER_REASON = TLV_META_TYPE_UINT | 4101
214
+
215
+ ##
216
+ #
217
+ # Webcam
218
+ #
219
+ ##
220
+
221
+ TLV_TYPE_WEBCAM_IMAGE = TLV_META_TYPE_RAW | (TLV_EXTENSIONS + 1)
222
+ TLV_TYPE_WEBCAM_INTERFACE_ID= TLV_META_TYPE_UINT | (TLV_EXTENSIONS + 2)
223
+ TLV_TYPE_WEBCAM_QUALITY = TLV_META_TYPE_UINT | (TLV_EXTENSIONS + 3)
224
+ TLV_TYPE_WEBCAM_NAME = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 4)
225
+
226
+ ##
227
+ #
228
+ # Audio
229
+ #
230
+ ##
231
+
232
+ TLV_TYPE_AUDIO_DURATION = TLV_META_TYPE_UINT | (TLV_EXTENSIONS + 1)
233
+ TLV_TYPE_AUDIO_DATA = TLV_META_TYPE_RAW | (TLV_EXTENSIONS + 2)
234
+
235
+ end; end; end; end; end
236
+
@@ -0,0 +1,259 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/post/ui'
4
+
5
+ module Rex
6
+ module Post
7
+ module Meterpreter
8
+ module Extensions
9
+ module Stdapi
10
+
11
+ ###
12
+ #
13
+ # Allows for interacting with the user interface on the remote machine,
14
+ # such as by disabling the keyboard and mouse.
15
+ #
16
+ # WARNING:
17
+ #
18
+ # Using keyboard and mouse enabling/disabling features will result in
19
+ # a DLL file being written to disk.
20
+ #
21
+ ###
22
+ class UI < Rex::Post::UI
23
+
24
+ include Rex::Post::Meterpreter::ObjectAliasesContainer
25
+
26
+ ##
27
+ #
28
+ # Constructor
29
+ #
30
+ ##
31
+
32
+ #
33
+ # Initializes the post-exploitation user-interface manipulation subsystem.
34
+ #
35
+ def initialize(client)
36
+ self.client = client
37
+ end
38
+
39
+ ##
40
+ #
41
+ # Device enabling/disabling
42
+ #
43
+ ##
44
+
45
+ #
46
+ # Disable keyboard input on the remote machine.
47
+ #
48
+ def disable_keyboard
49
+ return enable_keyboard(false)
50
+ end
51
+
52
+ #
53
+ # Enable keyboard input on the remote machine.
54
+ #
55
+ def enable_keyboard(enable = true)
56
+ request = Packet.create_request('stdapi_ui_enable_keyboard')
57
+
58
+ request.add_tlv(TLV_TYPE_BOOL, enable)
59
+
60
+ response = client.send_request(request)
61
+
62
+ return true
63
+ end
64
+
65
+ #
66
+ # Disable mouse input on the remote machine.
67
+ #
68
+ def disable_mouse
69
+ return enable_mouse(false)
70
+ end
71
+
72
+ #
73
+ # Enable mouse input on the remote machine.
74
+ #
75
+ def enable_mouse(enable = true)
76
+ request = Packet.create_request('stdapi_ui_enable_mouse')
77
+
78
+ request.add_tlv(TLV_TYPE_BOOL, enable)
79
+
80
+ response = client.send_request(request)
81
+
82
+ return true
83
+ end
84
+
85
+ #
86
+ # Returns the number of seconds the remote machine has been idle
87
+ # from user input.
88
+ #
89
+ def idle_time
90
+ request = Packet.create_request('stdapi_ui_get_idle_time')
91
+
92
+ response = client.send_request(request)
93
+
94
+ return response.get_tlv_value(TLV_TYPE_IDLE_TIME);
95
+ end
96
+
97
+ #
98
+ # Enumerate desktops.
99
+ #
100
+ def enum_desktops
101
+ request = Packet.create_request('stdapi_ui_desktop_enum')
102
+ response = client.send_request(request)
103
+ desktopz = []
104
+ if( response.result == 0 )
105
+ response.each( TLV_TYPE_DESKTOP ) { | desktop |
106
+ desktopz << {
107
+ 'session' => desktop.get_tlv_value( TLV_TYPE_DESKTOP_SESSION ),
108
+ 'station' => desktop.get_tlv_value( TLV_TYPE_DESKTOP_STATION ),
109
+ 'name' => desktop.get_tlv_value( TLV_TYPE_DESKTOP_NAME )
110
+ }
111
+ }
112
+ end
113
+ return desktopz
114
+ end
115
+
116
+ #
117
+ # Get the current desktop meterpreter is using.
118
+ #
119
+ def get_desktop
120
+ request = Packet.create_request( 'stdapi_ui_desktop_get' )
121
+ response = client.send_request( request )
122
+ desktop = {}
123
+ if( response.result == 0 )
124
+ desktop = {
125
+ 'session' => response.get_tlv_value( TLV_TYPE_DESKTOP_SESSION ),
126
+ 'station' => response.get_tlv_value( TLV_TYPE_DESKTOP_STATION ),
127
+ 'name' => response.get_tlv_value( TLV_TYPE_DESKTOP_NAME )
128
+ }
129
+ end
130
+ return desktop
131
+ end
132
+
133
+ #
134
+ # Change the meterpreters current desktop. The switch param sets this
135
+ # new desktop as the interactive one (The local users visible desktop
136
+ # with screen/keyboard/mouse control).
137
+ #
138
+ def set_desktop( session=-1, station='WinSta0', name='Default', switch=false )
139
+ request = Packet.create_request( 'stdapi_ui_desktop_set' )
140
+ request.add_tlv( TLV_TYPE_DESKTOP_SESSION, session )
141
+ request.add_tlv( TLV_TYPE_DESKTOP_STATION, station )
142
+ request.add_tlv( TLV_TYPE_DESKTOP_NAME, name )
143
+ request.add_tlv( TLV_TYPE_DESKTOP_SWITCH, switch )
144
+ response = client.send_request( request )
145
+ if( response.result == 0 )
146
+ return true
147
+ end
148
+ return false
149
+ end
150
+
151
+ #
152
+ # Grab a screenshot of the interactive desktop
153
+ #
154
+ def screenshot( quality=50 )
155
+ request = Packet.create_request( 'stdapi_ui_desktop_screenshot' )
156
+ request.add_tlv( TLV_TYPE_DESKTOP_SCREENSHOT_QUALITY, quality )
157
+ # include the x64 screenshot dll if the host OS is x64
158
+ if( client.sys.config.sysinfo['Architecture'] =~ /^\S*x64\S*/ )
159
+ screenshot_path = MeterpreterBinaries.path('screenshot','x64.dll')
160
+ screenshot_path = ::File.expand_path( screenshot_path )
161
+ screenshot_dll = ''
162
+ ::File.open( screenshot_path, 'rb' ) do |f|
163
+ screenshot_dll += f.read( f.stat.size )
164
+ end
165
+ request.add_tlv( TLV_TYPE_DESKTOP_SCREENSHOT_PE64DLL_BUFFER, screenshot_dll, false, true )
166
+ request.add_tlv( TLV_TYPE_DESKTOP_SCREENSHOT_PE64DLL_LENGTH, screenshot_dll.length )
167
+ end
168
+ # but allways include the x86 screenshot dll as we can use it for wow64 processes if we are on x64
169
+ screenshot_path = MeterpreterBinaries.path('screenshot','x86.dll')
170
+ screenshot_path = ::File.expand_path( screenshot_path )
171
+ screenshot_dll = ''
172
+ ::File.open( screenshot_path, 'rb' ) do |f|
173
+ screenshot_dll += f.read( f.stat.size )
174
+ end
175
+ request.add_tlv( TLV_TYPE_DESKTOP_SCREENSHOT_PE32DLL_BUFFER, screenshot_dll, false, true )
176
+ request.add_tlv( TLV_TYPE_DESKTOP_SCREENSHOT_PE32DLL_LENGTH, screenshot_dll.length )
177
+ # send the request and return the jpeg image if successfull.
178
+ response = client.send_request( request )
179
+ if( response.result == 0 )
180
+ return response.get_tlv_value( TLV_TYPE_DESKTOP_SCREENSHOT )
181
+ end
182
+ return nil
183
+ end
184
+
185
+ #
186
+ # Unlock or lock the desktop
187
+ #
188
+ def unlock_desktop(unlock=true)
189
+ request = Packet.create_request('stdapi_ui_unlock_desktop')
190
+ request.add_tlv(TLV_TYPE_BOOL, unlock)
191
+ response = client.send_request(request)
192
+ return true
193
+ end
194
+
195
+ #
196
+ # Start the keyboard sniffer
197
+ #
198
+ def keyscan_start
199
+ request = Packet.create_request('stdapi_ui_start_keyscan')
200
+ response = client.send_request(request)
201
+ return true
202
+ end
203
+
204
+ #
205
+ # Stop the keyboard sniffer
206
+ #
207
+ def keyscan_stop
208
+ request = Packet.create_request('stdapi_ui_stop_keyscan')
209
+ response = client.send_request(request)
210
+ return true
211
+ end
212
+
213
+ #
214
+ # Dump the keystroke buffer
215
+ #
216
+ def keyscan_dump
217
+ request = Packet.create_request('stdapi_ui_get_keys')
218
+ response = client.send_request(request)
219
+ return response.get_tlv_value(TLV_TYPE_KEYS_DUMP);
220
+ end
221
+
222
+ #
223
+ # Extract the keystroke from the buffer data
224
+ #
225
+ def keyscan_extract(buffer_data)
226
+ outp = ""
227
+ buffer_data.unpack("n*").each do |inp|
228
+ fl = (inp & 0xff00) >> 8
229
+ vk = (inp & 0xff)
230
+ kc = VirtualKeyCodes[vk]
231
+
232
+ f_shift = fl & (1<<1)
233
+ f_ctrl = fl & (1<<2)
234
+ f_alt = fl & (1<<3)
235
+
236
+ if(kc)
237
+ name = ((f_shift != 0 and kc.length > 1) ? kc[1] : kc[0])
238
+ case name
239
+ when /^.$/
240
+ outp << name
241
+ when /shift|click/i
242
+ when 'Space'
243
+ outp << " "
244
+ else
245
+ outp << " <#{name}> "
246
+ end
247
+ else
248
+ outp << " <0x%.2x> " % vk
249
+ end
250
+ end
251
+ return outp
252
+ end
253
+
254
+ protected
255
+ attr_accessor :client # :nodoc:
256
+
257
+ end
258
+
259
+ end; end; end; end; end