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,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', '..'))
4
+
5
+ require 'test/unit'
6
+ require 'rex/socket/switch_board'
7
+
8
+ class Rex::Socket::SwitchBoard::UnitTest < Test::Unit::TestCase
9
+
10
+ Klass = Rex::Socket::SwitchBoard
11
+
12
+ def test_add
13
+ Klass.flush_routes
14
+ assert_equal(true, Klass.add_route('0.0.0.0', 0, 'foo'))
15
+ assert_equal(false, Klass.add_route('0.0.0.0', 0, 'foo'))
16
+ assert_equal(1, Klass.routes.length)
17
+
18
+ assert_equal('0.0.0.0', Klass.routes[0].subnet)
19
+ assert_equal('0.0.0.0', Klass.routes[0].netmask)
20
+ assert_equal(0, Klass.routes[0].bitmask)
21
+ assert_equal('foo', Klass.routes[0].comm)
22
+ end
23
+
24
+ def test_remove
25
+ Klass.flush_routes
26
+ assert_equal(true, Klass.add_route('0.0.0.0', 0, 'foo'))
27
+ assert_equal(true, Klass.remove_route('0.0.0.0', 0, 'foo'))
28
+ assert_equal(false, Klass.remove_route('0.0.0.0', 0, 'foo'))
29
+ assert_equal(0, Klass.routes.length)
30
+ end
31
+
32
+ def test_best_comm
33
+ Klass.flush_routes
34
+ Klass.add_route('0.0.0.0', 0, 'default')
35
+ Klass.add_route('1.2.3.0', 24, 'spec')
36
+
37
+ assert_equal('default', Klass.best_comm('4.5.6.7'))
38
+ assert_equal('spec', Klass.best_comm('1.2.3.7'))
39
+ end
40
+
41
+ def test_remove_by_comm
42
+ Klass.flush_routes
43
+ Klass.add_route('1.2.3.0', 24, 'foo')
44
+ Klass.add_route('1.2.4.0', 24, 'dog')
45
+
46
+ Klass.remove_by_comm('foo')
47
+
48
+ assert_equal('dog', Klass.best_comm('1.2.4.7'))
49
+ assert_nil(Klass.best_comm('1.2.3.7'))
50
+ end
51
+
52
+ end
@@ -0,0 +1,76 @@
1
+ require 'rex/socket'
2
+ require 'rex/io/stream'
3
+
4
+ ###
5
+ #
6
+ # This class provides methods for interacting with a TCP client connection.
7
+ #
8
+ ###
9
+ module Rex::Socket::Tcp
10
+
11
+ include Rex::Socket
12
+ include Rex::IO::Stream
13
+
14
+ ##
15
+ #
16
+ # Factory
17
+ #
18
+ ##
19
+
20
+ #
21
+ # Creates the client using the supplied hash.
22
+ #
23
+ def self.create(hash = {})
24
+ hash['Proto'] = 'tcp'
25
+ self.create_param(Rex::Socket::Parameters.from_hash(hash))
26
+ end
27
+
28
+ #
29
+ # Wrapper around the base socket class' creation method that automatically
30
+ # sets the parameter's protocol to TCP.
31
+ #
32
+ def self.create_param(param)
33
+ param.proto = 'tcp'
34
+ Rex::Socket.create_param(param)
35
+ end
36
+
37
+ ##
38
+ #
39
+ # Stream mixin implementations
40
+ #
41
+ ##
42
+
43
+ #
44
+ # Calls shutdown on the TCP connection.
45
+ #
46
+ def shutdown(how = ::Socket::SHUT_RDWR)
47
+ begin
48
+ return (super(how) == 0)
49
+ rescue ::Exception
50
+ end
51
+ end
52
+
53
+ #
54
+ # Returns peer information (host + port) in host:port format.
55
+ #
56
+ def peerinfo
57
+ if (pi = getpeername)
58
+ return pi[1] + ':' + pi[2].to_s
59
+ end
60
+ end
61
+
62
+ #
63
+ # Returns local information (host + port) in host:port format.
64
+ #
65
+ def localinfo
66
+ if (pi = getlocalname)
67
+ return pi[1] + ':' + pi[2].to_s
68
+ end
69
+ end
70
+
71
+ # returns socket type
72
+ def type?
73
+ return 'tcp'
74
+ end
75
+
76
+ end
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', '..'))
4
+
5
+ require 'test/unit'
6
+ require 'rex'
7
+
8
+ class Rex::Socket::Tcp::UnitTest < Test::Unit::TestCase
9
+
10
+ def test_tcp
11
+ port = 65434
12
+ listener = Rex::Socket.create_tcp_server( 'LocalPort' => port )
13
+ client = nil
14
+
15
+ begin
16
+ # Connect to the temp server
17
+ assert_nothing_raised {
18
+ client = Rex::Socket.create_tcp(
19
+ 'PeerHost' => '127.0.0.1',
20
+ 'PeerPort' => port)
21
+ }
22
+
23
+ assert_kind_of(Rex::Socket::Tcp, client, 'kindof?')
24
+ assert_equal('127.0.0.1', client.peerhost, 'peerhost')
25
+ assert_equal(port, client.peerport, 'peerport')
26
+
27
+ # Accept the client connection
28
+ server = listener.accept
29
+ assert_kind_of(Socket, server, "valid server socket connection")
30
+
31
+ # do all of the tests, once for each side
32
+ { 'c/s' => [client, server], 's/c' => [server, client] }.each_pair { |mode, sockets|
33
+ a = sockets[0]
34
+ b = sockets[1]
35
+
36
+ string = "test\n"
37
+ assert_equal(false, a.has_read_data?(1), "#{mode} : has_read_data?, no data")
38
+ assert_equal(string.length, b.write(string), "#{mode} : write")
39
+ assert_equal(true, a.has_read_data?(1), "#{mode} : has_read_data?, with data")
40
+ assert_equal(string, a.recv(string.length), "#{mode} : recv")
41
+
42
+ string = "string\rtest\nwith\x00null"
43
+ assert_equal(string.length, a << string, "#{mode} : append")
44
+ tmp = ''; tmp = b.>>
45
+ assert_equal(string, tmp, "#{mode} : append (reverse)")
46
+
47
+ string = "\x00foobar\x00"
48
+ assert_equal(string.length, a.send(string, 0), "#{mode} : send")
49
+ assert_equal(string, b.get(), "#{mode} : get")
50
+ }
51
+
52
+ assert_equal(true, client.shutdown(::Socket::SHUT_RD), 'client: shutdown read handle')
53
+ assert_equal(true, client.shutdown(::Socket::SHUT_WR), 'client: shutdown write handle')
54
+ assert_nothing_raised {
55
+ client.close
56
+ client = nil
57
+ }
58
+ ensure
59
+ client.close if (client)
60
+ listener.close
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,67 @@
1
+ require 'rex/socket'
2
+ require 'rex/socket/tcp'
3
+ require 'rex/io/stream_server'
4
+
5
+ ###
6
+ #
7
+ # This class provides methods for interacting with a TCP server. It
8
+ # implements the StreamServer IO interface.
9
+ #
10
+ #
11
+ ###
12
+ module Rex::Socket::TcpServer
13
+
14
+ include Rex::Socket
15
+ include Rex::IO::StreamServer
16
+
17
+ ##
18
+ #
19
+ # Factory
20
+ #
21
+ ##
22
+
23
+ #
24
+ # Creates the server using the supplied hash.
25
+ #
26
+ def self.create(hash = {})
27
+ hash['Proto'] = 'tcp'
28
+ hash['Server'] = true
29
+ self.create_param(Rex::Socket::Parameters.from_hash(hash))
30
+ end
31
+
32
+ #
33
+ # Wrapper around the base class' creation method that automatically sets
34
+ # the parameter's protocol to TCP and sets the server flag to true.
35
+ #
36
+ def self.create_param(param)
37
+ param.proto = 'tcp'
38
+ param.server = true
39
+ Rex::Socket.create_param(param)
40
+ end
41
+
42
+ #
43
+ # Accepts a child connection.
44
+ #
45
+ def accept(opts = {})
46
+ t = super()
47
+
48
+ # jRuby compatibility
49
+ if t.respond_to?('[]')
50
+ t = t[0]
51
+ end
52
+
53
+ if (t)
54
+ t.extend(Rex::Socket::Tcp)
55
+ t.context = self.context
56
+
57
+ pn = t.getpeername
58
+
59
+ t.peerhost = pn[1]
60
+ t.peerport = pn[2]
61
+ end
62
+
63
+ t
64
+ end
65
+
66
+ end
67
+
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', '..'))
4
+
5
+ require 'test/unit'
6
+ require 'rex/socket/tcp_server'
7
+
8
+ class Rex::Socket::TcpServer::UnitTest < Test::Unit::TestCase
9
+
10
+ def test_tcp_server
11
+ serv_port = 65433
12
+ serv = Rex::Socket.create_tcp_server(
13
+ 'LocalPort' => serv_port)
14
+ ccli = nil
15
+
16
+ begin
17
+ assert_kind_of(Rex::Socket::TcpServer, serv, "valid TcpServer")
18
+ assert_kind_of(Rex::IO::StreamServer, serv, "valid StreamServer")
19
+
20
+ # Connect to the server
21
+ assert_nothing_raised {
22
+ ccli = Rex::Socket.create_tcp(
23
+ 'PeerHost' => '127.0.0.1',
24
+ 'PeerPort' => serv_port)
25
+ }
26
+ assert_kind_of(Rex::Socket::Tcp, ccli, "valid client client Tcp")
27
+
28
+ # Accept the client connection
29
+ scli = serv.accept
30
+ assert_kind_of(Rex::Socket::Tcp, scli, "valid server client Tcp")
31
+
32
+ assert_equal(2, scli.put("Yo"), "scli: put Yo")
33
+ assert_equal("Yo", ccli.get(), "ccli: get Yo")
34
+ assert(scli.methods.include?('<<'))
35
+ assert(scli.methods.include?('>>'))
36
+ assert(scli.methods.include?('has_read_data?'))
37
+
38
+ ensure
39
+ ccli.close if (ccli)
40
+ serv.close
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,157 @@
1
+ require 'rex/socket'
2
+
3
+ ###
4
+ #
5
+ # This class provides methods for interacting with a UDP socket.
6
+ #
7
+ ###
8
+ module Rex::Socket::Udp
9
+
10
+ include Rex::Socket
11
+
12
+ ##
13
+ #
14
+ # Factory
15
+ #
16
+ ##
17
+
18
+ #
19
+ # Creates the client using the supplied hash.
20
+ #
21
+ def self.create(hash = {})
22
+ hash['Proto'] = 'udp'
23
+ # If we have are to bind to a LocalHost we must be a Server to avail of pivoting.
24
+ # Rex::Socket::Parameters will subsequently turn off the sever flag after the correct
25
+ # comm has been chosen.
26
+ if( hash['LocalHost'] )
27
+ hash['Server'] = true
28
+ end
29
+ self.create_param(Rex::Socket::Parameters.from_hash(hash))
30
+ end
31
+
32
+ #
33
+ # Wrapper around the base socket class' creation method that automatically
34
+ # sets the parameter's protocol to UDP.
35
+ #
36
+ def self.create_param(param)
37
+ param.proto = 'udp'
38
+ Rex::Socket.create_param(param)
39
+ end
40
+
41
+ ##
42
+ #
43
+ # UDP connected state methods
44
+ #
45
+ ##
46
+
47
+ #
48
+ # Write the supplied datagram to the connected UDP socket.
49
+ #
50
+ def write(gram)
51
+ begin
52
+ return syswrite(gram)
53
+ rescue ::Errno::EHOSTUNREACH,::Errno::ENETDOWN,::Errno::ENETUNREACH,::Errno::ENETRESET,::Errno::EHOSTDOWN,::Errno::EACCES,::Errno::EINVAL,::Errno::EADDRNOTAVAIL
54
+ return nil
55
+ end
56
+ end
57
+
58
+ alias put write
59
+
60
+ #
61
+ # Read a datagram from the UDP socket.
62
+ #
63
+ def read(length = 65535)
64
+ if length < 0
65
+ length = 65535
66
+ end
67
+ return sysread(length)
68
+ end
69
+
70
+ #
71
+ # Read a datagram from the UDP socket with a timeout
72
+ #
73
+ def timed_read(length = 65535, timeout=def_read_timeout)
74
+ begin
75
+ if ((rv = Kernel.select([ fd ], nil, nil, timeout)) and
76
+ (rv[0]) and (rv[0][0] == fd)
77
+ )
78
+ return read(length)
79
+ else
80
+ return ''
81
+ end
82
+ rescue Exception
83
+ return ''
84
+ end
85
+ end
86
+
87
+ #alias send write
88
+ #alias recv read
89
+
90
+ ##
91
+ #
92
+ # UDP non-connected state methods
93
+ #
94
+ ##
95
+
96
+ #
97
+ # Sends a datagram to the supplied host:port with optional flags.
98
+ #
99
+ def sendto(gram, peerhost, peerport, flags = 0)
100
+
101
+ # Catch unconnected IPv6 sockets talking to IPv4 addresses
102
+ peer = Rex::Socket.resolv_nbo(peerhost)
103
+ if (peer.length == 4 and self.ipv == 6)
104
+ peerhost = '::ffff:' + Rex::Socket.getaddress(peerhost)
105
+ end
106
+
107
+ begin
108
+ send(gram, flags, Rex::Socket.to_sockaddr(peerhost, peerport))
109
+ rescue ::Errno::EHOSTUNREACH,::Errno::ENETDOWN,::Errno::ENETUNREACH,::Errno::ENETRESET,::Errno::EHOSTDOWN,::Errno::EACCES,::Errno::EINVAL,::Errno::EADDRNOTAVAIL
110
+ return nil
111
+ end
112
+
113
+ end
114
+
115
+ #
116
+ # Receives a datagram and returns the data and host:port of the requestor
117
+ # as [ data, host, port ].
118
+ #
119
+ def recvfrom(length = 65535, timeout=def_read_timeout)
120
+
121
+ begin
122
+ if ((rv = Kernel.select([ fd ], nil, nil, timeout)) and
123
+ (rv[0]) and (rv[0][0] == fd)
124
+ )
125
+ data, saddr = recvfrom_nonblock(length)
126
+ af, host, port = Rex::Socket.from_sockaddr(saddr)
127
+
128
+ return [ data, host, port ]
129
+ else
130
+ return [ '', nil, nil ]
131
+ end
132
+ rescue Exception
133
+ return [ '', nil, nil ]
134
+ end
135
+ end
136
+
137
+ #
138
+ # Calls recvfrom and only returns the data
139
+ #
140
+ def get(timeout=nil)
141
+ data, saddr, sport = recvfrom(65535, timeout)
142
+ return data
143
+ end
144
+
145
+ #
146
+ # The default number of seconds to wait for a read operation to timeout.
147
+ #
148
+ def def_read_timeout
149
+ 10
150
+ end
151
+
152
+ def type?
153
+ return 'udp'
154
+ end
155
+
156
+ end
157
+