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,139 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rex/post/meterpreter/object_aliases'
4
+ require 'rex/post/meterpreter/extension'
5
+ require 'rex/post/meterpreter/extensions/stdapi/constants'
6
+ require 'rex/post/meterpreter/extensions/stdapi/tlv'
7
+ require 'rex/post/meterpreter/extensions/stdapi/fs/dir'
8
+ require 'rex/post/meterpreter/extensions/stdapi/fs/file'
9
+ require 'rex/post/meterpreter/extensions/stdapi/fs/file_stat'
10
+ require 'rex/post/meterpreter/extensions/stdapi/net/config'
11
+ require 'rex/post/meterpreter/extensions/stdapi/net/socket'
12
+ require 'rex/post/meterpreter/extensions/stdapi/sys/config'
13
+ require 'rex/post/meterpreter/extensions/stdapi/sys/process'
14
+ require 'rex/post/meterpreter/extensions/stdapi/sys/registry'
15
+ require 'rex/post/meterpreter/extensions/stdapi/sys/event_log'
16
+ require 'rex/post/meterpreter/extensions/stdapi/sys/power'
17
+ require 'rex/post/meterpreter/extensions/stdapi/ui'
18
+
19
+ module Rex
20
+ module Post
21
+ module Meterpreter
22
+ module Extensions
23
+ module Stdapi
24
+
25
+ ###
26
+ #
27
+ # Standard ruby interface to remote entities for meterpreter. It provides
28
+ # basic access to files, network, system, and other properties of the remote
29
+ # machine that are fairly universal.
30
+ #
31
+ ###
32
+ class Stdapi < Extension
33
+
34
+ #
35
+ # Initializes an instance of the standard API extension.
36
+ #
37
+ def initialize(client)
38
+ super(client, 'stdapi')
39
+
40
+ # Alias the following things on the client object so that they
41
+ # can be directly referenced
42
+ client.register_extension_aliases(
43
+ [
44
+ {
45
+ 'name' => 'fs',
46
+ 'ext' => ObjectAliases.new(
47
+ {
48
+ 'dir' => self.dir,
49
+ 'file' => self.file,
50
+ 'filestat' => self.filestat
51
+ })
52
+ },
53
+ {
54
+ 'name' => 'sys',
55
+ 'ext' => ObjectAliases.new(
56
+ {
57
+ 'config' => Sys::Config.new(client),
58
+ 'process' => self.process,
59
+ 'registry' => self.registry,
60
+ 'eventlog' => self.eventlog,
61
+ 'power' => self.power
62
+ })
63
+ },
64
+ {
65
+ 'name' => 'net',
66
+ 'ext' => ObjectAliases.new(
67
+ {
68
+ 'config' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Config.new(client),
69
+ 'socket' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Socket.new(client)
70
+ })
71
+ },
72
+ {
73
+ 'name' => 'ui',
74
+ 'ext' => UI.new(client)
75
+ }
76
+
77
+ ])
78
+ end
79
+
80
+ #
81
+ # Sets the client instance on a duplicated copy of the supplied class.
82
+ #
83
+ def brand(klass)
84
+ klass = klass.dup
85
+ klass.client = self.client
86
+ return klass
87
+ end
88
+
89
+ #
90
+ # Returns a copy of the Dir class.
91
+ #
92
+ def dir
93
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::Dir)
94
+ end
95
+
96
+ #
97
+ # Returns a copy of the File class.
98
+ #
99
+ def file
100
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::File)
101
+ end
102
+
103
+ #
104
+ # Returns a copy of the FileStat class.
105
+ #
106
+ def filestat
107
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::FileStat)
108
+ end
109
+
110
+ #
111
+ # Returns a copy of the Process class.
112
+ #
113
+ def process
114
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Process)
115
+ end
116
+
117
+ #
118
+ # Returns a copy of the Registry class.
119
+ #
120
+ def registry
121
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Registry)
122
+ end
123
+
124
+ #
125
+ # Returns a copy of the EventLog class.
126
+ #
127
+ def eventlog
128
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::EventLog)
129
+ end
130
+
131
+ #
132
+ # Returns a copy of the Power class.
133
+ #
134
+ def power
135
+ brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Power)
136
+ end
137
+ end
138
+
139
+ end; end; end; end; end
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rex/post/process'
4
+ require 'rex/post/meterpreter/packet'
5
+ require 'rex/post/meterpreter/client'
6
+ require 'rex/post/meterpreter/extensions/stdapi/constants'
7
+ require 'rex/post/meterpreter/extensions/stdapi/stdapi'
8
+
9
+ module Rex
10
+ module Post
11
+ module Meterpreter
12
+ module Extensions
13
+ module Stdapi
14
+ module Sys
15
+
16
+ ###
17
+ #
18
+ # This class provides access to remote system configuration and information.
19
+ #
20
+ ###
21
+ class Config
22
+
23
+ def initialize(client)
24
+ self.client = client
25
+ end
26
+
27
+ #
28
+ # Returns the username that the remote side is running as.
29
+ #
30
+ def getuid
31
+ request = Packet.create_request('stdapi_sys_config_getuid')
32
+ response = client.send_request(request)
33
+ return response.get_tlv_value(TLV_TYPE_USER_NAME)
34
+ end
35
+
36
+ #
37
+ # Returns a hash of information about the remote computer.
38
+ #
39
+ def sysinfo
40
+ request = Packet.create_request('stdapi_sys_config_sysinfo')
41
+ response = client.send_request(request)
42
+
43
+ {
44
+ 'Computer' => response.get_tlv_value(TLV_TYPE_COMPUTER_NAME),
45
+ 'OS' => response.get_tlv_value(TLV_TYPE_OS_NAME),
46
+ 'Architecture' => response.get_tlv_value(TLV_TYPE_ARCHITECTURE),
47
+ 'System Language' => response.get_tlv_value(TLV_TYPE_LANG_SYSTEM),
48
+ }
49
+ end
50
+
51
+ #
52
+ # Calls RevertToSelf on the remote machine.
53
+ #
54
+ def revert_to_self
55
+ client.send_request(Packet.create_request('stdapi_sys_config_rev2self'))
56
+ end
57
+
58
+ #
59
+ # Steals the primary token from a target process
60
+ #
61
+ def steal_token(pid)
62
+ req = Packet.create_request('stdapi_sys_config_steal_token')
63
+ req.add_tlv(TLV_TYPE_PID, pid.to_i)
64
+ res = client.send_request(req)
65
+ return res.get_tlv_value(TLV_TYPE_USER_NAME)
66
+ end
67
+
68
+ #
69
+ # Drops any assumed token
70
+ #
71
+ def drop_token
72
+ req = Packet.create_request('stdapi_sys_config_drop_token')
73
+ res = client.send_request(req)
74
+ return res.get_tlv_value(TLV_TYPE_USER_NAME)
75
+ end
76
+
77
+ #
78
+ # Enables all possible privileges
79
+ #
80
+ def getprivs
81
+ req = Packet.create_request('stdapi_sys_config_getprivs')
82
+ ret = []
83
+ res = client.send_request(req)
84
+ res.each(TLV_TYPE_PRIVILEGE) do |p|
85
+ ret << p.value
86
+ end
87
+ return ret
88
+ end
89
+
90
+ protected
91
+
92
+ attr_accessor :client
93
+
94
+ end
95
+
96
+ end; end; end; end; end; end
97
+
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rex/post/process'
4
+ require 'rex/post/meterpreter/packet'
5
+ require 'rex/post/meterpreter/client'
6
+ require 'rex/post/meterpreter/extensions/stdapi/constants'
7
+ require 'rex/post/meterpreter/extensions/stdapi/stdapi'
8
+ require 'rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record'
9
+
10
+ module Rex
11
+ module Post
12
+ module Meterpreter
13
+ module Extensions
14
+ module Stdapi
15
+ module Sys
16
+
17
+ ###
18
+ #
19
+ # This class provides access to the Windows event log on the remote
20
+ # machine.
21
+ #
22
+ ###
23
+ class EventLog
24
+
25
+ class <<self
26
+ attr_accessor :client
27
+ end
28
+
29
+ #
30
+ # Opens the supplied event log.
31
+ #
32
+ #--
33
+ # NOTE: should support UNCServerName sometime
34
+ #++
35
+ #
36
+ def EventLog.open(name)
37
+ request = Packet.create_request('stdapi_sys_eventlog_open')
38
+
39
+ request.add_tlv(TLV_TYPE_EVENT_SOURCENAME, name);
40
+
41
+ response = client.send_request(request)
42
+
43
+ return self.new(response.get_tlv_value(TLV_TYPE_EVENT_HANDLE))
44
+ end
45
+
46
+ ##
47
+ #
48
+ # Event Log Instance Stuffs!
49
+ #
50
+ ##
51
+
52
+ attr_accessor :handle # :nodoc:
53
+ attr_accessor :client # :nodoc:
54
+
55
+ public
56
+
57
+ #
58
+ # Initializes an instance of the eventlog manipulator.
59
+ #
60
+ def initialize(hand)
61
+ self.client = self.class.client
62
+ self.handle = hand
63
+ end
64
+
65
+ #
66
+ # Return the number of records in the event log.
67
+ #
68
+ def length
69
+ request = Packet.create_request('stdapi_sys_eventlog_numrecords')
70
+
71
+ request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
72
+
73
+ response = client.send_request(request)
74
+
75
+ return response.get_tlv_value(TLV_TYPE_EVENT_NUMRECORDS)
76
+ end
77
+
78
+ #
79
+ # the low level read function (takes flags, not hash, etc).
80
+ #
81
+ def _read(flags, offset = 0)
82
+ request = Packet.create_request('stdapi_sys_eventlog_read')
83
+
84
+ request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle)
85
+ request.add_tlv(TLV_TYPE_EVENT_READFLAGS, flags)
86
+ request.add_tlv(TLV_TYPE_EVENT_RECORDOFFSET, offset)
87
+
88
+ response = client.send_request(request)
89
+
90
+ EventLogSubsystem::EventRecord.new(
91
+ response.get_tlv_value(TLV_TYPE_EVENT_RECORDNUMBER),
92
+ response.get_tlv_value(TLV_TYPE_EVENT_TIMEGENERATED),
93
+ response.get_tlv_value(TLV_TYPE_EVENT_TIMEWRITTEN),
94
+ response.get_tlv_value(TLV_TYPE_EVENT_ID),
95
+ response.get_tlv_value(TLV_TYPE_EVENT_TYPE),
96
+ response.get_tlv_value(TLV_TYPE_EVENT_CATEGORY),
97
+ response.get_tlv_values(TLV_TYPE_EVENT_STRING),
98
+ response.get_tlv_value(TLV_TYPE_EVENT_DATA)
99
+ )
100
+ end
101
+
102
+ #
103
+ # Read the eventlog forwards, meaning from oldest to newest.
104
+ # Returns a EventRecord, and throws an exception after no more records.
105
+ #
106
+ def read_forwards
107
+ _read(EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ)
108
+ end
109
+
110
+ #
111
+ # Iterator for read_forwards.
112
+ #
113
+ def each_forwards
114
+ begin
115
+ loop do
116
+ yield(read_forwards)
117
+ end
118
+ rescue ::Exception
119
+ end
120
+ end
121
+
122
+ #
123
+ # Read the eventlog backwards, meaning from newest to oldest.
124
+ # Returns a EventRecord, and throws an exception after no more records.
125
+ #
126
+ def read_backwards
127
+ _read(EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ)
128
+ end
129
+
130
+ #
131
+ # Iterator for read_backwards.
132
+ #
133
+ def each_backwards
134
+ begin
135
+ loop do
136
+ yield(read_backwards)
137
+ end
138
+ rescue ::Exception
139
+ end
140
+ end
141
+
142
+ #
143
+ # Return the record number of the oldest event (not necessarily 1).
144
+ #
145
+ def oldest
146
+ request = Packet.create_request('stdapi_sys_eventlog_oldest')
147
+
148
+ request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
149
+
150
+ response = client.send_request(request)
151
+
152
+ return response.get_tlv_value(TLV_TYPE_EVENT_RECORDNUMBER)
153
+ end
154
+
155
+ #
156
+ # Clear the specified event log (and return nil).
157
+ #
158
+ #--
159
+ # I should eventually support BackupFile
160
+ #++
161
+ #
162
+ def clear
163
+ request = Packet.create_request('stdapi_sys_eventlog_clear')
164
+
165
+ request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
166
+
167
+ response = client.send_request(request)
168
+ return self
169
+ end
170
+
171
+ #
172
+ # Return the record number of the oldest event (not necessarily 1).
173
+ #
174
+ def close
175
+ request = Packet.create_request('stdapi_sys_eventlog_close')
176
+
177
+ request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
178
+
179
+ response = client.send_request(request)
180
+ return nil
181
+ end
182
+ end
183
+
184
+ end end end end end end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ module Rex
4
+ module Post
5
+ module Meterpreter
6
+ module Extensions
7
+ module Stdapi
8
+ module Sys
9
+ module EventLogSubsystem
10
+
11
+ ###
12
+ #
13
+ # This class encapsulates the data from an event log record.
14
+ #
15
+ ###
16
+ class EventRecord
17
+
18
+ attr_reader :num, :generated, :written, :eventid,
19
+ :type, :category, :strings, :data
20
+
21
+ protected
22
+
23
+ attr_writer :num, :generated, :written, :eventid,
24
+ :type, :category, :strings, :data
25
+
26
+ public
27
+
28
+ def initialize(recnum, timegen, timewri, id, type, cat, strs, data)
29
+ self.num = recnum
30
+ self.generated = Time.at(timegen)
31
+ self.written = Time.at(timewri)
32
+ self.eventid = id
33
+ self.type = type
34
+ self.category = cat
35
+ self.strings = strs
36
+ self.data = data
37
+ end
38
+
39
+ end
40
+
41
+ end end end end end end end