librex 0.0.4 → 0.0.5
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.md +12 -0
- data/lib/rex.rb +0 -0
- data/lib/rex.rb.ts.rb +0 -0
- data/lib/rex/LICENSE +0 -0
- data/lib/rex/arch.rb +0 -0
- data/lib/rex/arch/sparc.rb +0 -0
- data/lib/rex/arch/sparc.rb.ut.rb +0 -0
- data/lib/rex/arch/x86.rb +0 -0
- data/lib/rex/arch/x86.rb.ut.rb +0 -0
- data/lib/rex/assembly/nasm.rb +0 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +0 -0
- data/lib/rex/codepage.map +0 -0
- data/lib/rex/compat.rb +0 -0
- data/lib/rex/constants.rb +0 -0
- data/lib/rex/elfparsey.rb +0 -0
- data/lib/rex/elfparsey/elf.rb +0 -0
- data/lib/rex/elfparsey/elfbase.rb +2 -4
- data/lib/rex/elfparsey/exceptions.rb +0 -0
- data/lib/rex/elfscan.rb +0 -0
- data/lib/rex/elfscan/scanner.rb +0 -0
- data/lib/rex/elfscan/search.rb +10 -10
- data/lib/rex/encoder/alpha2.rb +0 -0
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -0
- data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -0
- data/lib/rex/encoder/alpha2/generic.rb +0 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -0
- data/lib/rex/encoder/ndr.rb +0 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +0 -0
- data/lib/rex/encoder/nonalpha.rb +0 -0
- data/lib/rex/encoder/nonupper.rb +0 -0
- data/lib/rex/encoder/xdr.rb +0 -0
- data/lib/rex/encoder/xdr.rb.ut.rb +0 -0
- data/lib/rex/encoder/xor.rb +0 -0
- data/lib/rex/encoder/xor/dword.rb +0 -0
- data/lib/rex/encoder/xor/dword_additive.rb +0 -0
- data/lib/rex/encoders/xor_dword.rb +0 -0
- data/lib/rex/encoders/xor_dword_additive.rb +0 -0
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -0
- data/lib/rex/encoding/xor.rb +0 -0
- data/lib/rex/encoding/xor.rb.ts.rb +0 -0
- data/lib/rex/encoding/xor/byte.rb +0 -0
- data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -0
- data/lib/rex/encoding/xor/dword.rb +0 -0
- data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -0
- data/lib/rex/encoding/xor/dword_additive.rb +0 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -0
- data/lib/rex/encoding/xor/exceptions.rb +0 -0
- data/lib/rex/encoding/xor/generic.rb +0 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -0
- data/lib/rex/encoding/xor/qword.rb +0 -0
- data/lib/rex/encoding/xor/word.rb +0 -0
- data/lib/rex/encoding/xor/word.rb.ut.rb +0 -0
- data/lib/rex/exceptions.rb +0 -0
- data/lib/rex/exceptions.rb.ut.rb +0 -0
- data/lib/rex/exploitation/cmdstager.rb +0 -0
- data/lib/rex/exploitation/cmdstager/base.rb +6 -1
- data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -0
- data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -0
- data/lib/rex/exploitation/cmdstager/tftp.rb +8 -8
- data/lib/rex/exploitation/cmdstager/vbs.rb +0 -0
- data/lib/rex/exploitation/egghunter.rb +143 -36
- data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -0
- data/lib/rex/exploitation/encryptjs.rb +0 -0
- data/lib/rex/exploitation/heaplib.js.b64 +0 -0
- data/lib/rex/exploitation/heaplib.rb +0 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +114 -15
- data/lib/rex/exploitation/obfuscatejs.rb +0 -0
- data/lib/rex/exploitation/omelet.rb +320 -0
- data/lib/rex/exploitation/omelet.rb.ut.rb +13 -0
- data/lib/rex/exploitation/opcodedb.rb +0 -0
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -0
- data/lib/rex/exploitation/seh.rb +0 -0
- data/lib/rex/exploitation/seh.rb.ut.rb +0 -0
- data/lib/rex/file.rb +1 -1
- data/lib/rex/file.rb.ut.rb +0 -0
- data/lib/rex/image_source.rb +0 -0
- data/lib/rex/image_source/disk.rb +0 -0
- data/lib/rex/image_source/image_source.rb +0 -0
- data/lib/rex/image_source/memory.rb +0 -0
- data/lib/rex/io/bidirectional_pipe.rb +0 -0
- data/lib/rex/io/datagram_abstraction.rb +0 -0
- data/lib/rex/io/stream.rb +1 -1
- data/lib/rex/io/stream_abstraction.rb +0 -0
- data/lib/rex/io/stream_server.rb +0 -0
- data/lib/rex/job_container.rb +0 -1
- data/lib/rex/logging.rb +0 -0
- data/lib/rex/logging/log_dispatcher.rb +0 -0
- data/lib/rex/logging/log_sink.rb +0 -0
- data/lib/rex/logging/sinks/flatfile.rb +0 -0
- data/lib/rex/logging/sinks/stderr.rb +0 -0
- data/lib/rex/machparsey.rb +0 -0
- data/lib/rex/machparsey/exceptions.rb +0 -0
- data/lib/rex/machparsey/machbase.rb +0 -0
- data/lib/rex/machscan.rb +0 -0
- data/lib/rex/machscan/scanner.rb +0 -0
- data/lib/rex/mime.rb +0 -0
- data/lib/rex/mime/header.rb +0 -0
- data/lib/rex/mime/message.rb +0 -0
- data/lib/rex/mime/part.rb +0 -0
- data/lib/rex/nop/opty2.rb +0 -0
- data/lib/rex/nop/opty2.rb.ut.rb +0 -0
- data/lib/rex/nop/opty2_tables.rb +0 -0
- data/lib/rex/ole.rb +0 -0
- data/lib/rex/ole/clsid.rb +0 -0
- data/lib/rex/ole/difat.rb +0 -0
- data/lib/rex/ole/directory.rb +0 -0
- data/lib/rex/ole/direntry.rb +0 -0
- data/lib/rex/ole/docs/dependencies.txt +8 -0
- data/lib/rex/ole/docs/references.txt +1 -0
- data/lib/rex/ole/fat.rb +0 -0
- data/lib/rex/ole/header.rb +3 -3
- data/lib/rex/ole/minifat.rb +0 -0
- data/lib/rex/ole/storage.rb +4 -4
- data/lib/rex/ole/stream.rb +0 -0
- data/lib/rex/ole/substorage.rb +0 -0
- data/lib/rex/ole/util.rb +0 -0
- data/lib/rex/parser/arguments.rb +0 -0
- data/lib/rex/parser/arguments.rb.ut.rb +0 -0
- data/lib/rex/parser/ini.rb +0 -0
- data/lib/rex/parser/ini.rb.ut.rb +0 -0
- data/lib/rex/parser/nexpose_xml.rb +0 -0
- data/lib/rex/parser/nmap_xml.rb +0 -0
- data/lib/rex/payloads.rb +0 -0
- data/lib/rex/payloads/win32.rb +0 -0
- data/lib/rex/payloads/win32/common.rb +0 -0
- data/lib/rex/payloads/win32/kernel.rb +0 -0
- data/lib/rex/payloads/win32/kernel/common.rb +0 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +0 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +0 -0
- data/lib/rex/peparsey.rb +0 -0
- data/lib/rex/peparsey/exceptions.rb +0 -0
- data/lib/rex/peparsey/pe.rb +7 -1
- data/lib/rex/peparsey/pe_memdump.rb +0 -0
- data/lib/rex/peparsey/pebase.rb +27 -2
- data/lib/rex/peparsey/section.rb +0 -0
- data/lib/rex/pescan.rb +0 -0
- data/lib/rex/pescan/analyze.rb +0 -0
- data/lib/rex/pescan/scanner.rb +0 -0
- data/lib/rex/pescan/search.rb +0 -0
- data/lib/rex/platforms.rb +0 -0
- data/lib/rex/platforms/windows.rb +0 -0
- data/lib/rex/poly.rb +0 -0
- data/lib/rex/poly/block.rb +0 -0
- data/lib/rex/poly/register.rb +0 -0
- data/lib/rex/poly/register/x86.rb +0 -0
- data/lib/rex/post.rb +0 -0
- data/lib/rex/post/dir.rb +0 -0
- data/lib/rex/post/file.rb +0 -0
- data/lib/rex/post/file_stat.rb +0 -0
- data/lib/rex/post/gen.pl +0 -0
- data/lib/rex/post/io.rb +0 -0
- data/lib/rex/post/meterpreter.rb +0 -0
- data/lib/rex/post/meterpreter/channel.rb +0 -0
- data/lib/rex/post/meterpreter/channel_container.rb +0 -0
- data/lib/rex/post/meterpreter/channels/pool.rb +0 -0
- data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -0
- data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -0
- data/lib/rex/post/meterpreter/channels/stream.rb +0 -0
- data/lib/rex/post/meterpreter/client.rb +3 -0
- data/lib/rex/post/meterpreter/client_core.rb +0 -0
- data/lib/rex/post/meterpreter/dependencies.rb +0 -0
- data/lib/rex/post/meterpreter/extension.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +15 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +12 -10
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +31 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/{railgun → stdapi/railgun}/api_constants.rb +38106 -38105
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1804 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +96 -0
- data/lib/rex/post/meterpreter/extensions/{railgun → stdapi/railgun/def}/def_kernel32.rb +3848 -3678
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +153 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3169 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +599 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/model.rb +540 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +308 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +196 -0
- data/lib/rex/post/meterpreter/extensions/{railgun → stdapi/railgun}/tlv.rb +6 -9
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +5 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +6 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -0
- data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -0
- data/lib/rex/post/meterpreter/object_aliases.rb +0 -0
- data/lib/rex/post/meterpreter/packet.rb +23 -1
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +13 -2
- data/lib/rex/post/meterpreter/packet_parser.rb +0 -0
- data/lib/rex/post/meterpreter/packet_response_waiter.rb +17 -10
- data/lib/rex/post/meterpreter/ui/console.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +12 -7
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +221 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +4 -3
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +56 -1
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +22 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -0
- data/lib/rex/post/permission.rb +0 -0
- data/lib/rex/post/process.rb +0 -0
- data/lib/rex/post/thread.rb +0 -0
- data/lib/rex/post/ui.rb +0 -0
- data/lib/rex/proto.rb +0 -0
- data/lib/rex/proto.rb.ts.rb +0 -0
- data/lib/rex/proto/dcerpc.rb +0 -0
- data/lib/rex/proto/dcerpc.rb.ts.rb +0 -0
- data/lib/rex/proto/dcerpc/client.rb +3 -1
- data/lib/rex/proto/dcerpc/exceptions.rb +0 -0
- data/lib/rex/proto/dcerpc/handle.rb +0 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -0
- data/lib/rex/proto/dcerpc/ndr.rb +0 -0
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -0
- data/lib/rex/proto/dcerpc/packet.rb +0 -0
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -0
- data/lib/rex/proto/dcerpc/uuid.rb +0 -0
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -0
- data/lib/rex/proto/dhcp.rb +7 -0
- data/lib/rex/proto/dhcp/constants.rb +33 -0
- data/lib/rex/proto/dhcp/server.rb +285 -0
- data/lib/rex/proto/drda.rb +0 -0
- data/lib/rex/proto/drda.rb.ts.rb +0 -0
- data/lib/rex/proto/drda/constants.rb +0 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +0 -0
- data/lib/rex/proto/drda/packet.rb +0 -0
- data/lib/rex/proto/drda/packet.rb.ut.rb +0 -0
- data/lib/rex/proto/drda/utils.rb +0 -0
- data/lib/rex/proto/drda/utils.rb.ut.rb +0 -0
- data/lib/rex/proto/http.rb +0 -0
- data/lib/rex/proto/http.rb.ts.rb +0 -0
- data/lib/rex/proto/http/client.rb +27 -2
- data/lib/rex/proto/http/client.rb.ut.rb +4 -2
- data/lib/rex/proto/http/handler.rb +0 -0
- data/lib/rex/proto/http/handler/erb.rb +0 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -0
- data/lib/rex/proto/http/handler/proc.rb +6 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -0
- data/lib/rex/proto/http/header.rb +0 -0
- data/lib/rex/proto/http/header.rb.ut.rb +0 -0
- data/lib/rex/proto/http/packet.rb +20 -19
- data/lib/rex/proto/http/packet.rb.ut.rb +0 -0
- data/lib/rex/proto/http/request.rb +0 -0
- data/lib/rex/proto/http/request.rb.ut.rb +0 -0
- data/lib/rex/proto/http/response.rb +0 -0
- data/lib/rex/proto/http/response.rb.ut.rb +0 -0
- data/lib/rex/proto/http/server.rb +5 -3
- data/lib/rex/proto/http/server.rb.ut.rb +0 -0
- data/lib/rex/proto/proxy/socks4a.rb +440 -0
- data/lib/rex/proto/smb.rb +0 -0
- data/lib/rex/proto/smb.rb.ts.rb +0 -0
- data/lib/rex/proto/smb/client.rb +110 -61
- data/lib/rex/proto/smb/client.rb.ut.rb +0 -0
- data/lib/rex/proto/smb/constants.rb +5 -3
- data/lib/rex/proto/smb/constants.rb.ut.rb +0 -0
- data/lib/rex/proto/smb/crypt.rb +0 -0
- data/lib/rex/proto/smb/crypt.rb.ut.rb +0 -0
- data/lib/rex/proto/smb/exceptions.rb +0 -0
- data/lib/rex/proto/smb/simpleclient.rb +0 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -0
- data/lib/rex/proto/smb/utils.rb +2 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +0 -0
- data/lib/rex/proto/sunrpc.rb +0 -0
- data/lib/rex/proto/sunrpc/client.rb +0 -0
- data/lib/rex/proto/tftp.rb +10 -1
- data/lib/rex/proto/tftp/constants.rb +5 -3
- data/lib/rex/proto/tftp/server.rb +79 -9
- data/lib/rex/script.rb +0 -0
- data/lib/rex/script/base.rb +0 -0
- data/lib/rex/script/meterpreter.rb +0 -0
- data/lib/rex/script/shell.rb +0 -0
- data/lib/rex/service.rb +0 -0
- data/lib/rex/service_manager.rb +0 -0
- data/lib/rex/service_manager.rb.ut.rb +0 -0
- data/lib/rex/services/local_relay.rb +0 -0
- data/lib/rex/socket.rb +6 -4
- data/lib/rex/socket.rb.ut.rb +0 -0
- data/lib/rex/socket/comm.rb +0 -0
- data/lib/rex/socket/comm/local.rb +0 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +0 -0
- data/lib/rex/socket/ip.rb +0 -0
- data/lib/rex/socket/parameters.rb +0 -0
- data/lib/rex/socket/parameters.rb.ut.rb +0 -0
- data/lib/rex/socket/range_walker.rb +0 -0
- data/lib/rex/socket/range_walker.rb.ut.rb +0 -0
- data/lib/rex/socket/ssl_tcp.rb +1 -1
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -0
- data/lib/rex/socket/ssl_tcp_server.rb +0 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -0
- data/lib/rex/socket/subnet_walker.rb +0 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +0 -0
- data/lib/rex/socket/tcp.rb +0 -0
- data/lib/rex/socket/tcp.rb.ut.rb +0 -0
- data/lib/rex/socket/tcp_server.rb +0 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +0 -0
- data/lib/rex/socket/udp.rb +0 -0
- data/lib/rex/socket/udp.rb.ut.rb +0 -0
- data/lib/rex/struct2.rb +0 -0
- data/lib/rex/struct2/c_struct.rb +0 -0
- data/lib/rex/struct2/c_struct_template.rb +0 -0
- data/lib/rex/struct2/constant.rb +0 -0
- data/lib/rex/struct2/element.rb +0 -0
- data/lib/rex/struct2/generic.rb +0 -0
- data/lib/rex/struct2/restraint.rb +0 -0
- data/lib/rex/struct2/s_string.rb +0 -0
- data/lib/rex/struct2/s_struct.rb +0 -0
- data/lib/rex/sync.rb +0 -0
- data/lib/rex/sync/event.rb +0 -0
- data/lib/rex/sync/read_write_lock.rb +0 -0
- data/lib/rex/sync/ref.rb +0 -0
- data/lib/rex/sync/thread_safe.rb +0 -0
- data/lib/rex/test.rb +0 -0
- data/lib/rex/text.rb +13 -3
- data/lib/rex/text.rb.ut.rb +9 -4
- data/lib/rex/time.rb +0 -0
- data/lib/rex/transformer.rb +0 -0
- data/lib/rex/transformer.rb.ut.rb +0 -0
- data/lib/rex/ui.rb +0 -0
- data/lib/rex/ui/interactive.rb +0 -0
- data/lib/rex/ui/output.rb +0 -0
- data/lib/rex/ui/output/none.rb +0 -0
- data/lib/rex/ui/progress_tracker.rb +0 -0
- data/lib/rex/ui/subscriber.rb +0 -0
- data/lib/rex/ui/text/color.rb +0 -0
- data/lib/rex/ui/text/color.rb.ut.rb +0 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +0 -0
- data/lib/rex/ui/text/input.rb +0 -0
- data/lib/rex/ui/text/input/buffer.rb +0 -0
- data/lib/rex/ui/text/input/readline.rb +0 -0
- data/lib/rex/ui/text/input/socket.rb +0 -0
- data/lib/rex/ui/text/input/stdio.rb +0 -0
- data/lib/rex/ui/text/irb_shell.rb +0 -0
- data/lib/rex/ui/text/output.rb +0 -0
- data/lib/rex/ui/text/output/buffer.rb +0 -0
- data/lib/rex/ui/text/output/file.rb +0 -0
- data/lib/rex/ui/text/output/socket.rb +0 -0
- data/lib/rex/ui/text/output/stdio.rb +0 -0
- data/lib/rex/ui/text/progress_tracker.rb +0 -0
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -0
- data/lib/rex/ui/text/shell.rb +9 -6
- data/lib/rex/ui/text/table.rb +5 -0
- data/lib/rex/ui/text/table.rb.ut.rb +0 -0
- data/lib/rex/zip.rb +0 -0
- data/lib/rex/zip/archive.rb +29 -1
- data/lib/rex/zip/blocks.rb +0 -0
- data/lib/rex/zip/entry.rb +5 -1
- metadata +369 -413
- data/README +0 -8
- data/lib/rex/post/meterpreter/extensions/railgun/api.rb +0 -9303
- data/lib/rex/post/meterpreter/extensions/railgun/railgun.rb +0 -815
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/railgun.rb +0 -57
data/lib/rex/proto/smb.rb
CHANGED
|
File without changes
|
data/lib/rex/proto/smb.rb.ts.rb
CHANGED
|
File without changes
|
data/lib/rex/proto/smb/client.rb
CHANGED
|
@@ -321,7 +321,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
321
321
|
end
|
|
322
322
|
|
|
323
323
|
if (pkt['Payload']['SMB'].v['WordCount'] >= 18)
|
|
324
|
-
res = SMB_NTTRANS_RES_PKT.make_struct
|
|
324
|
+
res = CONST::SMB_NTTRANS_RES_PKT.make_struct
|
|
325
325
|
res.from_s(data)
|
|
326
326
|
return res
|
|
327
327
|
end
|
|
@@ -407,7 +407,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
407
407
|
end
|
|
408
408
|
|
|
409
409
|
# Request a SMB session over NetBIOS
|
|
410
|
-
def session_request(name = '*SMBSERVER')
|
|
410
|
+
def session_request(name = '*SMBSERVER', do_recv = true)
|
|
411
411
|
|
|
412
412
|
name ||= '*SMBSERVER'
|
|
413
413
|
|
|
@@ -420,7 +420,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
420
420
|
pkt['Payload'].v['Payload'] = data
|
|
421
421
|
|
|
422
422
|
# Most SMB implementations can't handle this being fragmented
|
|
423
|
-
self.smb_send(pkt.to_s, EVADE::EVASION_NONE)
|
|
423
|
+
ret = self.smb_send(pkt.to_s, EVADE::EVASION_NONE)
|
|
424
|
+
return ret if not do_recv
|
|
425
|
+
|
|
424
426
|
res = self.smb_recv
|
|
425
427
|
|
|
426
428
|
ack = CONST::NBRAW_PKT.make_struct
|
|
@@ -434,7 +436,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
434
436
|
end
|
|
435
437
|
|
|
436
438
|
# Negotiate a SMB dialect
|
|
437
|
-
def negotiate(extended=true)
|
|
439
|
+
def negotiate(extended=true, do_recv = true)
|
|
438
440
|
|
|
439
441
|
dialects = ['LANMAN1.0', 'LM1.2X002' ]
|
|
440
442
|
|
|
@@ -458,7 +460,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
458
460
|
|
|
459
461
|
pkt['Payload'].v['Payload'] = data
|
|
460
462
|
|
|
461
|
-
self.smb_send(pkt.to_s)
|
|
463
|
+
ret = self.smb_send(pkt.to_s)
|
|
464
|
+
return ret if not do_recv
|
|
465
|
+
|
|
462
466
|
ack = self.smb_recv_parse(CONST::SMB_COM_NEGOTIATE)
|
|
463
467
|
|
|
464
468
|
idx = ack['Payload'].v['Dialect']
|
|
@@ -507,9 +511,33 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
507
511
|
# buf[16, buf.length - 16]
|
|
508
512
|
end
|
|
509
513
|
|
|
510
|
-
|
|
511
|
-
|
|
514
|
+
# The number of 100-nanosecond intervals that have elapsed since January 1, 1601, in
|
|
515
|
+
# Coordinated Universal Time (UTC) format.
|
|
516
|
+
# We convert it to a friendly Time object here
|
|
517
|
+
self.system_time = UTILS.time_smb_to_unix(ack['Payload'].v['SystemTimeHigh'],ack['Payload'].v['SystemTimeLow'])
|
|
518
|
+
self.system_time = ::Time.at( self.system_time )
|
|
519
|
+
|
|
520
|
+
# A signed 16-bit signed integer that represents the server's time zone, in minutes,
|
|
521
|
+
# from UTC. The time zone of the server MUST be expressed in minutes, plus or minus,
|
|
522
|
+
# from UTC.
|
|
523
|
+
# NOTE: althought the spec says +/- it doesn't say that it should be inverted :-/
|
|
524
|
+
system_zone = ack['Payload'].v['ServerTimeZone']
|
|
525
|
+
# Convert the ServerTimeZone to _seconds_ and back into a signed integer :-/
|
|
526
|
+
if (system_zone & 0x8000) == 0x8000
|
|
527
|
+
system_zone = (( (~system_zone) & 0x0FFF ) + 1 )
|
|
528
|
+
else
|
|
529
|
+
system_zone *= -1
|
|
512
530
|
end
|
|
531
|
+
self.system_zone = system_zone * 60
|
|
532
|
+
|
|
533
|
+
# XXX: this is being commented out because ruby prior to 1.9.2 doesn't
|
|
534
|
+
# seem to support representing non-utc or local times (eg, a time in
|
|
535
|
+
# another timezone) If you know a way to do it in pre-1.9.2 please
|
|
536
|
+
# tell us!
|
|
537
|
+
=begin
|
|
538
|
+
# Adjust the system_time object to reflect the remote timezone
|
|
539
|
+
self.system_time = self.system_time.utc.localtime(system_zone)
|
|
540
|
+
=end
|
|
513
541
|
|
|
514
542
|
return ack
|
|
515
543
|
end
|
|
@@ -534,7 +562,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
534
562
|
end
|
|
535
563
|
|
|
536
564
|
# Authenticate using clear-text passwords
|
|
537
|
-
def session_setup_clear(user = '', pass = '', domain = '')
|
|
565
|
+
def session_setup_clear(user = '', pass = '', domain = '', do_recv = true)
|
|
538
566
|
|
|
539
567
|
data = [ pass, user, domain, self.native_os, self.native_lm ].collect{ |a| a + "\x00" }.join('');
|
|
540
568
|
|
|
@@ -554,7 +582,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
554
582
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
555
583
|
pkt['Payload'].v['Payload'] = data
|
|
556
584
|
|
|
557
|
-
self.smb_send(pkt.to_s)
|
|
585
|
+
ret = self.smb_send(pkt.to_s)
|
|
586
|
+
return ret if not do_recv
|
|
587
|
+
|
|
558
588
|
ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX)
|
|
559
589
|
|
|
560
590
|
if (ack['Payload'].v['Action'] != 1 and user.length > 0)
|
|
@@ -572,7 +602,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
572
602
|
end
|
|
573
603
|
|
|
574
604
|
# Authenticate using NTLMv1
|
|
575
|
-
def session_setup_ntlmv1(user = '', pass = '', domain = '')
|
|
605
|
+
def session_setup_ntlmv1(user = '', pass = '', domain = '', do_recv = true)
|
|
576
606
|
|
|
577
607
|
raise XCEPT::NTLM1MissingChallenge if not self.challenge_key
|
|
578
608
|
|
|
@@ -609,7 +639,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
609
639
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
610
640
|
pkt['Payload'].v['Payload'] = data
|
|
611
641
|
|
|
612
|
-
self.smb_send(pkt.to_s)
|
|
642
|
+
ret = self.smb_send(pkt.to_s)
|
|
643
|
+
return ret if not do_recv
|
|
644
|
+
|
|
613
645
|
ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX)
|
|
614
646
|
|
|
615
647
|
if (ack['Payload'].v['Action'] != 1 and user.length > 0)
|
|
@@ -629,7 +661,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
629
661
|
|
|
630
662
|
|
|
631
663
|
# Authenticate using NTLMv1 with a precomputed hash pair
|
|
632
|
-
def session_setup_ntlmv1_prehash(user, domain, hash_lm, hash_nt)
|
|
664
|
+
def session_setup_ntlmv1_prehash(user, domain, hash_lm, hash_nt, do_recv = true)
|
|
633
665
|
|
|
634
666
|
data = ''
|
|
635
667
|
data << hash_lm
|
|
@@ -656,7 +688,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
656
688
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
657
689
|
pkt['Payload'].v['Payload'] = data
|
|
658
690
|
|
|
659
|
-
self.smb_send(pkt.to_s)
|
|
691
|
+
ret = self.smb_send(pkt.to_s)
|
|
692
|
+
return ret if not do_recv
|
|
693
|
+
|
|
660
694
|
ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX)
|
|
661
695
|
|
|
662
696
|
if (ack['Payload'].v['Action'] != 1 and user.length > 0)
|
|
@@ -675,7 +709,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
675
709
|
end
|
|
676
710
|
|
|
677
711
|
# Authenticate using extended security negotiation (NTLMv2)
|
|
678
|
-
def session_setup_ntlmv2(user = '', pass = '', domain = '', name = nil)
|
|
712
|
+
def session_setup_ntlmv2(user = '', pass = '', domain = '', name = nil, do_recv = true)
|
|
679
713
|
|
|
680
714
|
if (name == nil)
|
|
681
715
|
name = Rex::Text.rand_text_alphanumeric(16)
|
|
@@ -703,7 +737,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
703
737
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
704
738
|
pkt['Payload'].v['Payload'] = blob + native_data
|
|
705
739
|
|
|
706
|
-
self.smb_send(pkt.to_s)
|
|
740
|
+
ret = self.smb_send(pkt.to_s)
|
|
741
|
+
return ret if not do_recv
|
|
742
|
+
|
|
707
743
|
ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
|
|
708
744
|
|
|
709
745
|
|
|
@@ -804,7 +840,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
804
840
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
805
841
|
pkt['Payload'].v['Payload'] = blob + native_data
|
|
806
842
|
|
|
843
|
+
# NOTE: if do_recv is set to false, we cant reach here...
|
|
807
844
|
self.smb_send(pkt.to_s)
|
|
845
|
+
|
|
808
846
|
ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
|
|
809
847
|
|
|
810
848
|
# Make sure that authentication succeeded
|
|
@@ -831,7 +869,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
831
869
|
|
|
832
870
|
|
|
833
871
|
# An exploit helper function for sending arbitrary SPNEGO blobs
|
|
834
|
-
def session_setup_ntlmv2_blob(blob = '')
|
|
872
|
+
def session_setup_ntlmv2_blob(blob = '', do_recv = true)
|
|
835
873
|
native_data = ''
|
|
836
874
|
native_data << self.native_os + "\x00"
|
|
837
875
|
native_data << self.native_lm + "\x00"
|
|
@@ -853,13 +891,15 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
853
891
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
854
892
|
pkt['Payload'].v['Payload'] = blob + native_data
|
|
855
893
|
|
|
856
|
-
self.smb_send(pkt.to_s)
|
|
894
|
+
ret = self.smb_send(pkt.to_s)
|
|
895
|
+
return ret if not do_recv
|
|
896
|
+
|
|
857
897
|
self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, false)
|
|
858
898
|
end
|
|
859
899
|
|
|
860
900
|
|
|
861
901
|
# Authenticate using extended security negotiation (NTLMv2), but stop half-way, using the temporary ID
|
|
862
|
-
def session_setup_ntlmv2_temp(domain = '', name = nil)
|
|
902
|
+
def session_setup_ntlmv2_temp(domain = '', name = nil, do_recv = true)
|
|
863
903
|
|
|
864
904
|
if (name == nil)
|
|
865
905
|
name = Rex::Text.rand_text_alphanumeric(16)
|
|
@@ -887,7 +927,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
887
927
|
pkt['Payload'].v['SessionKey'] = self.session_id
|
|
888
928
|
pkt['Payload'].v['Payload'] = blob + native_data
|
|
889
929
|
|
|
890
|
-
self.smb_send(pkt.to_s)
|
|
930
|
+
ret = self.smb_send(pkt.to_s)
|
|
931
|
+
return ret if not do_recv
|
|
932
|
+
|
|
891
933
|
ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
|
|
892
934
|
|
|
893
935
|
# The server doesn't know about NTLM_NEGOTIATE, try ntlmv1
|
|
@@ -930,7 +972,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
930
972
|
end
|
|
931
973
|
|
|
932
974
|
# Connect to a specified share with an optional password
|
|
933
|
-
def tree_connect(share = 'IPC$', pass = '')
|
|
975
|
+
def tree_connect(share = 'IPC$', pass = '', do_recv = true)
|
|
934
976
|
|
|
935
977
|
data = [ pass, share, '?????' ].collect{ |a| a + "\x00" }.join('');
|
|
936
978
|
|
|
@@ -946,7 +988,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
946
988
|
pkt['Payload'].v['Capabilities'] = 64
|
|
947
989
|
pkt['Payload'].v['Payload'] = data
|
|
948
990
|
|
|
949
|
-
self.smb_send(pkt.to_s)
|
|
991
|
+
ret = self.smb_send(pkt.to_s)
|
|
992
|
+
return ret if not do_recv
|
|
950
993
|
|
|
951
994
|
ack = self.smb_recv_parse(CONST::SMB_COM_TREE_CONNECT_ANDX)
|
|
952
995
|
|
|
@@ -958,7 +1001,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
958
1001
|
end
|
|
959
1002
|
|
|
960
1003
|
# Disconnect from the current tree
|
|
961
|
-
def tree_disconnect(tree_id = self.last_tree_id)
|
|
1004
|
+
def tree_disconnect(tree_id = self.last_tree_id, do_recv = true)
|
|
962
1005
|
|
|
963
1006
|
pkt = CONST::SMB_TREE_DISCONN_PKT.make_struct
|
|
964
1007
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -969,7 +1012,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
969
1012
|
pkt['Payload']['SMB'].v['WordCount'] = 0
|
|
970
1013
|
pkt['Payload']['SMB'].v['TreeID'] = tree_id
|
|
971
1014
|
|
|
972
|
-
self.smb_send(pkt.to_s)
|
|
1015
|
+
ret = self.smb_send(pkt.to_s)
|
|
1016
|
+
return ret if not do_recv
|
|
973
1017
|
|
|
974
1018
|
ack = self.smb_recv_parse(CONST::SMB_COM_TREE_DISCONNECT)
|
|
975
1019
|
|
|
@@ -986,7 +1030,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
986
1030
|
end
|
|
987
1031
|
|
|
988
1032
|
# Creates a file or opens an existing pipe
|
|
989
|
-
def create(filename, disposition = 1, impersonation = 2)
|
|
1033
|
+
def create(filename, disposition = 1, impersonation = 2, do_recv = true)
|
|
990
1034
|
|
|
991
1035
|
pkt = CONST::SMB_CREATE_PKT.make_struct
|
|
992
1036
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1006,7 +1050,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1006
1050
|
pkt['Payload'].v['Disposition'] = disposition
|
|
1007
1051
|
pkt['Payload'].v['Payload'] = filename + "\x00"
|
|
1008
1052
|
|
|
1009
|
-
self.smb_send(pkt.to_s)
|
|
1053
|
+
ret = self.smb_send(pkt.to_s)
|
|
1054
|
+
return ret if not do_recv
|
|
1010
1055
|
|
|
1011
1056
|
ack = self.smb_recv_parse(CONST::SMB_COM_NT_CREATE_ANDX)
|
|
1012
1057
|
|
|
@@ -1019,7 +1064,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1019
1064
|
end
|
|
1020
1065
|
|
|
1021
1066
|
# Deletes a file from a share
|
|
1022
|
-
def delete(filename, tree_id = self.last_tree_id)
|
|
1067
|
+
def delete(filename, tree_id = self.last_tree_id, do_recv = true)
|
|
1023
1068
|
|
|
1024
1069
|
pkt = CONST::SMB_DELETE_PKT.make_struct
|
|
1025
1070
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1034,7 +1079,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1034
1079
|
pkt['Payload'].v['BufferFormat'] = 4
|
|
1035
1080
|
pkt['Payload'].v['Payload'] = filename + "\x00"
|
|
1036
1081
|
|
|
1037
|
-
self.smb_send(pkt.to_s)
|
|
1082
|
+
ret = self.smb_send(pkt.to_s)
|
|
1083
|
+
return ret if not do_recv
|
|
1038
1084
|
|
|
1039
1085
|
ack = self.smb_recv_parse(CONST::SMB_COM_DELETE)
|
|
1040
1086
|
|
|
@@ -1042,7 +1088,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1042
1088
|
end
|
|
1043
1089
|
|
|
1044
1090
|
# Opens an existing file or creates a new one
|
|
1045
|
-
def open(filename, mode = 0x12, access = 0x42)
|
|
1091
|
+
def open(filename, mode = 0x12, access = 0x42, do_recv = true)
|
|
1046
1092
|
|
|
1047
1093
|
pkt = CONST::SMB_OPEN_PKT.make_struct
|
|
1048
1094
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1058,7 +1104,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1058
1104
|
pkt['Payload'].v['OpenFunction'] = mode
|
|
1059
1105
|
pkt['Payload'].v['Payload'] = filename + "\x00"
|
|
1060
1106
|
|
|
1061
|
-
self.smb_send(pkt.to_s)
|
|
1107
|
+
ret = self.smb_send(pkt.to_s)
|
|
1108
|
+
return ret if not do_recv
|
|
1062
1109
|
|
|
1063
1110
|
ack = self.smb_recv_parse(CONST::SMB_COM_OPEN_ANDX)
|
|
1064
1111
|
|
|
@@ -1071,7 +1118,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1071
1118
|
end
|
|
1072
1119
|
|
|
1073
1120
|
# Closes an open file handle
|
|
1074
|
-
def close(file_id = self.last_file_id, tree_id = self.last_tree_id)
|
|
1121
|
+
def close(file_id = self.last_file_id, tree_id = self.last_tree_id, do_recv = true)
|
|
1075
1122
|
|
|
1076
1123
|
pkt = CONST::SMB_CLOSE_PKT.make_struct
|
|
1077
1124
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1085,7 +1132,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1085
1132
|
pkt['Payload'].v['FileID'] = file_id
|
|
1086
1133
|
pkt['Payload'].v['LastWrite'] = -1
|
|
1087
1134
|
|
|
1088
|
-
self.smb_send(pkt.to_s)
|
|
1135
|
+
ret = self.smb_send(pkt.to_s)
|
|
1136
|
+
return ret if not do_recv
|
|
1089
1137
|
|
|
1090
1138
|
ack = self.smb_recv_parse(CONST::SMB_COM_CLOSE)
|
|
1091
1139
|
|
|
@@ -1094,7 +1142,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1094
1142
|
|
|
1095
1143
|
|
|
1096
1144
|
# Writes data to an open file handle
|
|
1097
|
-
def write(file_id = self.last_file_id, offset = 0, data = '')
|
|
1145
|
+
def write(file_id = self.last_file_id, offset = 0, data = '', do_recv = true)
|
|
1098
1146
|
|
|
1099
1147
|
pkt = CONST::SMB_WRITE_PKT.make_struct
|
|
1100
1148
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1119,7 +1167,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1119
1167
|
pkt['Payload'].v['DataOffset'] = data_offset + filler.length
|
|
1120
1168
|
pkt['Payload'].v['Payload'] = filler + data
|
|
1121
1169
|
|
|
1122
|
-
self.smb_send(pkt.to_s)
|
|
1170
|
+
ret = self.smb_send(pkt.to_s)
|
|
1171
|
+
return ret if not do_recv
|
|
1123
1172
|
|
|
1124
1173
|
ack = self.smb_recv_parse(CONST::SMB_COM_WRITE_ANDX)
|
|
1125
1174
|
|
|
@@ -1128,7 +1177,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1128
1177
|
|
|
1129
1178
|
|
|
1130
1179
|
# Reads data from an open file handle
|
|
1131
|
-
def read(file_id = self.last_file_id, offset = 0, data_length = 64000)
|
|
1180
|
+
def read(file_id = self.last_file_id, offset = 0, data_length = 64000, do_recv = true)
|
|
1132
1181
|
|
|
1133
1182
|
pkt = CONST::SMB_READ_PKT.make_struct
|
|
1134
1183
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1146,7 +1195,8 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1146
1195
|
pkt['Payload'].v['MinCount'] = data_length
|
|
1147
1196
|
pkt['Payload'].v['Reserved2'] = -1
|
|
1148
1197
|
|
|
1149
|
-
self.smb_send(pkt.to_s)
|
|
1198
|
+
ret = self.smb_send(pkt.to_s)
|
|
1199
|
+
return ret if not do_recv
|
|
1150
1200
|
|
|
1151
1201
|
ack = self.smb_recv_parse(CONST::SMB_COM_READ_ANDX, true)
|
|
1152
1202
|
|
|
@@ -1182,7 +1232,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1182
1232
|
end
|
|
1183
1233
|
|
|
1184
1234
|
# Perform a transaction against a given pipe name
|
|
1185
|
-
def trans(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response =
|
|
1235
|
+
def trans(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = false, do_recv = true)
|
|
1186
1236
|
|
|
1187
1237
|
# Null-terminate the pipe parameter if needed
|
|
1188
1238
|
if (pipe[-1,1] != "\x00")
|
|
@@ -1242,12 +1292,10 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1242
1292
|
pkt['Payload'].v['Flags'] = 2
|
|
1243
1293
|
end
|
|
1244
1294
|
|
|
1245
|
-
|
|
1246
|
-
if no_response
|
|
1247
|
-
return response
|
|
1248
|
-
end
|
|
1295
|
+
ret = self.smb_send(pkt.to_s)
|
|
1296
|
+
return ret if no_response or not do_recv
|
|
1249
1297
|
|
|
1250
|
-
|
|
1298
|
+
self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
|
|
1251
1299
|
end
|
|
1252
1300
|
|
|
1253
1301
|
|
|
@@ -1255,7 +1303,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1255
1303
|
# Perform a transaction against a given pipe name
|
|
1256
1304
|
# Difference from trans: sets MaxParam/MaxData to zero
|
|
1257
1305
|
# This is required to trigger mailslot bug :-(
|
|
1258
|
-
def trans_maxzero(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response =
|
|
1306
|
+
def trans_maxzero(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = false, do_recv = true)
|
|
1259
1307
|
|
|
1260
1308
|
# Null-terminate the pipe parameter if needed
|
|
1261
1309
|
if (pipe[-1] != 0)
|
|
@@ -1315,17 +1363,15 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1315
1363
|
pkt['Payload'].v['Flags'] = 2
|
|
1316
1364
|
end
|
|
1317
1365
|
|
|
1318
|
-
|
|
1319
|
-
if no_response
|
|
1320
|
-
return response
|
|
1321
|
-
end
|
|
1366
|
+
ret = self.smb_send(pkt.to_s)
|
|
1367
|
+
return ret if no_response or not do_recv
|
|
1322
1368
|
|
|
1323
|
-
|
|
1369
|
+
self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
|
|
1324
1370
|
end
|
|
1325
1371
|
|
|
1326
1372
|
|
|
1327
1373
|
# Perform a transaction against a given pipe name (no null terminator)
|
|
1328
|
-
def trans_nonull(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response =
|
|
1374
|
+
def trans_nonull(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = false, do_recv = true)
|
|
1329
1375
|
|
|
1330
1376
|
pkt = CONST::SMB_TRANS_PKT.make_struct
|
|
1331
1377
|
self.smb_defaults(pkt['Payload']['SMB'])
|
|
@@ -1380,16 +1426,14 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1380
1426
|
pkt['Payload'].v['Flags'] = 2
|
|
1381
1427
|
end
|
|
1382
1428
|
|
|
1383
|
-
|
|
1384
|
-
if no_response
|
|
1385
|
-
return response
|
|
1386
|
-
end
|
|
1429
|
+
ret = self.smb_send(pkt.to_s)
|
|
1430
|
+
return ret if no_response or not do_recv
|
|
1387
1431
|
|
|
1388
|
-
|
|
1432
|
+
self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
|
|
1389
1433
|
end
|
|
1390
1434
|
|
|
1391
1435
|
# Perform a transaction2 request using the specified subcommand, parameters, and data
|
|
1392
|
-
def trans2(subcommand, param = '', body = '')
|
|
1436
|
+
def trans2(subcommand, param = '', body = '', do_recv = true)
|
|
1393
1437
|
|
|
1394
1438
|
setup_count = 1
|
|
1395
1439
|
setup_data = [subcommand].pack('v')
|
|
@@ -1419,10 +1463,11 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1419
1463
|
pkt['Payload'].v['SetupCount'] = setup_count
|
|
1420
1464
|
pkt['Payload'].v['SetupData'] = setup_data
|
|
1421
1465
|
|
|
1422
|
-
|
|
1423
1466
|
pkt['Payload'].v['Payload'] = data
|
|
1424
1467
|
|
|
1425
|
-
self.smb_send(pkt.to_s)
|
|
1468
|
+
ret = self.smb_send(pkt.to_s)
|
|
1469
|
+
return ret if not do_recv
|
|
1470
|
+
|
|
1426
1471
|
ack = self.smb_recv_parse(CONST::SMB_COM_TRANSACTION2)
|
|
1427
1472
|
|
|
1428
1473
|
return ack
|
|
@@ -1430,7 +1475,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1430
1475
|
|
|
1431
1476
|
|
|
1432
1477
|
# Perform a nttransaction request using the specified subcommand, parameters, and data
|
|
1433
|
-
def nttrans(subcommand, param = '', body = '', setup_count = 0, setup_data = '')
|
|
1478
|
+
def nttrans(subcommand, param = '', body = '', setup_count = 0, setup_data = '', do_recv = true)
|
|
1434
1479
|
|
|
1435
1480
|
data = param + body
|
|
1436
1481
|
|
|
@@ -1460,13 +1505,15 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1460
1505
|
|
|
1461
1506
|
pkt['Payload'].v['Payload'] = data
|
|
1462
1507
|
|
|
1463
|
-
self.smb_send(pkt.to_s)
|
|
1508
|
+
ret = self.smb_send(pkt.to_s)
|
|
1509
|
+
return ret if not do_recv
|
|
1510
|
+
|
|
1464
1511
|
ack = self.smb_recv_parse(CONST::SMB_COM_NT_TRANSACT)
|
|
1465
1512
|
return ack
|
|
1466
1513
|
end
|
|
1467
1514
|
|
|
1468
1515
|
# Perform a nttransaction request using the specified subcommand, parameters, and data
|
|
1469
|
-
def nttrans_secondary(param = '', body = '')
|
|
1516
|
+
def nttrans_secondary(param = '', body = '', do_recv = true)
|
|
1470
1517
|
|
|
1471
1518
|
data = param + body
|
|
1472
1519
|
|
|
@@ -1491,7 +1538,9 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1491
1538
|
|
|
1492
1539
|
pkt['Payload'].v['Payload'] = data
|
|
1493
1540
|
|
|
1494
|
-
self.smb_send(pkt.to_s)
|
|
1541
|
+
ret = self.smb_send(pkt.to_s)
|
|
1542
|
+
return ret if not do_recv
|
|
1543
|
+
|
|
1495
1544
|
ack = self.smb_recv_parse(CONST::SMB_COM_NT_TRANSACT_SECONDARY)
|
|
1496
1545
|
return ack
|
|
1497
1546
|
end
|
|
@@ -1708,6 +1757,7 @@ EVADE = Rex::Proto::SMB::Evasions
|
|
|
1708
1757
|
|
|
1709
1758
|
# public read/write methods
|
|
1710
1759
|
attr_accessor :native_os, :native_lm, :encrypt_passwords, :extended_security, :read_timeout, :evasion_opts
|
|
1760
|
+
attr_accessor :system_time, :system_zone
|
|
1711
1761
|
|
|
1712
1762
|
# public read methods
|
|
1713
1763
|
attr_reader :dialect, :session_id, :challenge_key, :peer_native_lm, :peer_native_os
|
|
@@ -1730,4 +1780,3 @@ end
|
|
|
1730
1780
|
end
|
|
1731
1781
|
end
|
|
1732
1782
|
end
|
|
1733
|
-
|