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,279 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/post/process'
|
|
4
|
+
require 'rex/post/meterpreter/packet'
|
|
5
|
+
require 'rex/post/meterpreter/client'
|
|
6
|
+
require 'rex/post/meterpreter/extensions/stdapi/constants'
|
|
7
|
+
require 'rex/post/meterpreter/extensions/stdapi/stdapi'
|
|
8
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key'
|
|
9
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value'
|
|
10
|
+
|
|
11
|
+
module Rex
|
|
12
|
+
module Post
|
|
13
|
+
module Meterpreter
|
|
14
|
+
module Extensions
|
|
15
|
+
module Stdapi
|
|
16
|
+
module Sys
|
|
17
|
+
|
|
18
|
+
###
|
|
19
|
+
#
|
|
20
|
+
# This class provides access to the Windows registry on the remote
|
|
21
|
+
# machine.
|
|
22
|
+
#
|
|
23
|
+
###
|
|
24
|
+
class Registry
|
|
25
|
+
|
|
26
|
+
class << self
|
|
27
|
+
attr_accessor :client
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
##
|
|
31
|
+
#
|
|
32
|
+
# Registry key interaction
|
|
33
|
+
#
|
|
34
|
+
##
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Opens the supplied registry key relative to the root key with
|
|
38
|
+
# the supplied permissions. Right now this is merely a wrapper around
|
|
39
|
+
# create_key.
|
|
40
|
+
#
|
|
41
|
+
def Registry.open_key(root_key, base_key, perm = KEY_READ)
|
|
42
|
+
# If no base key was provided, just return the root_key.
|
|
43
|
+
if (base_key == nil or base_key.length == 0)
|
|
44
|
+
return RegistrySubsystem::RegistryKey.new(client, root_key, base_key, perm, root_key)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
return self.create_key(root_key, base_key, perm)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# Creates the supplied registry key or opens it if it already exists.
|
|
52
|
+
#
|
|
53
|
+
def Registry.create_key(root_key, base_key, perm = KEY_READ)
|
|
54
|
+
request = Packet.create_request('stdapi_registry_create_key')
|
|
55
|
+
|
|
56
|
+
request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
|
|
57
|
+
request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
|
|
58
|
+
request.add_tlv(TLV_TYPE_PERMISSION, perm)
|
|
59
|
+
|
|
60
|
+
response = client.send_request(request)
|
|
61
|
+
|
|
62
|
+
return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryKey.new(
|
|
63
|
+
client, root_key, base_key, perm, response.get_tlv(TLV_TYPE_HKEY).value)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Deletes the supplied registry key.
|
|
68
|
+
#
|
|
69
|
+
def Registry.delete_key(root_key, base_key, recursive = true)
|
|
70
|
+
request = Packet.create_request('stdapi_registry_delete_key')
|
|
71
|
+
flags = 0
|
|
72
|
+
|
|
73
|
+
if (recursive)
|
|
74
|
+
flags |= DELETE_KEY_FLAG_RECURSIVE
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
|
|
78
|
+
request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
|
|
79
|
+
request.add_tlv(TLV_TYPE_FLAGS, flags)
|
|
80
|
+
|
|
81
|
+
if (client.send_request(request) != nil)
|
|
82
|
+
return true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
return false
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
#
|
|
89
|
+
# Closes the supplied registry key.
|
|
90
|
+
#
|
|
91
|
+
def Registry.close_key(hkey)
|
|
92
|
+
request = Packet.create_request('stdapi_registry_close_key')
|
|
93
|
+
|
|
94
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
95
|
+
|
|
96
|
+
client.send_packet(request)
|
|
97
|
+
|
|
98
|
+
return true
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Enumerates the supplied registry key returning an array of key names.
|
|
103
|
+
#
|
|
104
|
+
def Registry.enum_key(hkey)
|
|
105
|
+
keys = []
|
|
106
|
+
request = Packet.create_request('stdapi_registry_enum_key')
|
|
107
|
+
|
|
108
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
109
|
+
|
|
110
|
+
response = client.send_request(request)
|
|
111
|
+
|
|
112
|
+
# Enumerate through all of the registry keys
|
|
113
|
+
response.each(TLV_TYPE_KEY_NAME) { |key_name|
|
|
114
|
+
keys << key_name.value
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return keys
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
##
|
|
121
|
+
#
|
|
122
|
+
# Registry value interaction
|
|
123
|
+
#
|
|
124
|
+
##
|
|
125
|
+
|
|
126
|
+
#
|
|
127
|
+
# Sets the registry value relative to the supplied hkey.
|
|
128
|
+
#
|
|
129
|
+
def Registry.set_value(hkey, name, type, data)
|
|
130
|
+
request = Packet.create_request('stdapi_registry_set_value')
|
|
131
|
+
|
|
132
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
133
|
+
request.add_tlv(TLV_TYPE_VALUE_NAME, name)
|
|
134
|
+
request.add_tlv(TLV_TYPE_VALUE_TYPE, type)
|
|
135
|
+
|
|
136
|
+
if (type == REG_SZ)
|
|
137
|
+
data += "\x00"
|
|
138
|
+
elsif (type == REG_DWORD)
|
|
139
|
+
data = [ data.to_i ].pack("V")
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
request.add_tlv(TLV_TYPE_VALUE_DATA, data)
|
|
143
|
+
|
|
144
|
+
response = client.send_request(request)
|
|
145
|
+
|
|
146
|
+
return true
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
#
|
|
150
|
+
# Queries the registry value supplied in name and returns an
|
|
151
|
+
# initialized RegistryValue instance if a match is found.
|
|
152
|
+
#
|
|
153
|
+
def Registry.query_value(hkey, name)
|
|
154
|
+
request = Packet.create_request('stdapi_registry_query_value')
|
|
155
|
+
|
|
156
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
157
|
+
request.add_tlv(TLV_TYPE_VALUE_NAME, name)
|
|
158
|
+
|
|
159
|
+
response = client.send_request(request)
|
|
160
|
+
|
|
161
|
+
data = response.get_tlv(TLV_TYPE_VALUE_DATA).value;
|
|
162
|
+
type = response.get_tlv(TLV_TYPE_VALUE_TYPE).value;
|
|
163
|
+
|
|
164
|
+
if (type == REG_SZ)
|
|
165
|
+
data = data[0..-2]
|
|
166
|
+
elsif (type == REG_DWORD)
|
|
167
|
+
data = data.unpack("N")[0]
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryValue.new(
|
|
171
|
+
client, hkey, name, type, data)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
#
|
|
175
|
+
# Deletes the registry value supplied in name from the supplied
|
|
176
|
+
# registry key.
|
|
177
|
+
#
|
|
178
|
+
def Registry.delete_value(hkey, name)
|
|
179
|
+
request = Packet.create_request('stdapi_registry_delete_value')
|
|
180
|
+
|
|
181
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
182
|
+
request.add_tlv(TLV_TYPE_VALUE_NAME, name)
|
|
183
|
+
|
|
184
|
+
if (client.send_request(request) != nil)
|
|
185
|
+
return true
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
return false
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
#
|
|
192
|
+
# Queries the registry class name and returns a string
|
|
193
|
+
#
|
|
194
|
+
def Registry.query_class(hkey)
|
|
195
|
+
request = Packet.create_request('stdapi_registry_query_class')
|
|
196
|
+
|
|
197
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
198
|
+
|
|
199
|
+
response = client.send_request(request)
|
|
200
|
+
cls = response.get_tlv(TLV_TYPE_VALUE_DATA)
|
|
201
|
+
return nil if not cls
|
|
202
|
+
data = cls.value.gsub(/\x00.*/, '')
|
|
203
|
+
return data
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
#
|
|
207
|
+
# Enumerates all of the values at the supplied hkey including their
|
|
208
|
+
# names. An array of RegistryValue's is returned.
|
|
209
|
+
#
|
|
210
|
+
def Registry.enum_value(hkey)
|
|
211
|
+
request = Packet.create_request('stdapi_registry_enum_value')
|
|
212
|
+
values = []
|
|
213
|
+
|
|
214
|
+
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
|
215
|
+
|
|
216
|
+
response = client.send_request(request)
|
|
217
|
+
|
|
218
|
+
response.each(TLV_TYPE_VALUE_NAME) { |value_name|
|
|
219
|
+
values << Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryValue.new(
|
|
220
|
+
client, hkey, value_name.value)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return values
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
#
|
|
227
|
+
# Return the key value associated with the supplied string. This is useful
|
|
228
|
+
# for converting HKLM as a string into its actual integer representation.
|
|
229
|
+
#
|
|
230
|
+
def self.key2str(key)
|
|
231
|
+
if (key == 'HKLM' or key == 'HKEY_LOCAL_MACHINE')
|
|
232
|
+
return HKEY_LOCAL_MACHINE
|
|
233
|
+
elsif (key == 'HKCU' or key == 'HKEY_CURRENT_USER')
|
|
234
|
+
return HKEY_CURRENT_USER
|
|
235
|
+
elsif (key == 'HKU' or key == 'HKEY_USERS')
|
|
236
|
+
return HKEY_USERS
|
|
237
|
+
elsif (key == 'HKCR' or key == 'HKEY_CLASSES_ROOT')
|
|
238
|
+
return HKEY_CLASSES_ROOT
|
|
239
|
+
elsif (key == 'HKEY_CURRENT_CONFIG')
|
|
240
|
+
return HKEY_CURRENT_CONFIG
|
|
241
|
+
elsif (key == 'HKEY_PERFORMANCE_DATA')
|
|
242
|
+
return HKEY_PERFORMANCE_DATA
|
|
243
|
+
elsif (key == 'HKEY_DYN_DATA')
|
|
244
|
+
return HKEY_DYN_DATA
|
|
245
|
+
else
|
|
246
|
+
raise ArgumentError, "Unknown key: #{key}"
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
#
|
|
251
|
+
# Returns the integer value associated with the supplied registry value
|
|
252
|
+
# type (like REG_SZ).
|
|
253
|
+
#
|
|
254
|
+
def self.type2str(type)
|
|
255
|
+
return REG_SZ if (type == 'REG_SZ')
|
|
256
|
+
return REG_DWORD if (type == 'REG_DWORD')
|
|
257
|
+
return REG_BINARY if (type == 'REG_BINARY')
|
|
258
|
+
return REG_EXPAND_SZ if (type == 'REG_EXPAND_SZ')
|
|
259
|
+
return REG_NONE if (type == 'REG_NONE')
|
|
260
|
+
return nil
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
#
|
|
264
|
+
# Split the supplied full registry key into its root key and base key. For
|
|
265
|
+
# instance, passing HKLM\Software\Dog will return [ HKEY_LOCAL_MACHINE,
|
|
266
|
+
# 'Software\Dog' ]
|
|
267
|
+
#
|
|
268
|
+
def self.splitkey(str)
|
|
269
|
+
if (str =~ /^(.+?)\\(.*)$/)
|
|
270
|
+
[ key2str($1), $2 ]
|
|
271
|
+
else
|
|
272
|
+
[ key2str(str), nil ]
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
end; end; end; end; end; end
|
|
279
|
+
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/post/meterpreter/extensions/stdapi/constants'
|
|
4
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/registry'
|
|
5
|
+
|
|
6
|
+
module Rex
|
|
7
|
+
module Post
|
|
8
|
+
module Meterpreter
|
|
9
|
+
module Extensions
|
|
10
|
+
module Stdapi
|
|
11
|
+
module Sys
|
|
12
|
+
module RegistrySubsystem
|
|
13
|
+
|
|
14
|
+
###
|
|
15
|
+
#
|
|
16
|
+
# Class wrapper around a logical registry key on the remote side
|
|
17
|
+
#
|
|
18
|
+
###
|
|
19
|
+
class RegistryKey
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Initializes an instance of a registry key using the supplied properties
|
|
24
|
+
# and HKEY handle from the server.
|
|
25
|
+
#
|
|
26
|
+
def initialize(client, root_key, base_key, perm, hkey)
|
|
27
|
+
self.client = client
|
|
28
|
+
self.root_key = root_key
|
|
29
|
+
self.base_key = base_key
|
|
30
|
+
self.perm = perm
|
|
31
|
+
self.hkey = hkey
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
#
|
|
36
|
+
# Enumerators
|
|
37
|
+
#
|
|
38
|
+
##
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Enumerates all of the child keys within this registry key.
|
|
42
|
+
#
|
|
43
|
+
def each_key(&block)
|
|
44
|
+
return enum_key.each(&block)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Enumerates all of the child values within this registry key.
|
|
49
|
+
#
|
|
50
|
+
def each_value(&block)
|
|
51
|
+
return enum_value.each(&block)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Retrieves all of the registry keys that are direct descendents of
|
|
56
|
+
# the class' registry key.
|
|
57
|
+
#
|
|
58
|
+
def enum_key()
|
|
59
|
+
return self.client.sys.registry.enum_key(self.hkey)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
#
|
|
63
|
+
# Retrieves all of the registry values that exist within the opened
|
|
64
|
+
# registry key.
|
|
65
|
+
#
|
|
66
|
+
def enum_value()
|
|
67
|
+
return self.client.sys.registry.enum_value(self.hkey)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
#
|
|
73
|
+
# Registry key interaction
|
|
74
|
+
#
|
|
75
|
+
##
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Opens a registry key that is relative to this registry key.
|
|
79
|
+
#
|
|
80
|
+
def open_key(base_key, perm = KEY_READ)
|
|
81
|
+
return self.client.sys.registry.open_key(self.hkey, base_key, perm)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# Creates a registry key that is relative to this registry key.
|
|
86
|
+
#
|
|
87
|
+
def create_key(base_key, perm = KEY_READ)
|
|
88
|
+
return self.client.sys.registry.create_key(self.hkey, base_key, perm)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#
|
|
92
|
+
# Deletes a registry key that is relative to this registry key.
|
|
93
|
+
#
|
|
94
|
+
def delete_key(base_key, recursive = true)
|
|
95
|
+
return self.client.sys.registry.delete_key(self.hkey, base_key, recursive)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#
|
|
99
|
+
# Closes the open key. This must be called if the registry
|
|
100
|
+
# key was opened.
|
|
101
|
+
#
|
|
102
|
+
def close()
|
|
103
|
+
if (self.hkey != nil)
|
|
104
|
+
return self.client.sys.registry.close_key(hkey)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
return false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
##
|
|
111
|
+
#
|
|
112
|
+
# Registry value interaction
|
|
113
|
+
#
|
|
114
|
+
##
|
|
115
|
+
|
|
116
|
+
#
|
|
117
|
+
# Sets a value relative to the opened registry key.
|
|
118
|
+
#
|
|
119
|
+
def set_value(name, type, data)
|
|
120
|
+
return self.client.sys.registry.set_value(self.hkey, name, type, data)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
#
|
|
124
|
+
# Queries the attributes of the supplied registry value relative to
|
|
125
|
+
# the opened registry key.
|
|
126
|
+
#
|
|
127
|
+
def query_value(name)
|
|
128
|
+
return self.client.sys.registry.query_value(self.hkey, name)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
#
|
|
132
|
+
# Queries the class of the specified key
|
|
133
|
+
#
|
|
134
|
+
def query_class
|
|
135
|
+
return self.client.sys.registry.query_class(self.hkey)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# Delete the supplied registry value.
|
|
140
|
+
#
|
|
141
|
+
def delete_value(name)
|
|
142
|
+
return self.client.sys.registry.delete_value(self.hkey, name)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
##
|
|
146
|
+
#
|
|
147
|
+
# Serializers
|
|
148
|
+
#
|
|
149
|
+
##
|
|
150
|
+
|
|
151
|
+
#
|
|
152
|
+
# Returns the path to the key.
|
|
153
|
+
#
|
|
154
|
+
def to_s
|
|
155
|
+
return self.root_key.to_s + "\\" + self.base_key
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
#
|
|
159
|
+
# The open handle to the key on the server.
|
|
160
|
+
#
|
|
161
|
+
attr_reader :hkey
|
|
162
|
+
#
|
|
163
|
+
# The root key name, such as HKEY_LOCAL_MACHINE.
|
|
164
|
+
#
|
|
165
|
+
attr_reader :root_key
|
|
166
|
+
#
|
|
167
|
+
# The base key name, such as Software\Foo.
|
|
168
|
+
#
|
|
169
|
+
attr_reader :base_key
|
|
170
|
+
#
|
|
171
|
+
# The permissions that the key was opened with.
|
|
172
|
+
#
|
|
173
|
+
attr_reader :perm
|
|
174
|
+
|
|
175
|
+
protected
|
|
176
|
+
|
|
177
|
+
attr_accessor :client # :nodoc:
|
|
178
|
+
attr_writer :hkey, :root_key, :base_key, :perm # :nodoc:
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
end; end; end; end; end; end; end
|
|
182
|
+
|