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,315 @@
|
|
|
1
|
+
require 'rex/post/meterpreter'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Ui
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# The user interface portion of the standard API extension.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Console::CommandDispatcher::Stdapi::Ui
|
|
14
|
+
|
|
15
|
+
Klass = Console::CommandDispatcher::Stdapi::Ui
|
|
16
|
+
|
|
17
|
+
include Console::CommandDispatcher
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
# List of supported commands.
|
|
21
|
+
#
|
|
22
|
+
def commands
|
|
23
|
+
{
|
|
24
|
+
"idletime" => "Returns the number of seconds the remote user has been idle",
|
|
25
|
+
"uictl" => "Control some of the user interface components",
|
|
26
|
+
"enumdesktops" => "List all accessible desktops and window stations",
|
|
27
|
+
"getdesktop" => "Get the current meterpreter desktop",
|
|
28
|
+
"setdesktop" => "Change the meterpreters current desktop",
|
|
29
|
+
"keyscan_start" => "Start capturing keystrokes",
|
|
30
|
+
"keyscan_stop" => "Stop capturing keystrokes",
|
|
31
|
+
"keyscan_dump" => "Dump the keystroke buffer",
|
|
32
|
+
"screenshot" => "Grab a screenshot of the interactive desktop",
|
|
33
|
+
|
|
34
|
+
# not working yet
|
|
35
|
+
# "unlockdesktop" => "Unlock or lock the workstation (must be inside winlogon.exe)",
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Name for this dispatcher.
|
|
41
|
+
#
|
|
42
|
+
def name
|
|
43
|
+
"Stdapi: User interface"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# Executes a command with some options.
|
|
48
|
+
#
|
|
49
|
+
def cmd_idletime(*args)
|
|
50
|
+
seconds = client.ui.idle_time
|
|
51
|
+
|
|
52
|
+
print_line(
|
|
53
|
+
"User has been idle for: #{Rex::ExtTime.sec_to_s(seconds)}")
|
|
54
|
+
|
|
55
|
+
return true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Enables/disables user interface mice and keyboards on the remote machine.
|
|
60
|
+
#
|
|
61
|
+
def cmd_uictl(*args)
|
|
62
|
+
if (args.length < 2)
|
|
63
|
+
print_line(
|
|
64
|
+
"Usage: uictl [enable/disable] [keyboard/mouse]")
|
|
65
|
+
return true
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
case args[0]
|
|
69
|
+
when 'enable'
|
|
70
|
+
case args[1]
|
|
71
|
+
when 'keyboard'
|
|
72
|
+
print_line("Enabling keyboard...")
|
|
73
|
+
client.ui.enable_keyboard
|
|
74
|
+
when 'mouse'
|
|
75
|
+
print_line("Enabling mouse...")
|
|
76
|
+
client.ui.enable_mouse
|
|
77
|
+
else
|
|
78
|
+
print_error("Unsupported user interface device: #{args[1]}")
|
|
79
|
+
end
|
|
80
|
+
when 'disable'
|
|
81
|
+
case args[1]
|
|
82
|
+
when 'keyboard'
|
|
83
|
+
print_line("Disabling keyboard...")
|
|
84
|
+
client.ui.disable_keyboard
|
|
85
|
+
when 'mouse'
|
|
86
|
+
print_line("Disabling mouse...")
|
|
87
|
+
client.ui.disable_mouse
|
|
88
|
+
else
|
|
89
|
+
print_error("Unsupported user interface device: #{args[1]}")
|
|
90
|
+
end
|
|
91
|
+
else
|
|
92
|
+
print_error("Unsupported command: #{args[0]}")
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
return true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#
|
|
99
|
+
# Grab a screenshot of the current interactive desktop.
|
|
100
|
+
#
|
|
101
|
+
def cmd_screenshot( *args )
|
|
102
|
+
path = Rex::Text.rand_text_alpha(8) + ".jpeg"
|
|
103
|
+
quality = 50
|
|
104
|
+
view = true
|
|
105
|
+
|
|
106
|
+
screenshot_opts = Rex::Parser::Arguments.new(
|
|
107
|
+
"-h" => [ false, "Help Banner." ],
|
|
108
|
+
"-q" => [ true, "The JPEG image quality (Default: '#{quality}')" ],
|
|
109
|
+
"-p" => [ true, "The JPEG image path (Default: '#{path}')" ],
|
|
110
|
+
"-v" => [ true, "Automatically view the JPEG image (Default: '#{view}')" ]
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
screenshot_opts.parse( args ) { | opt, idx, val |
|
|
114
|
+
case opt
|
|
115
|
+
when "-h"
|
|
116
|
+
print_line( "Usage: screenshot [options]\n" )
|
|
117
|
+
print_line( "Grab a screenshot of the current interactive desktop." )
|
|
118
|
+
print_line( screenshot_opts.usage )
|
|
119
|
+
return
|
|
120
|
+
when "-q"
|
|
121
|
+
quality = val.to_i
|
|
122
|
+
when "-p"
|
|
123
|
+
path = val
|
|
124
|
+
when "-v"
|
|
125
|
+
view = false if ( val =~ /^(f|n|0)/i )
|
|
126
|
+
end
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
data = client.ui.screenshot( quality )
|
|
130
|
+
|
|
131
|
+
if( data )
|
|
132
|
+
::File.open( path, 'wb' ) do |fd|
|
|
133
|
+
fd.write( data )
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
path = ::File.expand_path( path )
|
|
137
|
+
|
|
138
|
+
print_line( "Screenshot saved to: #{path}" )
|
|
139
|
+
|
|
140
|
+
Rex::Compat.open_file( path ) if view
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
return true
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
#
|
|
147
|
+
# Enumerate desktops
|
|
148
|
+
#
|
|
149
|
+
def cmd_enumdesktops(*args)
|
|
150
|
+
print_line( "Enumerating all accessible desktops" )
|
|
151
|
+
|
|
152
|
+
desktops = client.ui.enum_desktops
|
|
153
|
+
|
|
154
|
+
desktopstable = Rex::Ui::Text::Table.new(
|
|
155
|
+
'Header' => "Desktops",
|
|
156
|
+
'Indent' => 4,
|
|
157
|
+
'Columns' => [ "Session",
|
|
158
|
+
"Station",
|
|
159
|
+
"Name"
|
|
160
|
+
]
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
desktops.each { | desktop |
|
|
164
|
+
session = desktop['session'] == 0xFFFFFFFF ? '' : desktop['session'].to_s
|
|
165
|
+
desktopstable << [ session, desktop['station'], desktop['name'] ]
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if( desktops.length == 0 )
|
|
169
|
+
print_line( "No accessible desktops were found." )
|
|
170
|
+
else
|
|
171
|
+
print( "\n" + desktopstable.to_s + "\n" )
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
return true
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
#
|
|
178
|
+
# Get the current meterpreter desktop.
|
|
179
|
+
#
|
|
180
|
+
def cmd_getdesktop(*args)
|
|
181
|
+
|
|
182
|
+
desktop = client.ui.get_desktop
|
|
183
|
+
|
|
184
|
+
session = desktop['session'] == 0xFFFFFFFF ? '' : "Session #{desktop['session'].to_s}\\"
|
|
185
|
+
|
|
186
|
+
print_line( "#{session}#{desktop['station']}\\#{desktop['name']}" )
|
|
187
|
+
|
|
188
|
+
return true
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
#
|
|
192
|
+
# Change the meterpreters current desktop.
|
|
193
|
+
#
|
|
194
|
+
def cmd_setdesktop( *args )
|
|
195
|
+
|
|
196
|
+
switch = false
|
|
197
|
+
dsession = -1
|
|
198
|
+
dstation = 'WinSta0'
|
|
199
|
+
dname = 'Default'
|
|
200
|
+
|
|
201
|
+
setdesktop_opts = Rex::Parser::Arguments.new(
|
|
202
|
+
"-h" => [ false, "Help Banner." ],
|
|
203
|
+
#"-s" => [ true, "The session (Default: '#{dsession}')" ],
|
|
204
|
+
"-w" => [ true, "The window station (Default: '#{dstation}')" ],
|
|
205
|
+
"-n" => [ true, "The desktop name (Default: '#{dname}')" ],
|
|
206
|
+
"-i" => [ true, "Set this desktop as the interactive desktop (Default: '#{switch}')" ]
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
setdesktop_opts.parse( args ) { | opt, idx, val |
|
|
210
|
+
case opt
|
|
211
|
+
when "-h"
|
|
212
|
+
print_line( "Usage: setdesktop [options]\n" )
|
|
213
|
+
print_line( "Change the meterpreters current desktop." )
|
|
214
|
+
print_line( setdesktop_opts.usage )
|
|
215
|
+
return
|
|
216
|
+
#when "-s"
|
|
217
|
+
# dsession = val.to_i
|
|
218
|
+
when "-w"
|
|
219
|
+
dstation = val
|
|
220
|
+
when "-n"
|
|
221
|
+
dname = val
|
|
222
|
+
when "-i"
|
|
223
|
+
switch = true if ( val =~ /^(t|y|1)/i )
|
|
224
|
+
end
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if( client.ui.set_desktop( dsession, dstation, dname, switch ) )
|
|
228
|
+
print_line( "#{ switch ? 'Switched' : 'Changed' } to desktop #{dstation}\\#{dname}" )
|
|
229
|
+
else
|
|
230
|
+
print_line( "Failed to #{ switch ? 'switch' : 'change' } to desktop #{dstation}\\#{dname}" )
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
return true
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
#
|
|
237
|
+
# Unlock or lock the desktop
|
|
238
|
+
#
|
|
239
|
+
def cmd_unlockdesktop(*args)
|
|
240
|
+
mode = 0
|
|
241
|
+
if(args.length > 0)
|
|
242
|
+
mode = args[0].to_i
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
if(mode == 0)
|
|
246
|
+
print_line("Unlocking the workstation...")
|
|
247
|
+
client.ui.unlock_desktop(true)
|
|
248
|
+
else
|
|
249
|
+
print_line("Locking the workstation...")
|
|
250
|
+
client.ui.unlock_desktop(false)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
return true
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
#
|
|
257
|
+
# Start the keyboard sniffer
|
|
258
|
+
#
|
|
259
|
+
def cmd_keyscan_start(*args)
|
|
260
|
+
print_line("Starting the keystroke sniffer...")
|
|
261
|
+
client.ui.keyscan_start
|
|
262
|
+
return true
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
#
|
|
266
|
+
# Stop the keyboard sniffer
|
|
267
|
+
#
|
|
268
|
+
def cmd_keyscan_stop(*args)
|
|
269
|
+
print_line("Stopping the keystroke sniffer...")
|
|
270
|
+
client.ui.keyscan_stop
|
|
271
|
+
return true
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
#
|
|
275
|
+
# Dump captured keystrokes
|
|
276
|
+
#
|
|
277
|
+
def cmd_keyscan_dump(*args)
|
|
278
|
+
print_line("Dumping captured keystrokes...")
|
|
279
|
+
data = client.ui.keyscan_dump
|
|
280
|
+
outp = ""
|
|
281
|
+
data.unpack("n*").each do |inp|
|
|
282
|
+
fl = (inp & 0xff00) >> 8
|
|
283
|
+
vk = (inp & 0xff)
|
|
284
|
+
kc = VirtualKeyCodes[vk]
|
|
285
|
+
|
|
286
|
+
f_shift = fl & (1<<1)
|
|
287
|
+
f_ctrl = fl & (1<<2)
|
|
288
|
+
f_alt = fl & (1<<3)
|
|
289
|
+
|
|
290
|
+
if(kc)
|
|
291
|
+
name = ((f_shift != 0 and kc.length > 1) ? kc[1] : kc[0])
|
|
292
|
+
case name
|
|
293
|
+
when /^.$/
|
|
294
|
+
outp << name
|
|
295
|
+
when /shift|click/i
|
|
296
|
+
when 'Space'
|
|
297
|
+
outp << " "
|
|
298
|
+
else
|
|
299
|
+
outp << " <#{name}> "
|
|
300
|
+
end
|
|
301
|
+
else
|
|
302
|
+
outp << " <0x%.2x> " % vk
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
print_line(outp)
|
|
306
|
+
|
|
307
|
+
return true
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Post
|
|
3
|
+
module Meterpreter
|
|
4
|
+
module Ui
|
|
5
|
+
|
|
6
|
+
###
|
|
7
|
+
#
|
|
8
|
+
# Mixin that is meant to extend the base channel class from meterpreter in a
|
|
9
|
+
# manner that adds interactive capabilities.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
module Console::InteractiveChannel
|
|
13
|
+
|
|
14
|
+
include Rex::Ui::Interactive
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Interacts with self.
|
|
18
|
+
#
|
|
19
|
+
def _interact
|
|
20
|
+
# If the channel has a left-side socket, then we can interact with it.
|
|
21
|
+
if (self.lsock)
|
|
22
|
+
self.interactive(true)
|
|
23
|
+
|
|
24
|
+
interact_stream(self)
|
|
25
|
+
|
|
26
|
+
self.interactive(false)
|
|
27
|
+
else
|
|
28
|
+
print_error("Channel #{self.cid} does not support interaction.")
|
|
29
|
+
|
|
30
|
+
self.interacting = false
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Called when an interrupt is sent.
|
|
36
|
+
#
|
|
37
|
+
def _interrupt
|
|
38
|
+
prompt_yesno("Terminate channel #{self.cid}?")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Suspends interaction with the channel.
|
|
43
|
+
#
|
|
44
|
+
def _suspend
|
|
45
|
+
# Ask the user if they would like to background the session
|
|
46
|
+
if (prompt_yesno("Background channel #{self.cid}?") == true)
|
|
47
|
+
self.interactive(false)
|
|
48
|
+
|
|
49
|
+
self.interacting = false
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Closes the channel like it aint no thang.
|
|
55
|
+
#
|
|
56
|
+
def _interact_complete
|
|
57
|
+
begin
|
|
58
|
+
self.interactive(false)
|
|
59
|
+
|
|
60
|
+
self.close
|
|
61
|
+
rescue IOError
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Reads data from local input and writes it remotely.
|
|
67
|
+
#
|
|
68
|
+
def _stream_read_local_write_remote(channel)
|
|
69
|
+
data = user_input.gets
|
|
70
|
+
return if not data
|
|
71
|
+
self.write(data)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# Reads from the channel and writes locally.
|
|
76
|
+
#
|
|
77
|
+
def _stream_read_remote_write_local(channel)
|
|
78
|
+
data = self.lsock.sysread(16384)
|
|
79
|
+
|
|
80
|
+
user_output.print(data)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
#
|
|
84
|
+
# Returns the remote file descriptor to select on
|
|
85
|
+
#
|
|
86
|
+
def _remote_fd(stream)
|
|
87
|
+
self.lsock
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# Generic page protection flags
|
|
4
|
+
PROT_NONE = 0
|
|
5
|
+
PROT_READ = (1 << 0)
|
|
6
|
+
PROT_WRITE = (1 << 1)
|
|
7
|
+
PROT_EXEC = (1 << 2)
|
|
8
|
+
PROT_COW = (1 << 20)
|
|
9
|
+
|
|
10
|
+
# Generic permissions
|
|
11
|
+
GEN_NONE = 0
|
|
12
|
+
GEN_READ = (1 << 0)
|
|
13
|
+
GEN_WRITE = (1 << 1)
|
|
14
|
+
GEN_EXEC = (1 << 2)
|
|
15
|
+
|
|
16
|
+
# Generic process open permissions
|
|
17
|
+
PROCESS_READ = (1 << 0)
|
|
18
|
+
PROCESS_WRITE = (1 << 1)
|
|
19
|
+
PROCESS_EXECUTE = (1 << 2)
|
|
20
|
+
PROCESS_ALL = 0xffffffff
|
|
21
|
+
|
|
22
|
+
# Generic thread open permissions
|
|
23
|
+
THREAD_READ = (1 << 0)
|
|
24
|
+
THREAD_WRITE = (1 << 1)
|
|
25
|
+
THREAD_EXECUTE = (1 << 2)
|
|
26
|
+
THREAD_ALL = 0xffffffff
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
|
|
6
|
+
###
|
|
7
|
+
#
|
|
8
|
+
# This class performs basic process operations against a process running on a
|
|
9
|
+
# remote machine via the post-exploitation mechanisms. Refer to the Ruby
|
|
10
|
+
# documentation for expected behaviors.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Process
|
|
14
|
+
|
|
15
|
+
def Process.getresuid
|
|
16
|
+
raise NotImplementedError
|
|
17
|
+
end
|
|
18
|
+
def Process.setresuid(a, b, c)
|
|
19
|
+
raise NotImplementedError
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def Process.euid
|
|
23
|
+
getresuid()[1]
|
|
24
|
+
end
|
|
25
|
+
def Process.euid=(id)
|
|
26
|
+
setresuid(-1, id, -1)
|
|
27
|
+
end
|
|
28
|
+
def Process.uid
|
|
29
|
+
getresuid()[0]
|
|
30
|
+
end
|
|
31
|
+
def Process.uid=(id)
|
|
32
|
+
setresuid(id, -1, -1)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def Process.egid
|
|
36
|
+
getresgid()[1]
|
|
37
|
+
end
|
|
38
|
+
def Process.egid=(id)
|
|
39
|
+
setresgid(-1, id, -1)
|
|
40
|
+
end
|
|
41
|
+
def Process.gid
|
|
42
|
+
getresgid()[0]
|
|
43
|
+
end
|
|
44
|
+
def Process.gid=(id)
|
|
45
|
+
setresgid(id, -1, -1)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def Process.pid
|
|
49
|
+
raise NotImplementedError
|
|
50
|
+
end
|
|
51
|
+
def Process.ppid
|
|
52
|
+
raise NotImplementedError
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end; end # Post/Rex
|