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.
- data/README +4 -0
- data/lib/rex.rb +101 -0
- data/lib/rex.rb.ts.rb +70 -0
- data/lib/rex/LICENSE +29 -0
- data/lib/rex/arch.rb +103 -0
- data/lib/rex/arch/sparc.rb +75 -0
- data/lib/rex/arch/sparc.rb.ut.rb +18 -0
- data/lib/rex/arch/x86.rb +513 -0
- data/lib/rex/arch/x86.rb.ut.rb +93 -0
- data/lib/rex/assembly/nasm.rb +100 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +281 -0
- data/lib/rex/constants.rb +113 -0
- data/lib/rex/elfparsey.rb +11 -0
- data/lib/rex/elfparsey/elf.rb +123 -0
- data/lib/rex/elfparsey/elfbase.rb +260 -0
- data/lib/rex/elfparsey/exceptions.rb +27 -0
- data/lib/rex/elfscan.rb +12 -0
- data/lib/rex/elfscan/scanner.rb +207 -0
- data/lib/rex/elfscan/search.rb +46 -0
- data/lib/rex/encoder/alpha2.rb +31 -0
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
- data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
- data/lib/rex/encoder/alpha2/generic.rb +113 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
- data/lib/rex/encoder/ndr.rb +89 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
- data/lib/rex/encoder/nonalpha.rb +61 -0
- data/lib/rex/encoder/nonupper.rb +64 -0
- data/lib/rex/encoder/xdr.rb +106 -0
- data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
- data/lib/rex/encoder/xor.rb +69 -0
- data/lib/rex/encoder/xor/dword.rb +13 -0
- data/lib/rex/encoder/xor/dword_additive.rb +13 -0
- data/lib/rex/encoders/xor_dword.rb +35 -0
- data/lib/rex/encoders/xor_dword_additive.rb +53 -0
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
- data/lib/rex/encoding/xor.rb +20 -0
- data/lib/rex/encoding/xor.rb.ts.rb +14 -0
- data/lib/rex/encoding/xor/byte.rb +15 -0
- data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/dword_additive.rb +92 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/exceptions.rb +17 -0
- data/lib/rex/encoding/xor/generic.rb +146 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
- data/lib/rex/encoding/xor/qword.rb +15 -0
- data/lib/rex/encoding/xor/word.rb +21 -0
- data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
- data/lib/rex/exceptions.rb +275 -0
- data/lib/rex/exceptions.rb.ut.rb +44 -0
- data/lib/rex/exploitation/cmdstager.rb +133 -0
- data/lib/rex/exploitation/egghunter.rb +143 -0
- data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
- data/lib/rex/exploitation/encryptjs.rb +77 -0
- data/lib/rex/exploitation/heaplib.js.b64 +331 -0
- data/lib/rex/exploitation/heaplib.rb +94 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
- data/lib/rex/exploitation/obfuscatejs.rb +335 -0
- data/lib/rex/exploitation/opcodedb.rb +818 -0
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
- data/lib/rex/exploitation/seh.rb +92 -0
- data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
- data/lib/rex/file.rb +84 -0
- data/lib/rex/file.rb.ut.rb +16 -0
- data/lib/rex/image_source.rb +12 -0
- data/lib/rex/image_source/disk.rb +60 -0
- data/lib/rex/image_source/image_source.rb +46 -0
- data/lib/rex/image_source/memory.rb +37 -0
- data/lib/rex/io/bidirectional_pipe.rb +157 -0
- data/lib/rex/io/datagram_abstraction.rb +35 -0
- data/lib/rex/io/stream.rb +313 -0
- data/lib/rex/io/stream_abstraction.rb +186 -0
- data/lib/rex/io/stream_server.rb +211 -0
- data/lib/rex/job_container.rb +202 -0
- data/lib/rex/logging.rb +4 -0
- data/lib/rex/logging/log_dispatcher.rb +179 -0
- data/lib/rex/logging/log_sink.rb +42 -0
- data/lib/rex/logging/sinks/flatfile.rb +55 -0
- data/lib/rex/logging/sinks/stderr.rb +43 -0
- data/lib/rex/machparsey.rb +9 -0
- data/lib/rex/machparsey/exceptions.rb +34 -0
- data/lib/rex/machparsey/mach.rb +209 -0
- data/lib/rex/machparsey/machbase.rb +408 -0
- data/lib/rex/machscan.rb +9 -0
- data/lib/rex/machscan/scanner.rb +217 -0
- data/lib/rex/mime.rb +9 -0
- data/lib/rex/mime/header.rb +75 -0
- data/lib/rex/mime/message.rb +112 -0
- data/lib/rex/mime/part.rb +20 -0
- data/lib/rex/nop/opty2.rb +108 -0
- data/lib/rex/nop/opty2.rb.ut.rb +23 -0
- data/lib/rex/nop/opty2_tables.rb +300 -0
- data/lib/rex/ole.rb +128 -0
- data/lib/rex/ole/clsid.rb +47 -0
- data/lib/rex/ole/difat.rb +141 -0
- data/lib/rex/ole/directory.rb +230 -0
- data/lib/rex/ole/direntry.rb +240 -0
- data/lib/rex/ole/fat.rb +99 -0
- data/lib/rex/ole/header.rb +204 -0
- data/lib/rex/ole/minifat.rb +77 -0
- data/lib/rex/ole/samples/create_ole.rb +27 -0
- data/lib/rex/ole/samples/dir.rb +35 -0
- data/lib/rex/ole/samples/dump_stream.rb +34 -0
- data/lib/rex/ole/samples/ole_info.rb +23 -0
- data/lib/rex/ole/storage.rb +395 -0
- data/lib/rex/ole/stream.rb +53 -0
- data/lib/rex/ole/substorage.rb +49 -0
- data/lib/rex/ole/util.rb +157 -0
- data/lib/rex/parser/arguments.rb +97 -0
- data/lib/rex/parser/arguments.rb.ut.rb +67 -0
- data/lib/rex/parser/ini.rb +185 -0
- data/lib/rex/parser/ini.rb.ut.rb +29 -0
- data/lib/rex/parser/nmap_xml.rb +111 -0
- data/lib/rex/payloads.rb +1 -0
- data/lib/rex/payloads/win32.rb +2 -0
- data/lib/rex/payloads/win32/common.rb +26 -0
- data/lib/rex/payloads/win32/kernel.rb +53 -0
- data/lib/rex/payloads/win32/kernel/common.rb +54 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
- data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
- data/lib/rex/peparsey.rb +12 -0
- data/lib/rex/peparsey/exceptions.rb +32 -0
- data/lib/rex/peparsey/pe.rb +188 -0
- data/lib/rex/peparsey/pe_memdump.rb +63 -0
- data/lib/rex/peparsey/pebase.rb +1655 -0
- data/lib/rex/peparsey/section.rb +136 -0
- data/lib/rex/pescan.rb +13 -0
- data/lib/rex/pescan/analyze.rb +309 -0
- data/lib/rex/pescan/scanner.rb +206 -0
- data/lib/rex/pescan/search.rb +56 -0
- data/lib/rex/platforms.rb +1 -0
- data/lib/rex/platforms/windows.rb +51 -0
- data/lib/rex/poly.rb +132 -0
- data/lib/rex/poly/block.rb +468 -0
- data/lib/rex/poly/register.rb +100 -0
- data/lib/rex/poly/register/x86.rb +40 -0
- data/lib/rex/post.rb +8 -0
- data/lib/rex/post/dir.rb +51 -0
- data/lib/rex/post/file.rb +172 -0
- data/lib/rex/post/file_stat.rb +220 -0
- data/lib/rex/post/gen.pl +13 -0
- data/lib/rex/post/io.rb +182 -0
- data/lib/rex/post/meterpreter.rb +4 -0
- data/lib/rex/post/meterpreter/channel.rb +438 -0
- data/lib/rex/post/meterpreter/channel_container.rb +54 -0
- data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
- data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
- data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
- data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
- data/lib/rex/post/meterpreter/client.rb +335 -0
- data/lib/rex/post/meterpreter/client_core.rb +274 -0
- data/lib/rex/post/meterpreter/dependencies.rb +3 -0
- data/lib/rex/post/meterpreter/extension.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
- data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
- data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
- data/lib/rex/post/meterpreter/packet.rb +596 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
- data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
- data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
- data/lib/rex/post/meterpreter/ui/console.rb +135 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
- data/lib/rex/post/permission.rb +26 -0
- data/lib/rex/post/process.rb +57 -0
- data/lib/rex/post/thread.rb +57 -0
- data/lib/rex/post/ui.rb +52 -0
- data/lib/rex/proto.rb +12 -0
- data/lib/rex/proto.rb.ts.rb +8 -0
- data/lib/rex/proto/dcerpc.rb +6 -0
- data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
- data/lib/rex/proto/dcerpc/client.rb +358 -0
- data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
- data/lib/rex/proto/dcerpc/handle.rb +47 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
- data/lib/rex/proto/dcerpc/ndr.rb +72 -0
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
- data/lib/rex/proto/dcerpc/packet.rb +253 -0
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
- data/lib/rex/proto/dcerpc/response.rb +186 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
- data/lib/rex/proto/dcerpc/uuid.rb +84 -0
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
- data/lib/rex/proto/drda.rb +5 -0
- data/lib/rex/proto/drda.rb.ts.rb +17 -0
- data/lib/rex/proto/drda/constants.rb +49 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
- data/lib/rex/proto/drda/packet.rb +252 -0
- data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
- data/lib/rex/proto/drda/utils.rb +123 -0
- data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
- data/lib/rex/proto/http.rb +5 -0
- data/lib/rex/proto/http.rb.ts.rb +12 -0
- data/lib/rex/proto/http/client.rb +817 -0
- data/lib/rex/proto/http/client.rb.ut.rb +93 -0
- data/lib/rex/proto/http/handler.rb +46 -0
- data/lib/rex/proto/http/handler/erb.rb +128 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
- data/lib/rex/proto/http/handler/proc.rb +54 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
- data/lib/rex/proto/http/header.rb +161 -0
- data/lib/rex/proto/http/header.rb.ut.rb +46 -0
- data/lib/rex/proto/http/packet.rb +394 -0
- data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
- data/lib/rex/proto/http/request.rb +356 -0
- data/lib/rex/proto/http/request.rb.ut.rb +214 -0
- data/lib/rex/proto/http/response.rb +85 -0
- data/lib/rex/proto/http/response.rb.ut.rb +149 -0
- data/lib/rex/proto/http/server.rb +367 -0
- data/lib/rex/proto/http/server.rb.ut.rb +79 -0
- data/lib/rex/proto/smb.rb +7 -0
- data/lib/rex/proto/smb.rb.ts.rb +8 -0
- data/lib/rex/proto/smb/client.rb +1733 -0
- data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
- data/lib/rex/proto/smb/constants.rb +1062 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
- data/lib/rex/proto/smb/crypt.rb +95 -0
- data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
- data/lib/rex/proto/smb/evasions.rb +65 -0
- data/lib/rex/proto/smb/exceptions.rb +846 -0
- data/lib/rex/proto/smb/simpleclient.rb +292 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
- data/lib/rex/proto/smb/utils.rb +514 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
- data/lib/rex/proto/sunrpc.rb +1 -0
- data/lib/rex/proto/sunrpc/client.rb +195 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +59 -0
- data/lib/rex/script/meterpreter.rb +9 -0
- data/lib/rex/script/shell.rb +9 -0
- data/lib/rex/service.rb +48 -0
- data/lib/rex/service_manager.rb +141 -0
- data/lib/rex/service_manager.rb.ut.rb +32 -0
- data/lib/rex/services/local_relay.rb +423 -0
- data/lib/rex/socket.rb +586 -0
- data/lib/rex/socket.rb.ut.rb +86 -0
- data/lib/rex/socket/comm.rb +119 -0
- data/lib/rex/socket/comm/local.rb +409 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
- data/lib/rex/socket/ip.rb +129 -0
- data/lib/rex/socket/parameters.rb +345 -0
- data/lib/rex/socket/parameters.rb.ut.rb +51 -0
- data/lib/rex/socket/range_walker.rb +295 -0
- data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
- data/lib/rex/socket/ssl_tcp.rb +184 -0
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
- data/lib/rex/socket/ssl_tcp_server.rb +122 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
- data/lib/rex/socket/subnet_walker.rb +75 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
- data/lib/rex/socket/switch_board.rb +272 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
- data/lib/rex/socket/tcp.rb +76 -0
- data/lib/rex/socket/tcp.rb.ut.rb +64 -0
- data/lib/rex/socket/tcp_server.rb +67 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
- data/lib/rex/socket/udp.rb +157 -0
- data/lib/rex/socket/udp.rb.ut.rb +44 -0
- data/lib/rex/struct2.rb +5 -0
- data/lib/rex/struct2/c_struct.rb +181 -0
- data/lib/rex/struct2/c_struct_template.rb +39 -0
- data/lib/rex/struct2/constant.rb +26 -0
- data/lib/rex/struct2/element.rb +44 -0
- data/lib/rex/struct2/generic.rb +73 -0
- data/lib/rex/struct2/restraint.rb +54 -0
- data/lib/rex/struct2/s_string.rb +72 -0
- data/lib/rex/struct2/s_struct.rb +111 -0
- data/lib/rex/sync.rb +6 -0
- data/lib/rex/sync/event.rb +94 -0
- data/lib/rex/sync/read_write_lock.rb +176 -0
- data/lib/rex/sync/ref.rb +57 -0
- data/lib/rex/sync/thread_safe.rb +82 -0
- data/lib/rex/test.rb +35 -0
- data/lib/rex/text.rb +1029 -0
- data/lib/rex/text.rb.ut.rb +168 -0
- data/lib/rex/time.rb +65 -0
- data/lib/rex/transformer.rb +115 -0
- data/lib/rex/transformer.rb.ut.rb +38 -0
- data/lib/rex/ui.rb +21 -0
- data/lib/rex/ui/interactive.rb +252 -0
- data/lib/rex/ui/output.rb +80 -0
- data/lib/rex/ui/output/none.rb +18 -0
- data/lib/rex/ui/progress_tracker.rb +96 -0
- data/lib/rex/ui/subscriber.rb +149 -0
- data/lib/rex/ui/text/color.rb +97 -0
- data/lib/rex/ui/text/color.rb.ut.rb +18 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
- data/lib/rex/ui/text/input.rb +117 -0
- data/lib/rex/ui/text/input/buffer.rb +75 -0
- data/lib/rex/ui/text/input/readline.rb +129 -0
- data/lib/rex/ui/text/input/socket.rb +95 -0
- data/lib/rex/ui/text/input/stdio.rb +45 -0
- data/lib/rex/ui/text/irb_shell.rb +55 -0
- data/lib/rex/ui/text/output.rb +80 -0
- data/lib/rex/ui/text/output/buffer.rb +65 -0
- data/lib/rex/ui/text/output/file.rb +37 -0
- data/lib/rex/ui/text/output/socket.rb +43 -0
- data/lib/rex/ui/text/output/stdio.rb +40 -0
- data/lib/rex/ui/text/progress_tracker.rb +56 -0
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
- data/lib/rex/ui/text/shell.rb +321 -0
- data/lib/rex/ui/text/table.rb +254 -0
- data/lib/rex/ui/text/table.rb.ut.rb +55 -0
- data/lib/rex/zip.rb +93 -0
- data/lib/rex/zip/archive.rb +91 -0
- data/lib/rex/zip/blocks.rb +182 -0
- data/lib/rex/zip/entry.rb +95 -0
- data/lib/rex/zip/samples/comment.rb +32 -0
- data/lib/rex/zip/samples/mkwar.rb +138 -0
- data/lib/rex/zip/samples/mkzip.rb +19 -0
- data/lib/rex/zip/samples/recursive.rb +58 -0
- metadata +435 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# The dispatcher shell class is designed to provide a generic means
|
|
10
|
+
# of processing various shell commands that may be located in
|
|
11
|
+
# different modules or chunks of codes. These chunks are referred
|
|
12
|
+
# to as command dispatchers. The only requirement for command dispatchers is
|
|
13
|
+
# that they prefix every method that they wish to be mirrored as a command
|
|
14
|
+
# with the cmd_ prefix.
|
|
15
|
+
#
|
|
16
|
+
###
|
|
17
|
+
module DispatcherShell
|
|
18
|
+
|
|
19
|
+
###
|
|
20
|
+
#
|
|
21
|
+
# Empty template base class for command dispatchers.
|
|
22
|
+
#
|
|
23
|
+
###
|
|
24
|
+
module CommandDispatcher
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Initializes the command dispatcher mixin.
|
|
28
|
+
#
|
|
29
|
+
def initialize(shell)
|
|
30
|
+
self.shell = shell
|
|
31
|
+
self.tab_complete_items = []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Returns nil for an empty set of commands.
|
|
36
|
+
#
|
|
37
|
+
def commands
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Wraps shell.print_error
|
|
42
|
+
#
|
|
43
|
+
def print_error(msg = '')
|
|
44
|
+
shell.print_error(msg)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Wraps shell.print_status
|
|
49
|
+
#
|
|
50
|
+
def print_status(msg = '')
|
|
51
|
+
shell.print_status(msg)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Wraps shell.print_line
|
|
56
|
+
#
|
|
57
|
+
def print_line(msg = '')
|
|
58
|
+
shell.print_line(msg)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# Wraps shell.print_good
|
|
63
|
+
#
|
|
64
|
+
def print_good(msg = '')
|
|
65
|
+
shell.print_good(msg)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Wraps shell.print
|
|
70
|
+
#
|
|
71
|
+
def print(msg = '')
|
|
72
|
+
shell.print(msg)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# Wraps shell.update_prompt
|
|
77
|
+
#
|
|
78
|
+
def update_prompt(prompt=nil)
|
|
79
|
+
shell.update_prompt(prompt)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# No tab completion items by default
|
|
84
|
+
#
|
|
85
|
+
attr_accessor :shell, :tab_complete_items
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# DispatcherShell derives from shell.
|
|
91
|
+
#
|
|
92
|
+
include Shell
|
|
93
|
+
|
|
94
|
+
attr_accessor :on_command_proc
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# Initialize the dispatcher shell.
|
|
98
|
+
#
|
|
99
|
+
def initialize(prompt, prompt_char = '>', histfile = nil)
|
|
100
|
+
super
|
|
101
|
+
|
|
102
|
+
# Initialze the dispatcher array
|
|
103
|
+
self.dispatcher_stack = []
|
|
104
|
+
|
|
105
|
+
# Initialize the tab completion array
|
|
106
|
+
self.tab_words = []
|
|
107
|
+
self.on_command_proc = nil
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#
|
|
111
|
+
# This method accepts the entire line of text from the Readline
|
|
112
|
+
# routine, stores all completed words, and passes the partial
|
|
113
|
+
# word to the real tab completion function. This works around
|
|
114
|
+
# a design problem in the Readline module and depends on the
|
|
115
|
+
# Readline.basic_word_break_characters variable being set to \x00
|
|
116
|
+
#
|
|
117
|
+
def tab_complete(str)
|
|
118
|
+
# Check trailing whitespace so we can tell 'x' from 'x '
|
|
119
|
+
str_match = str.match(/\s+$/)
|
|
120
|
+
str_trail = (str_match.nil?) ? '' : str_match[0]
|
|
121
|
+
|
|
122
|
+
# Split the line up by whitespace into words
|
|
123
|
+
str_words = str.split(/[\s\t\n]+/)
|
|
124
|
+
|
|
125
|
+
# Append an empty word if we had trailing whitespace
|
|
126
|
+
str_words << '' if str_trail.length > 0
|
|
127
|
+
|
|
128
|
+
# Place the word list into an instance variable
|
|
129
|
+
self.tab_words = str_words
|
|
130
|
+
|
|
131
|
+
# Pop the last word and pass it to the real method
|
|
132
|
+
tab_complete_stub(self.tab_words.pop)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Performs tab completion of a command, if supported
|
|
136
|
+
# Current words can be found in self.tab_words
|
|
137
|
+
#
|
|
138
|
+
def tab_complete_stub(str)
|
|
139
|
+
items = []
|
|
140
|
+
|
|
141
|
+
return nil if not str
|
|
142
|
+
|
|
143
|
+
# puts "Words(#{tab_words.join(", ")}) Partial='#{str}'"
|
|
144
|
+
|
|
145
|
+
# Next, try to match internal command or value completion
|
|
146
|
+
# Enumerate each entry in the dispatcher stack
|
|
147
|
+
dispatcher_stack.each { |dispatcher|
|
|
148
|
+
|
|
149
|
+
# If no command is set and it supports commands, add them all
|
|
150
|
+
if (tab_words.empty? and dispatcher.respond_to?('commands'))
|
|
151
|
+
items.concat(dispatcher.commands.to_a.map { |x| x[0] })
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# If the dispatcher exports a tab completion function, use it
|
|
155
|
+
if(dispatcher.respond_to?('tab_complete_helper'))
|
|
156
|
+
res = dispatcher.tab_complete_helper(str, tab_words)
|
|
157
|
+
|
|
158
|
+
if (res.nil?)
|
|
159
|
+
# A nil response indicates no optional arguments
|
|
160
|
+
return [''] if items.empty?
|
|
161
|
+
else
|
|
162
|
+
# Otherwise we add the completion items to the list
|
|
163
|
+
items.concat(res)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
# Verify that our search string is a valid regex
|
|
169
|
+
begin
|
|
170
|
+
Regexp.compile(str)
|
|
171
|
+
rescue RegexpError
|
|
172
|
+
str = Regexp.escape(str)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# XXX - This still doesn't fix some Regexp warnings:
|
|
176
|
+
# ./lib/rex/ui/text/dispatcher_shell.rb:171: warning: regexp has `]' without escape
|
|
177
|
+
|
|
178
|
+
# Match based on the partial word
|
|
179
|
+
items.find_all { |e|
|
|
180
|
+
e =~ /^#{str}/
|
|
181
|
+
# Prepend the rest of the command (or it gets replaced!)
|
|
182
|
+
}.map { |e|
|
|
183
|
+
tab_words.dup.push(e).join(' ')
|
|
184
|
+
}
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
#
|
|
188
|
+
# Run a single command line.
|
|
189
|
+
#
|
|
190
|
+
def run_single(line)
|
|
191
|
+
arguments = parse_line(line)
|
|
192
|
+
method = arguments.shift
|
|
193
|
+
found = false
|
|
194
|
+
error = false
|
|
195
|
+
|
|
196
|
+
# If output is disabled output will be nil
|
|
197
|
+
output.reset_color if (output)
|
|
198
|
+
|
|
199
|
+
if (method)
|
|
200
|
+
entries = dispatcher_stack.length
|
|
201
|
+
|
|
202
|
+
dispatcher_stack.each { |dispatcher|
|
|
203
|
+
next if not dispatcher.respond_to?('commands')
|
|
204
|
+
|
|
205
|
+
begin
|
|
206
|
+
if (dispatcher.commands.has_key?(method))
|
|
207
|
+
self.on_command_proc.call(line.strip) if self.on_command_proc
|
|
208
|
+
run_command(dispatcher, method, arguments)
|
|
209
|
+
found = true
|
|
210
|
+
end
|
|
211
|
+
rescue
|
|
212
|
+
error = $!
|
|
213
|
+
|
|
214
|
+
print_error(
|
|
215
|
+
"Error while running command #{method}: #{$!}" +
|
|
216
|
+
"\n\nCall stack:\n#{$@.join("\n")}")
|
|
217
|
+
rescue ::Exception
|
|
218
|
+
error = $!
|
|
219
|
+
|
|
220
|
+
print_error(
|
|
221
|
+
"Error while running command #{method}: #{$!}")
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# If the dispatcher stack changed as a result of this command,
|
|
225
|
+
# break out
|
|
226
|
+
break if (dispatcher_stack.length != entries)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (found == false and error == false)
|
|
230
|
+
unknown_command(method, line)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
return found
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
#
|
|
238
|
+
# Runs the supplied command on the given dispatcher.
|
|
239
|
+
#
|
|
240
|
+
def run_command(dispatcher, method, arguments)
|
|
241
|
+
self.busy = true
|
|
242
|
+
|
|
243
|
+
if(blocked_command?(method))
|
|
244
|
+
print_error("The #{method} command has been disabled.")
|
|
245
|
+
else
|
|
246
|
+
dispatcher.send('cmd_' + method, *arguments)
|
|
247
|
+
end
|
|
248
|
+
self.busy = false
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
#
|
|
252
|
+
# If the command is unknown...
|
|
253
|
+
#
|
|
254
|
+
def unknown_command(method, line)
|
|
255
|
+
print_error("Unknown command: #{method}.")
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
#
|
|
259
|
+
# Push a dispatcher to the front of the stack.
|
|
260
|
+
#
|
|
261
|
+
def enstack_dispatcher(dispatcher)
|
|
262
|
+
self.dispatcher_stack.unshift(inst = dispatcher.new(self))
|
|
263
|
+
|
|
264
|
+
inst
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
#
|
|
268
|
+
# Pop a dispatcher from the front of the stacker.
|
|
269
|
+
#
|
|
270
|
+
def destack_dispatcher
|
|
271
|
+
self.dispatcher_stack.shift
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
#
|
|
275
|
+
# Adds the supplied dispatcher to the end of the dispatcher stack so that
|
|
276
|
+
# it doesn't affect any enstack'd dispatchers.
|
|
277
|
+
#
|
|
278
|
+
def append_dispatcher(dispatcher)
|
|
279
|
+
inst = dispatcher.new(self)
|
|
280
|
+
self.dispatcher_stack.each { |disp|
|
|
281
|
+
if (disp.name == inst.name)
|
|
282
|
+
raise RuntimeError.new("Attempting to load already loaded dispatcher #{disp.name}")
|
|
283
|
+
end
|
|
284
|
+
}
|
|
285
|
+
self.dispatcher_stack.push(inst)
|
|
286
|
+
|
|
287
|
+
inst
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
#
|
|
291
|
+
# Removes the supplied dispatcher instance.
|
|
292
|
+
#
|
|
293
|
+
def remove_dispatcher(name)
|
|
294
|
+
self.dispatcher_stack.delete_if { |inst|
|
|
295
|
+
(inst.name == name)
|
|
296
|
+
}
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
#
|
|
300
|
+
# Returns the current active dispatcher
|
|
301
|
+
#
|
|
302
|
+
def current_dispatcher
|
|
303
|
+
self.dispatcher_stack[0]
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
#
|
|
307
|
+
# Return a readable version of a help banner for all of the enstacked
|
|
308
|
+
# dispatchers.
|
|
309
|
+
#
|
|
310
|
+
def help_to_s(opts = {})
|
|
311
|
+
str = ''
|
|
312
|
+
|
|
313
|
+
dispatcher_stack.reverse.each { |dispatcher|
|
|
314
|
+
# No commands? Suckage.
|
|
315
|
+
next if ((dispatcher.respond_to?('commands') == false) or
|
|
316
|
+
(dispatcher.commands == nil) or
|
|
317
|
+
(dispatcher.commands.length == 0))
|
|
318
|
+
|
|
319
|
+
# Display the commands
|
|
320
|
+
tbl = Table.new(
|
|
321
|
+
'Header' => "#{dispatcher.name} Commands",
|
|
322
|
+
'Indent' => opts['Indent'] || 4,
|
|
323
|
+
'Columns' =>
|
|
324
|
+
[
|
|
325
|
+
'Command',
|
|
326
|
+
'Description'
|
|
327
|
+
],
|
|
328
|
+
'ColProps' =>
|
|
329
|
+
{
|
|
330
|
+
'Command' =>
|
|
331
|
+
{
|
|
332
|
+
'MaxWidth' => 12
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
dispatcher.commands.sort.each { |c|
|
|
337
|
+
tbl << c
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
str << "\n" + tbl.to_s + "\n"
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return str
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
#
|
|
349
|
+
# Returns nil for an empty set of blocked commands.
|
|
350
|
+
#
|
|
351
|
+
def blocked_command?(cmd)
|
|
352
|
+
return false if not self.blocked
|
|
353
|
+
self.blocked.has_key?(cmd)
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
#
|
|
357
|
+
# Block a specific command
|
|
358
|
+
#
|
|
359
|
+
def block_command(cmd)
|
|
360
|
+
self.blocked ||= {}
|
|
361
|
+
self.blocked[cmd] = true
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
#
|
|
365
|
+
# Unblock a specific command
|
|
366
|
+
#
|
|
367
|
+
def unblock_command(cmd)
|
|
368
|
+
self.blocked || return
|
|
369
|
+
self.blocked.delete(cmd)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
attr_accessor :dispatcher_stack # :nodoc:
|
|
374
|
+
attr_accessor :tab_words # :nodoc:
|
|
375
|
+
attr_accessor :busy # :nodoc:
|
|
376
|
+
attr_accessor :blocked # :nodoc:
|
|
377
|
+
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
end
|
|
381
|
+
end
|
|
382
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class acts as a base for all input mediums. It defines
|
|
10
|
+
# the interface that will be used by anything that wants to
|
|
11
|
+
# interact with a derived class.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Input
|
|
15
|
+
|
|
16
|
+
require 'rex/ui/text/input/stdio'
|
|
17
|
+
require 'rex/ui/text/input/readline'
|
|
18
|
+
require 'rex/ui/text/input/socket'
|
|
19
|
+
require 'rex/ui/text/color'
|
|
20
|
+
|
|
21
|
+
include Rex::Ui::Text::Color
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
self.eof = false
|
|
25
|
+
@config = {
|
|
26
|
+
:color => :auto, # true, false, :auto
|
|
27
|
+
}
|
|
28
|
+
super
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# Whether or not the input medium supports readline.
|
|
33
|
+
#
|
|
34
|
+
def supports_readline
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Stub for tab completion reset
|
|
40
|
+
#
|
|
41
|
+
def reset_tab_completion
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# Calls the underlying system read.
|
|
46
|
+
#
|
|
47
|
+
def sysread(len)
|
|
48
|
+
raise NotImplementedError
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# Gets a line of input
|
|
53
|
+
#
|
|
54
|
+
def gets
|
|
55
|
+
raise NotImplementedError
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Has the input medium reached end-of-file?
|
|
60
|
+
#
|
|
61
|
+
def eof?
|
|
62
|
+
return eof
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Returns a pollable file descriptor that is associated with this
|
|
67
|
+
# input medium.
|
|
68
|
+
#
|
|
69
|
+
def fd
|
|
70
|
+
raise NotImplementedError
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# Indicates whether or not this input medium is intrinsicly a
|
|
75
|
+
# shell provider. This would indicate whether or not it
|
|
76
|
+
# already expects to have a prompt.
|
|
77
|
+
#
|
|
78
|
+
def intrinsic_shell?
|
|
79
|
+
false
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def update_prompt(new_prompt = '', new_prompt_char = '')
|
|
83
|
+
self.prompt = new_prompt + new_prompt_char
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
attr_reader :config
|
|
87
|
+
|
|
88
|
+
def disable_color
|
|
89
|
+
return if not @config
|
|
90
|
+
@config[:color] = false
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def enable_color
|
|
94
|
+
return if not @config
|
|
95
|
+
@config[:color] = true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def auto_color
|
|
99
|
+
return if not @config
|
|
100
|
+
@config[:color] = :auto
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def update_prompt(prompt)
|
|
104
|
+
substitute_colors(prompt, true)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def reset_color
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
attr_accessor :eof, :prompt, :prompt_char, :config
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|