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,20 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
|
|
4
|
+
|
|
5
|
+
require 'rex/test'
|
|
6
|
+
require 'rex/proto/smb/utils'
|
|
7
|
+
|
|
8
|
+
class Rex::Proto::SMB::Utils::UnitTest < Test::Unit::TestCase
|
|
9
|
+
|
|
10
|
+
Klass = Rex::Proto::SMB::Utils
|
|
11
|
+
|
|
12
|
+
def test_nbname
|
|
13
|
+
|
|
14
|
+
nbdecoded = 'METASPLOITROCKS!'
|
|
15
|
+
nbencoded = 'ENEFFEEBFDFAEMEPEJFEFCEPEDELFDCB'
|
|
16
|
+
|
|
17
|
+
assert_equal(Klass.nbname_encode(nbdecoded), nbencoded )
|
|
18
|
+
assert_equal(Klass.nbname_decode(nbencoded), nbdecoded )
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'rex/proto/sunrpc/client'
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
require 'rex/socket'
|
|
2
|
+
require 'rex/encoder/xdr'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Proto
|
|
6
|
+
module SunRPC
|
|
7
|
+
|
|
8
|
+
class RPCTimeout < ::Interrupt
|
|
9
|
+
def initialize(msg = 'Operation timed out.')
|
|
10
|
+
@msg = msg
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_s
|
|
14
|
+
@msg
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# XXX: CPORT!
|
|
19
|
+
class Client
|
|
20
|
+
AUTH_NULL = 0
|
|
21
|
+
AUTH_UNIX = 1
|
|
22
|
+
|
|
23
|
+
PMAP_PROG = 100000
|
|
24
|
+
PMAP_VERS = 2
|
|
25
|
+
PMAP_GETPORT = 3
|
|
26
|
+
|
|
27
|
+
CALL = 0
|
|
28
|
+
|
|
29
|
+
attr_accessor :rhost, :rport, :proto, :program, :version
|
|
30
|
+
attr_accessor :pport, :call_sock, :timeout, :context
|
|
31
|
+
|
|
32
|
+
attr_accessor :should_fragment
|
|
33
|
+
|
|
34
|
+
def initialize(opts)
|
|
35
|
+
self.rhost = opts[:rhost]
|
|
36
|
+
self.rport = opts[:rport]
|
|
37
|
+
self.program = opts[:program]
|
|
38
|
+
self.version = opts[:version]
|
|
39
|
+
self.timeout = opts[:timeout] || 20
|
|
40
|
+
self.context = opts[:context] || {}
|
|
41
|
+
self.proto = opts[:proto]
|
|
42
|
+
|
|
43
|
+
if self.proto.downcase !~ /^(tcp|udp)$/
|
|
44
|
+
raise ::Rex::ArgumentError, 'Protocol is not "tcp" or "udp"'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
@pport = nil
|
|
48
|
+
|
|
49
|
+
@auth_type = AUTH_NULL
|
|
50
|
+
@auth_data = ''
|
|
51
|
+
|
|
52
|
+
@call_sock = nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# XXX: Add optional parameter to have proto be something else
|
|
56
|
+
def create()
|
|
57
|
+
proto_num = 0
|
|
58
|
+
if @proto.eql?('tcp')
|
|
59
|
+
proto_num = 6
|
|
60
|
+
elsif @proto.eql?('udp')
|
|
61
|
+
proto_num = 17
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
buf =
|
|
65
|
+
Rex::Encoder::XDR.encode(CALL, 2, PMAP_PROG, PMAP_VERS, PMAP_GETPORT,
|
|
66
|
+
@auth_type, [@auth_data, 400], AUTH_NULL, '',
|
|
67
|
+
@program, @version, proto_num, 0)
|
|
68
|
+
|
|
69
|
+
sock = make_rpc(@proto, @rhost, @rport)
|
|
70
|
+
send_rpc(sock, buf)
|
|
71
|
+
ret = recv_rpc(sock)
|
|
72
|
+
close_rpc(sock)
|
|
73
|
+
|
|
74
|
+
return ret
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def call(procedure, buffer, maxwait = self.timeout)
|
|
78
|
+
buf =
|
|
79
|
+
Rex::Encoder::XDR.encode(CALL, 2, @program, @version, procedure,
|
|
80
|
+
@auth_type, [@auth_data, 400], AUTH_NULL, '')+
|
|
81
|
+
buffer
|
|
82
|
+
|
|
83
|
+
if ! @call_sock
|
|
84
|
+
@call_sock = make_rpc(@proto, @rhost, @pport)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
send_rpc(@call_sock, buf)
|
|
88
|
+
recv_rpc(@call_sock, maxwait)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def destroy
|
|
92
|
+
close_rpc(@call_sock) if @call_sock
|
|
93
|
+
@call_sock = nil
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def authnull_create
|
|
97
|
+
@auth_type = AUTH_NULL
|
|
98
|
+
@auth_data = ''
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def authunix_create(host, uid, gid, groupz)
|
|
102
|
+
raise ::Rex::ArgumentError, 'Hostname length is too long' if host.length > 255
|
|
103
|
+
# 10?
|
|
104
|
+
raise ::Rex::ArgumentError, 'Too many groups' if groupz.length > 10
|
|
105
|
+
|
|
106
|
+
@auth_type = AUTH_UNIX
|
|
107
|
+
@auth_data =
|
|
108
|
+
Rex::Encoder::XDR.encode(0, host, uid, gid, groupz) # XXX: TIME! GROUPZ?!
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# XXX: Dirty, integrate some sort of request system into create/call?
|
|
112
|
+
def portmap_req(host, port, rpc_vers, procedure, buffer)
|
|
113
|
+
buf = Rex::Encoder::XDR.encode(CALL, 2, PMAP_PROG, rpc_vers, procedure,
|
|
114
|
+
AUTH_NULL, '', AUTH_NULL, '') + buffer
|
|
115
|
+
|
|
116
|
+
sock = make_rpc('tcp', host, port)
|
|
117
|
+
send_rpc(sock, buf)
|
|
118
|
+
ret = recv_rpc(sock)
|
|
119
|
+
close_rpc(sock)
|
|
120
|
+
|
|
121
|
+
return ret
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
private
|
|
125
|
+
def make_rpc(proto, host, port)
|
|
126
|
+
Rex::Socket.create(
|
|
127
|
+
'PeerHost' => host,
|
|
128
|
+
'PeerPort' => port,
|
|
129
|
+
'Proto' => proto,
|
|
130
|
+
'Timeout' => self.timeout,
|
|
131
|
+
'Context' => self.context
|
|
132
|
+
)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def build_tcp(buf)
|
|
136
|
+
if !self.should_fragment
|
|
137
|
+
return Rex::Encoder::XDR.encode(0x80000000 | buf.length) + buf
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
str = buf.dup
|
|
141
|
+
|
|
142
|
+
fragmented = ''
|
|
143
|
+
|
|
144
|
+
while (str.size > 0)
|
|
145
|
+
frag = str.slice!(0, rand(3) + 1)
|
|
146
|
+
len = frag.size
|
|
147
|
+
if str.size == 0
|
|
148
|
+
len |= 0x80000000
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
fragmented += Rex::Encoder::XDR.encode(len) + frag
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
return fragmented
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def send_rpc(sock, buf)
|
|
158
|
+
buf = gen_xid() + buf
|
|
159
|
+
if sock.type?.eql?('tcp')
|
|
160
|
+
buf = build_tcp(buf)
|
|
161
|
+
end
|
|
162
|
+
sock.put(buf)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def recv_rpc(sock, maxwait=self.timeout)
|
|
166
|
+
|
|
167
|
+
buf = nil
|
|
168
|
+
begin
|
|
169
|
+
Timeout.timeout(maxwait) { buf = sock.get }
|
|
170
|
+
rescue ::Timeout
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
return nil if not buf
|
|
174
|
+
|
|
175
|
+
buf.slice!(0..3)
|
|
176
|
+
if sock.type?.eql?('tcp')
|
|
177
|
+
buf.slice!(0..3)
|
|
178
|
+
end
|
|
179
|
+
return buf if buf.length > 1
|
|
180
|
+
return nil
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def close_rpc(sock)
|
|
184
|
+
sock.close
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def gen_xid
|
|
188
|
+
return Rex::Encoder::XDR.encode(rand(0xffffffff) + 1)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
data/lib/rex/script.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# This class provides an easy interface for loading and executing ruby
|
|
8
|
+
# scripts.
|
|
9
|
+
#
|
|
10
|
+
###
|
|
11
|
+
module Script
|
|
12
|
+
|
|
13
|
+
class Completed < ::RuntimeError
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Reads the contents of the supplied file and exeutes them.
|
|
18
|
+
#
|
|
19
|
+
def self.execute_file(file, in_binding = nil)
|
|
20
|
+
str = ''
|
|
21
|
+
buf = ::File.read(file, ::File.size(file))
|
|
22
|
+
execute(buf, in_binding)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Executes arbitrary ruby from the supplied string.
|
|
27
|
+
#
|
|
28
|
+
def self.execute(str, in_binding = nil)
|
|
29
|
+
begin
|
|
30
|
+
eval(str, in_binding)
|
|
31
|
+
rescue Completed
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
require 'rex/script/base'
|
|
40
|
+
require 'rex/script/shell'
|
|
41
|
+
require 'rex/script/meterpreter'
|
|
42
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Script
|
|
3
|
+
class Base
|
|
4
|
+
|
|
5
|
+
class OutputSink
|
|
6
|
+
def print(msg); end
|
|
7
|
+
def print_line(msg); end
|
|
8
|
+
def print_status(msg); end
|
|
9
|
+
def print_good(msg); end
|
|
10
|
+
def print_error(msg); end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
attr_accessor :client, :framework, :path, :error, :args
|
|
14
|
+
attr_accessor :session, :sink, :workspace
|
|
15
|
+
|
|
16
|
+
def initialize(client, path)
|
|
17
|
+
self.client = client
|
|
18
|
+
self.framework = client.framework
|
|
19
|
+
self.path = path
|
|
20
|
+
self.sink = OutputSink.new
|
|
21
|
+
|
|
22
|
+
if(client.framework.db and client.framework.db.active)
|
|
23
|
+
self.workspace = client.framework.db.find_workspace( client.workspace.to_s ) || client.framework.db.workspace
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Convenience aliases
|
|
27
|
+
self.session = self.client
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def output
|
|
31
|
+
client.user_output || self.sink
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def completed
|
|
35
|
+
raise Rex::Script::Completed
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def run(args)
|
|
39
|
+
self.args = args
|
|
40
|
+
begin
|
|
41
|
+
eval(::File.read(self.path, ::File.size(self.path)), binding )
|
|
42
|
+
rescue ::Interrupt
|
|
43
|
+
rescue ::Rex::Script::Completed
|
|
44
|
+
rescue ::Exception => e
|
|
45
|
+
self.error = e
|
|
46
|
+
raise e
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def print(*args); output.print(*args); end
|
|
51
|
+
def print_status(*args); output.print_status(*args); end
|
|
52
|
+
def print_error(*args); output.print_error(*args); end
|
|
53
|
+
def print_good(*args); output.print_good(*args); end
|
|
54
|
+
def print_line(*args); output.print_line(*args); end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
data/lib/rex/service.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'rex'
|
|
2
|
+
require 'rex/proto'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
|
|
6
|
+
###
|
|
7
|
+
#
|
|
8
|
+
# The service module is used to extend classes that are passed into the
|
|
9
|
+
# service manager start routine. It provides extra methods, such as reference
|
|
10
|
+
# counting, that are used to track the service instances more uniformly.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
module Service
|
|
14
|
+
include Ref
|
|
15
|
+
|
|
16
|
+
require 'rex/services/local_relay'
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# Returns the hardcore, as in porno, alias for this service. This is used
|
|
20
|
+
# by the service manager to manage singleton services.
|
|
21
|
+
#
|
|
22
|
+
def self.hardcore_alias(*args)
|
|
23
|
+
return "__#{args}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def deref
|
|
27
|
+
rv = super
|
|
28
|
+
|
|
29
|
+
# If there's only one reference, then it's the service managers.
|
|
30
|
+
if @_references == 1
|
|
31
|
+
Rex::ServiceManager.stop_service(self)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
rv
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Calls stop on the service once the ref count drops.
|
|
39
|
+
#
|
|
40
|
+
def cleanup
|
|
41
|
+
stop
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
attr_accessor :alias
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
require 'singleton'
|
|
2
|
+
require 'rex'
|
|
3
|
+
require 'rex/service'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class manages service allocation and interaction. This class can be
|
|
10
|
+
# used to start HTTP servers and manage them and all that stuff. Yup.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class ServiceManager < Hash
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# This class is a singleton.
|
|
17
|
+
#
|
|
18
|
+
include Singleton
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# Calls the instance method to start a service.
|
|
22
|
+
#
|
|
23
|
+
def self.start(klass, *args)
|
|
24
|
+
self.instance.start(klass, *args)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Calls the instance method to stop a service.
|
|
29
|
+
#
|
|
30
|
+
def self.stop(klass, *args)
|
|
31
|
+
self.instance.stop(klass, *args)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Stop a service using the alias that's associated with it.
|
|
36
|
+
#
|
|
37
|
+
def self.stop_by_alias(als)
|
|
38
|
+
self.instance.stop_by_alias(als)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Stop the supplied service instance.
|
|
43
|
+
#
|
|
44
|
+
def self.stop_service(service)
|
|
45
|
+
self.instance.stop_service(service)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#
|
|
49
|
+
# Starts a service and assigns it a unique name in the service hash.
|
|
50
|
+
#
|
|
51
|
+
def start(klass, *args)
|
|
52
|
+
# Get the hardcore alias.
|
|
53
|
+
hals = "#{klass}" + klass.hardcore_alias(*args)
|
|
54
|
+
|
|
55
|
+
# Has a service already been constructed for this guy? If so, increment
|
|
56
|
+
# its reference count like it aint no thang.
|
|
57
|
+
if (inst = self[hals])
|
|
58
|
+
inst.ref
|
|
59
|
+
return inst
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
inst = klass.new(*args)
|
|
63
|
+
als = inst.alias
|
|
64
|
+
|
|
65
|
+
# Find an alias that isn't taken.
|
|
66
|
+
if (self[als])
|
|
67
|
+
cnt = 1
|
|
68
|
+
cnt += 1 while (self[als + " #{cnt}"])
|
|
69
|
+
als = inst.alias + " #{cnt}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Extend the instance as a service.
|
|
73
|
+
inst.extend(Rex::Service)
|
|
74
|
+
|
|
75
|
+
# Re-aliases the instance.
|
|
76
|
+
inst.alias = als
|
|
77
|
+
|
|
78
|
+
# Fire up the engines. If an error occurs an exception will be
|
|
79
|
+
# raised.
|
|
80
|
+
inst.start
|
|
81
|
+
|
|
82
|
+
# Alias associate and initialize reference counting
|
|
83
|
+
self[als] = self[hals] = inst.refinit
|
|
84
|
+
|
|
85
|
+
# Pass the caller a reference
|
|
86
|
+
inst.ref
|
|
87
|
+
|
|
88
|
+
inst
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#
|
|
92
|
+
# Stop a service using a given klass and arguments. These should mirror
|
|
93
|
+
# what was originally passed to start exactly. If the reference count of
|
|
94
|
+
# the service drops to zero the service will be destroyed.
|
|
95
|
+
#
|
|
96
|
+
def stop(klass, *args)
|
|
97
|
+
stop_service(hals[hardcore_alias(klass, *args)])
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
#
|
|
101
|
+
# Stops a service using the provided alias.
|
|
102
|
+
#
|
|
103
|
+
def stop_by_alias(als)
|
|
104
|
+
stop_service(self[als])
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
#
|
|
108
|
+
# Stops a service instance.
|
|
109
|
+
#
|
|
110
|
+
def stop_service(inst)
|
|
111
|
+
# Stop the service and be done wif it, but only if the number of
|
|
112
|
+
# references has dropped to zero
|
|
113
|
+
if (inst)
|
|
114
|
+
# Since the instance may have multiple aliases, scan through
|
|
115
|
+
# all the pairs for matching stuff.
|
|
116
|
+
self.each_pair { |cals, cinst|
|
|
117
|
+
self.delete(cals) if (inst == cinst)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# Lose the list-held reference to the instance
|
|
121
|
+
inst.deref
|
|
122
|
+
|
|
123
|
+
return true
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Return false if the service isn't there
|
|
127
|
+
return false
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
protected
|
|
131
|
+
|
|
132
|
+
#
|
|
133
|
+
# Returns the alias for a given service instance.
|
|
134
|
+
#
|
|
135
|
+
def hardcore_alias(klass, *args)
|
|
136
|
+
"__#{klass.name}#{args}"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
end
|