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,75 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
require 'rex/io/stream_abstraction'
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# This class implements input against a socket.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Input::Buffer < Rex::Ui::Text::Input
|
|
15
|
+
|
|
16
|
+
class BufferSock
|
|
17
|
+
include Rex::IO::StreamAbstraction
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize
|
|
21
|
+
@sock = BufferSock.new
|
|
22
|
+
@sock.initialize_abstraction
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def close
|
|
26
|
+
@sock.cleanup_abstraction
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def sysread(len = 1)
|
|
30
|
+
@sock.rsock.sysread(len)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def put(msg)
|
|
34
|
+
@sock.lsock.write(msg)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Wait for a line of input to be read from a socket.
|
|
39
|
+
#
|
|
40
|
+
def gets
|
|
41
|
+
# Initialize the line buffer
|
|
42
|
+
line = ''
|
|
43
|
+
|
|
44
|
+
# Read data one byte at a time until we see a LF
|
|
45
|
+
while (true)
|
|
46
|
+
break if line.include?("\n")
|
|
47
|
+
|
|
48
|
+
# Read another character of input
|
|
49
|
+
char = @sock.rsock.getc
|
|
50
|
+
|
|
51
|
+
# Append this character to the string
|
|
52
|
+
line << char
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
return line
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Returns whether or not EOF has been reached on stdin.
|
|
60
|
+
#
|
|
61
|
+
def eof?
|
|
62
|
+
@sock.lsock.closed?
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Returns the file descriptor associated with a socket.
|
|
67
|
+
#
|
|
68
|
+
def fd
|
|
69
|
+
return @sock.rsock
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
begin
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# This class implements standard input using readline against
|
|
12
|
+
# standard input. It supports tab completion.
|
|
13
|
+
#
|
|
14
|
+
###
|
|
15
|
+
class Input::Readline < Rex::Ui::Text::Input
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# Initializes the readline-aware Input instance for text.
|
|
19
|
+
#
|
|
20
|
+
def initialize(tab_complete_proc = nil)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if(not Object.const_defined?('Readline'))
|
|
24
|
+
begin
|
|
25
|
+
require 'readline'
|
|
26
|
+
rescue ::LoadError
|
|
27
|
+
require 'readline_compatible'
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
self.extend(::Readline)
|
|
32
|
+
|
|
33
|
+
if (tab_complete_proc)
|
|
34
|
+
::Readline.basic_word_break_characters = "\x00"
|
|
35
|
+
::Readline.completion_proc = tab_complete_proc
|
|
36
|
+
@rl_saved_proc = tab_complete_proc
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Reattach the original completion proc
|
|
42
|
+
#
|
|
43
|
+
def reset_tab_completion(tab_complete_proc = nil)
|
|
44
|
+
::Readline.basic_word_break_characters = "\x00"
|
|
45
|
+
::Readline.completion_proc = tab_complete_proc || @rl_saved_proc
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#
|
|
49
|
+
# Whether or not the input medium supports readline.
|
|
50
|
+
#
|
|
51
|
+
def supports_readline
|
|
52
|
+
true
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Calls sysread on the standard input handle.
|
|
57
|
+
#
|
|
58
|
+
def sysread(len = 1)
|
|
59
|
+
begin
|
|
60
|
+
self.fd.sysread(len)
|
|
61
|
+
rescue ::Errno::EINTR
|
|
62
|
+
retry
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Read a line from stdin
|
|
68
|
+
#
|
|
69
|
+
def gets()
|
|
70
|
+
begin
|
|
71
|
+
self.fd.gets()
|
|
72
|
+
rescue ::Errno::EINTR
|
|
73
|
+
retry
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Stick readline into a low-priority thread so that the scheduler doesn't slow
|
|
79
|
+
# down other background threads. This is important when there are many active
|
|
80
|
+
# background jobs, such as when the user is running Karmetasploit
|
|
81
|
+
#
|
|
82
|
+
def pgets
|
|
83
|
+
|
|
84
|
+
line = nil
|
|
85
|
+
orig = Thread.current.priority
|
|
86
|
+
|
|
87
|
+
begin
|
|
88
|
+
Thread.current.priority = -20
|
|
89
|
+
output.prompting
|
|
90
|
+
line = ::Readline.readline(prompt, true)
|
|
91
|
+
::Readline::HISTORY.pop if (line and line.empty?)
|
|
92
|
+
ensure
|
|
93
|
+
Thread.current.priority = orig || 0
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
line
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# Returns the output pipe handle
|
|
101
|
+
#
|
|
102
|
+
def fd
|
|
103
|
+
$stdin
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
#
|
|
107
|
+
# Indicates that this input medium as a shell builtin, no need
|
|
108
|
+
# to extend.
|
|
109
|
+
#
|
|
110
|
+
def intrinsic_shell?
|
|
111
|
+
true
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
#
|
|
115
|
+
# The prompt that is to be displayed.
|
|
116
|
+
#
|
|
117
|
+
attr_accessor :prompt
|
|
118
|
+
#
|
|
119
|
+
# The output handle to use when displaying the prompt.
|
|
120
|
+
#
|
|
121
|
+
attr_accessor :output
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
rescue LoadError
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements input against a socket.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Input::Socket < Rex::Ui::Text::Input
|
|
13
|
+
|
|
14
|
+
def initialize(sock)
|
|
15
|
+
@sock = sock
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# Sockets do not currently support readline.
|
|
20
|
+
#
|
|
21
|
+
def supports_readline
|
|
22
|
+
false
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Reads input from the raw socket.
|
|
27
|
+
#
|
|
28
|
+
def sysread(len = 1)
|
|
29
|
+
@sock.sysread(len)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Wait for a line of input to be read from a socket.
|
|
34
|
+
#
|
|
35
|
+
def gets
|
|
36
|
+
|
|
37
|
+
# Initialize the line buffer
|
|
38
|
+
line = ''
|
|
39
|
+
|
|
40
|
+
# Read data one byte at a time until we see a LF
|
|
41
|
+
while (true)
|
|
42
|
+
|
|
43
|
+
break if line.include?("\n")
|
|
44
|
+
|
|
45
|
+
# Read another character of input
|
|
46
|
+
char = @sock.getc
|
|
47
|
+
if char.nil?
|
|
48
|
+
@sock.close
|
|
49
|
+
return
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Telnet sends 0x04 as EOF
|
|
53
|
+
if (char == 4)
|
|
54
|
+
@sock.write("[*] Caught ^D, closing the socket...\n")
|
|
55
|
+
@sock.close
|
|
56
|
+
return
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Append this character to the string
|
|
60
|
+
line << char
|
|
61
|
+
|
|
62
|
+
# Handle telnet sequences
|
|
63
|
+
case line
|
|
64
|
+
when /\xff\xf4\xff\xfd\x06/
|
|
65
|
+
@sock.write("[*] Caught ^C, closing the socket...\n")
|
|
66
|
+
@sock.close
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
when /\xff\xed\xff\xfd\x06/
|
|
70
|
+
@sock.write("[*] Caught ^Z\n")
|
|
71
|
+
return
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
return line
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Returns whether or not EOF has been reached on stdin.
|
|
80
|
+
#
|
|
81
|
+
def eof?
|
|
82
|
+
@sock.closed?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# Returns the file descriptor associated with a socket.
|
|
87
|
+
#
|
|
88
|
+
def fd
|
|
89
|
+
return @sock
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements input against standard in.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Input::Stdio < Rex::Ui::Text::Input
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Reads text from standard input.
|
|
16
|
+
#
|
|
17
|
+
def sysread(len = 1)
|
|
18
|
+
$stdin.sysread(len)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#
|
|
22
|
+
# Wait for a line of input to be read from standard input.
|
|
23
|
+
#
|
|
24
|
+
def gets
|
|
25
|
+
return $stdin.gets
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# Returns whether or not EOF has been reached on stdin.
|
|
30
|
+
#
|
|
31
|
+
def eof?
|
|
32
|
+
$stdin.closed?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
#
|
|
36
|
+
# Returns the file descriptor associated with standard input.
|
|
37
|
+
#
|
|
38
|
+
def fd
|
|
39
|
+
return $stdin
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Ui
|
|
3
|
+
module Text
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# This class wraps the creation of an IRB shell.
|
|
8
|
+
#
|
|
9
|
+
###
|
|
10
|
+
class IrbShell
|
|
11
|
+
|
|
12
|
+
@@IrbInitialized = false
|
|
13
|
+
|
|
14
|
+
def initialize(binding)
|
|
15
|
+
@binding_ctx = binding
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# Runs the IRB shell until completion. The binding parameter initializes
|
|
20
|
+
# IRB to the appropriate binding context.
|
|
21
|
+
#
|
|
22
|
+
def run
|
|
23
|
+
# Initialize IRB by setting up its internal configuration hash and
|
|
24
|
+
# stuff.
|
|
25
|
+
if (@@IrbInitialized == false)
|
|
26
|
+
load('irb.rb')
|
|
27
|
+
|
|
28
|
+
IRB.setup(nil)
|
|
29
|
+
IRB.conf[:PROMPT_MODE] = :SIMPLE
|
|
30
|
+
|
|
31
|
+
@@IrbInitialized = true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Create a new IRB instance
|
|
35
|
+
irb = IRB::Irb.new(IRB::WorkSpace.new(@binding_ctx))
|
|
36
|
+
|
|
37
|
+
# Set the primary irb context so that exit and other intrinsic
|
|
38
|
+
# commands will work.
|
|
39
|
+
IRB.conf[:MAIN_CONTEXT] = irb.context
|
|
40
|
+
|
|
41
|
+
# Trap interrupt
|
|
42
|
+
trap("SIGINT") do
|
|
43
|
+
irb.signal_handle
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Keep processing input until the cows come home...
|
|
47
|
+
catch(:IRB_EXIT) do
|
|
48
|
+
irb.eval_input
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements text-based output but is not
|
|
10
|
+
# tied to an output medium.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Output < Rex::Ui::Output
|
|
14
|
+
|
|
15
|
+
require 'rex/ui/text/output/stdio'
|
|
16
|
+
require 'rex/ui/text/output/socket'
|
|
17
|
+
require 'rex/ui/text/output/buffer'
|
|
18
|
+
require 'rex/ui/text/output/file'
|
|
19
|
+
require 'rex/ui/text/color'
|
|
20
|
+
|
|
21
|
+
include Rex::Ui::Text::Color
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
@config = {
|
|
25
|
+
:color => :auto, # true, false, :auto
|
|
26
|
+
}
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
attr_reader :config
|
|
30
|
+
|
|
31
|
+
def disable_color
|
|
32
|
+
@config[:color] = false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def enable_color
|
|
36
|
+
@config[:color] = true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def auto_color
|
|
40
|
+
@config[:color] = :auto
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def update_prompt(prompt = nil)
|
|
44
|
+
return if prompt.nil?
|
|
45
|
+
substitute_colors(prompt, true)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def print_error(msg = '')
|
|
49
|
+
print_line("%bld%red[-]%clr #{msg}")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def print_good(msg = '')
|
|
53
|
+
print_line("%bld%grn[+]%clr #{msg}")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def print_debug(msg = '')
|
|
57
|
+
print_line("%bld%cya[!]%clr #{msg}")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def print_status(msg = '')
|
|
61
|
+
print_line("%bld%blu[*]%clr #{msg}")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def print_line(msg = '')
|
|
65
|
+
print(msg + "\n")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def print(msg = '')
|
|
69
|
+
print_raw(substitute_colors(msg))
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def reset
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|