dstruct 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.
- checksums.yaml +15 -0
- data/README.markdown +23 -0
- data/examples/smb_example.rb +35 -0
- data/lib/rex.rb +108 -0
- data/lib/rex/LICENSE +29 -0
- data/lib/rex/arch.rb +104 -0
- data/lib/rex/arch/sparc.rb +75 -0
- data/lib/rex/arch/x86.rb +524 -0
- data/lib/rex/assembly/nasm.rb +104 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +389 -0
- data/lib/rex/constants.rb +124 -0
- data/lib/rex/elfparsey.rb +9 -0
- data/lib/rex/elfparsey/elf.rb +121 -0
- data/lib/rex/elfparsey/elfbase.rb +256 -0
- data/lib/rex/elfparsey/exceptions.rb +25 -0
- data/lib/rex/elfscan.rb +10 -0
- data/lib/rex/elfscan/scanner.rb +226 -0
- data/lib/rex/elfscan/search.rb +44 -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 +90 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +116 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +123 -0
- data/lib/rex/encoder/bloxor/bloxor.rb +327 -0
- data/lib/rex/encoder/ndr.rb +90 -0
- data/lib/rex/encoder/nonalpha.rb +61 -0
- data/lib/rex/encoder/nonupper.rb +64 -0
- data/lib/rex/encoder/xdr.rb +107 -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/encoding/xor.rb +20 -0
- data/lib/rex/encoding/xor/byte.rb +15 -0
- data/lib/rex/encoding/xor/dword.rb +21 -0
- data/lib/rex/encoding/xor/dword_additive.rb +92 -0
- data/lib/rex/encoding/xor/exceptions.rb +17 -0
- data/lib/rex/encoding/xor/generic.rb +146 -0
- data/lib/rex/encoding/xor/qword.rb +15 -0
- data/lib/rex/encoding/xor/word.rb +21 -0
- data/lib/rex/exceptions.rb +275 -0
- data/lib/rex/exploitation/cmdstager.rb +10 -0
- data/lib/rex/exploitation/cmdstager/base.rb +190 -0
- data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
- data/lib/rex/exploitation/cmdstager/debug_asm.rb +140 -0
- data/lib/rex/exploitation/cmdstager/debug_write.rb +134 -0
- data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
- data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
- data/lib/rex/exploitation/cmdstager/tftp.rb +71 -0
- data/lib/rex/exploitation/cmdstager/vbs.rb +126 -0
- data/lib/rex/exploitation/egghunter.rb +425 -0
- data/lib/rex/exploitation/encryptjs.rb +78 -0
- data/lib/rex/exploitation/heaplib.js.b64 +331 -0
- data/lib/rex/exploitation/heaplib.rb +107 -0
- data/lib/rex/exploitation/js.rb +6 -0
- data/lib/rex/exploitation/js/detect.rb +69 -0
- data/lib/rex/exploitation/js/memory.rb +81 -0
- data/lib/rex/exploitation/js/network.rb +84 -0
- data/lib/rex/exploitation/js/utils.rb +33 -0
- data/lib/rex/exploitation/jsobfu.rb +513 -0
- data/lib/rex/exploitation/obfuscatejs.rb +336 -0
- data/lib/rex/exploitation/omelet.rb +321 -0
- data/lib/rex/exploitation/opcodedb.rb +819 -0
- data/lib/rex/exploitation/powershell.rb +62 -0
- data/lib/rex/exploitation/powershell/function.rb +63 -0
- data/lib/rex/exploitation/powershell/obfu.rb +98 -0
- data/lib/rex/exploitation/powershell/output.rb +151 -0
- data/lib/rex/exploitation/powershell/param.rb +23 -0
- data/lib/rex/exploitation/powershell/parser.rb +183 -0
- data/lib/rex/exploitation/powershell/psh_methods.rb +70 -0
- data/lib/rex/exploitation/powershell/script.rb +99 -0
- data/lib/rex/exploitation/ropdb.rb +190 -0
- data/lib/rex/exploitation/seh.rb +93 -0
- data/lib/rex/file.rb +160 -0
- data/lib/rex/image_source.rb +10 -0
- data/lib/rex/image_source/disk.rb +58 -0
- data/lib/rex/image_source/image_source.rb +44 -0
- data/lib/rex/image_source/memory.rb +35 -0
- data/lib/rex/io/bidirectional_pipe.rb +161 -0
- data/lib/rex/io/datagram_abstraction.rb +35 -0
- data/lib/rex/io/ring_buffer.rb +369 -0
- data/lib/rex/io/stream.rb +312 -0
- data/lib/rex/io/stream_abstraction.rb +209 -0
- data/lib/rex/io/stream_server.rb +221 -0
- data/lib/rex/job_container.rb +200 -0
- data/lib/rex/logging.rb +4 -0
- data/lib/rex/logging/log_dispatcher.rb +180 -0
- data/lib/rex/logging/log_sink.rb +43 -0
- data/lib/rex/logging/sinks/flatfile.rb +56 -0
- data/lib/rex/logging/sinks/stderr.rb +44 -0
- data/lib/rex/mac_oui.rb +16581 -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 +10 -0
- data/lib/rex/mime/encoding.rb +17 -0
- data/lib/rex/mime/header.rb +78 -0
- data/lib/rex/mime/message.rb +150 -0
- data/lib/rex/mime/part.rb +50 -0
- data/lib/rex/nop/opty2.rb +109 -0
- data/lib/rex/nop/opty2_tables.rb +301 -0
- data/lib/rex/ole.rb +202 -0
- data/lib/rex/ole/clsid.rb +44 -0
- data/lib/rex/ole/difat.rb +138 -0
- data/lib/rex/ole/directory.rb +228 -0
- data/lib/rex/ole/direntry.rb +237 -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 +96 -0
- data/lib/rex/ole/header.rb +201 -0
- data/lib/rex/ole/minifat.rb +74 -0
- data/lib/rex/ole/propset.rb +141 -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 +392 -0
- data/lib/rex/ole/stream.rb +50 -0
- data/lib/rex/ole/substorage.rb +46 -0
- data/lib/rex/ole/util.rb +154 -0
- data/lib/rex/parser/acunetix_nokogiri.rb +406 -0
- data/lib/rex/parser/apple_backup_manifestdb.rb +132 -0
- data/lib/rex/parser/appscan_nokogiri.rb +367 -0
- data/lib/rex/parser/arguments.rb +108 -0
- data/lib/rex/parser/burp_session_nokogiri.rb +291 -0
- data/lib/rex/parser/ci_nokogiri.rb +193 -0
- data/lib/rex/parser/foundstone_nokogiri.rb +342 -0
- data/lib/rex/parser/fusionvm_nokogiri.rb +109 -0
- data/lib/rex/parser/group_policy_preferences.rb +185 -0
- data/lib/rex/parser/ini.rb +186 -0
- data/lib/rex/parser/ip360_aspl_xml.rb +103 -0
- data/lib/rex/parser/ip360_xml.rb +98 -0
- data/lib/rex/parser/mbsa_nokogiri.rb +256 -0
- data/lib/rex/parser/nessus_xml.rb +121 -0
- data/lib/rex/parser/netsparker_xml.rb +109 -0
- data/lib/rex/parser/nexpose_raw_nokogiri.rb +686 -0
- data/lib/rex/parser/nexpose_simple_nokogiri.rb +330 -0
- data/lib/rex/parser/nexpose_xml.rb +172 -0
- data/lib/rex/parser/nmap_nokogiri.rb +394 -0
- data/lib/rex/parser/nmap_xml.rb +166 -0
- data/lib/rex/parser/nokogiri_doc_mixin.rb +233 -0
- data/lib/rex/parser/openvas_nokogiri.rb +172 -0
- data/lib/rex/parser/outpost24_nokogiri.rb +240 -0
- data/lib/rex/parser/retina_xml.rb +110 -0
- data/lib/rex/parser/unattend.rb +171 -0
- data/lib/rex/parser/wapiti_nokogiri.rb +105 -0
- data/lib/rex/payloads.rb +2 -0
- data/lib/rex/payloads/win32.rb +3 -0
- data/lib/rex/payloads/win32/common.rb +27 -0
- data/lib/rex/payloads/win32/kernel.rb +54 -0
- data/lib/rex/payloads/win32/kernel/common.rb +55 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +13 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +51 -0
- data/lib/rex/payloads/win32/kernel/stager.rb +195 -0
- data/lib/rex/peparsey.rb +10 -0
- data/lib/rex/peparsey/exceptions.rb +30 -0
- data/lib/rex/peparsey/pe.rb +210 -0
- data/lib/rex/peparsey/pe_memdump.rb +61 -0
- data/lib/rex/peparsey/pebase.rb +1662 -0
- data/lib/rex/peparsey/section.rb +128 -0
- data/lib/rex/pescan.rb +11 -0
- data/lib/rex/pescan/analyze.rb +366 -0
- data/lib/rex/pescan/scanner.rb +230 -0
- data/lib/rex/pescan/search.rb +68 -0
- data/lib/rex/platforms.rb +2 -0
- data/lib/rex/platforms/windows.rb +52 -0
- data/lib/rex/poly.rb +134 -0
- data/lib/rex/poly/block.rb +480 -0
- data/lib/rex/poly/machine.rb +13 -0
- data/lib/rex/poly/machine/machine.rb +830 -0
- data/lib/rex/poly/machine/x86.rb +509 -0
- data/lib/rex/poly/register.rb +101 -0
- data/lib/rex/poly/register/x86.rb +41 -0
- data/lib/rex/post.rb +7 -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 +5 -0
- data/lib/rex/post/meterpreter/channel.rb +446 -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 +483 -0
- data/lib/rex/post/meterpreter/client_core.rb +352 -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/android/android.rb +128 -0
- data/lib/rex/post/meterpreter/extensions/android/tlv.rb +40 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +17 -0
- data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
- data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
- data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
- data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
- data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
- data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +22 -0
- data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
- data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
- data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
- data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +43 -0
- data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
- data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +17 -0
- data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
- data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +16 -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 +109 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +29 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +117 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +27 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +396 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +284 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +399 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +104 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +256 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +129 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +67 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +139 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +180 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +168 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +209 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38146 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2102 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3852 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +168 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_psapi.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3170 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +87 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +613 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +388 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +111 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +149 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +27 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +515 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +319 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +23 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +301 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +106 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +676 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +96 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +151 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +128 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +192 -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 +60 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +408 -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 +328 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +193 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +188 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +180 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +236 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +259 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +201 -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 +709 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +543 -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 +142 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +86 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/android.rb +383 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +939 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +109 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +242 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +232 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +97 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +52 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +133 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +204 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +66 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +527 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +448 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +906 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +318 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +343 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +99 -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 +15 -0
- data/lib/rex/proto/addp.rb +218 -0
- data/lib/rex/proto/dcerpc.rb +7 -0
- data/lib/rex/proto/dcerpc/client.rb +362 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +151 -0
- data/lib/rex/proto/dcerpc/handle.rb +48 -0
- data/lib/rex/proto/dcerpc/ndr.rb +73 -0
- data/lib/rex/proto/dcerpc/packet.rb +264 -0
- data/lib/rex/proto/dcerpc/response.rb +188 -0
- data/lib/rex/proto/dcerpc/uuid.rb +85 -0
- data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
- data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
- data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
- data/lib/rex/proto/dhcp.rb +7 -0
- data/lib/rex/proto/dhcp/constants.rb +34 -0
- data/lib/rex/proto/dhcp/server.rb +334 -0
- data/lib/rex/proto/drda.rb +6 -0
- data/lib/rex/proto/drda/constants.rb +50 -0
- data/lib/rex/proto/drda/packet.rb +253 -0
- data/lib/rex/proto/drda/utils.rb +124 -0
- data/lib/rex/proto/http.rb +7 -0
- data/lib/rex/proto/http/client.rb +722 -0
- data/lib/rex/proto/http/client_request.rb +472 -0
- data/lib/rex/proto/http/handler.rb +47 -0
- data/lib/rex/proto/http/handler/erb.rb +129 -0
- data/lib/rex/proto/http/handler/proc.rb +61 -0
- data/lib/rex/proto/http/header.rb +173 -0
- data/lib/rex/proto/http/packet.rb +414 -0
- data/lib/rex/proto/http/request.rb +354 -0
- data/lib/rex/proto/http/response.rb +151 -0
- data/lib/rex/proto/http/server.rb +385 -0
- data/lib/rex/proto/iax2.rb +2 -0
- data/lib/rex/proto/iax2/call.rb +326 -0
- data/lib/rex/proto/iax2/client.rb +218 -0
- data/lib/rex/proto/iax2/codecs.rb +5 -0
- data/lib/rex/proto/iax2/codecs/alaw.rb +16 -0
- data/lib/rex/proto/iax2/codecs/g711.rb +2176 -0
- data/lib/rex/proto/iax2/codecs/mulaw.rb +17 -0
- data/lib/rex/proto/iax2/constants.rb +262 -0
- data/lib/rex/proto/ipmi.rb +57 -0
- data/lib/rex/proto/ipmi/channel_auth_reply.rb +89 -0
- data/lib/rex/proto/ipmi/open_session_reply.rb +36 -0
- data/lib/rex/proto/ipmi/rakp2.rb +36 -0
- data/lib/rex/proto/ipmi/utils.rb +125 -0
- data/lib/rex/proto/natpmp.rb +7 -0
- data/lib/rex/proto/natpmp/constants.rb +19 -0
- data/lib/rex/proto/natpmp/packet.rb +45 -0
- data/lib/rex/proto/ntlm.rb +8 -0
- data/lib/rex/proto/ntlm/base.rb +327 -0
- data/lib/rex/proto/ntlm/constants.rb +75 -0
- data/lib/rex/proto/ntlm/crypt.rb +412 -0
- data/lib/rex/proto/ntlm/exceptions.rb +17 -0
- data/lib/rex/proto/ntlm/message.rb +534 -0
- data/lib/rex/proto/ntlm/utils.rb +765 -0
- data/lib/rex/proto/ntp.rb +3 -0
- data/lib/rex/proto/ntp/constants.rb +12 -0
- data/lib/rex/proto/ntp/modes.rb +130 -0
- data/lib/rex/proto/pjl.rb +31 -0
- data/lib/rex/proto/pjl/client.rb +163 -0
- data/lib/rex/proto/proxy/socks4a.rb +441 -0
- data/lib/rex/proto/rfb.rb +13 -0
- data/lib/rex/proto/rfb/cipher.rb +82 -0
- data/lib/rex/proto/rfb/client.rb +205 -0
- data/lib/rex/proto/rfb/constants.rb +50 -0
- data/lib/rex/proto/sip.rb +4 -0
- data/lib/rex/proto/sip/response.rb +61 -0
- data/lib/rex/proto/smb.rb +8 -0
- data/lib/rex/proto/smb/client.rb +2064 -0
- data/lib/rex/proto/smb/constants.rb +1064 -0
- data/lib/rex/proto/smb/crypt.rb +37 -0
- data/lib/rex/proto/smb/evasions.rb +67 -0
- data/lib/rex/proto/smb/exceptions.rb +867 -0
- data/lib/rex/proto/smb/simpleclient.rb +173 -0
- data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
- data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
- data/lib/rex/proto/smb/utils.rb +104 -0
- data/lib/rex/proto/sunrpc.rb +2 -0
- data/lib/rex/proto/sunrpc/client.rb +196 -0
- data/lib/rex/proto/tftp.rb +13 -0
- data/lib/rex/proto/tftp/client.rb +344 -0
- data/lib/rex/proto/tftp/constants.rb +39 -0
- data/lib/rex/proto/tftp/server.rb +497 -0
- data/lib/rex/random_identifier_generator.rb +177 -0
- data/lib/rex/registry.rb +14 -0
- data/lib/rex/registry/hive.rb +132 -0
- data/lib/rex/registry/lfkey.rb +51 -0
- data/lib/rex/registry/nodekey.rb +54 -0
- data/lib/rex/registry/regf.rb +25 -0
- data/lib/rex/registry/valuekey.rb +67 -0
- data/lib/rex/registry/valuelist.rb +29 -0
- data/lib/rex/ropbuilder.rb +8 -0
- data/lib/rex/ropbuilder/rop.rb +271 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +61 -0
- data/lib/rex/script/meterpreter.rb +16 -0
- data/lib/rex/script/shell.rb +10 -0
- data/lib/rex/service.rb +49 -0
- data/lib/rex/service_manager.rb +154 -0
- data/lib/rex/services/local_relay.rb +424 -0
- data/lib/rex/socket.rb +788 -0
- data/lib/rex/socket/comm.rb +120 -0
- data/lib/rex/socket/comm/local.rb +526 -0
- data/lib/rex/socket/ip.rb +132 -0
- data/lib/rex/socket/parameters.rb +363 -0
- data/lib/rex/socket/range_walker.rb +470 -0
- data/lib/rex/socket/ssl_tcp.rb +345 -0
- data/lib/rex/socket/ssl_tcp_server.rb +188 -0
- data/lib/rex/socket/subnet_walker.rb +76 -0
- data/lib/rex/socket/switch_board.rb +289 -0
- data/lib/rex/socket/tcp.rb +79 -0
- data/lib/rex/socket/tcp_server.rb +67 -0
- data/lib/rex/socket/udp.rb +165 -0
- data/lib/rex/sslscan/result.rb +201 -0
- data/lib/rex/sslscan/scanner.rb +206 -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 +85 -0
- data/lib/rex/sync/read_write_lock.rb +177 -0
- data/lib/rex/sync/ref.rb +58 -0
- data/lib/rex/sync/thread_safe.rb +83 -0
- data/lib/rex/text.rb +1813 -0
- data/lib/rex/thread_factory.rb +43 -0
- data/lib/rex/time.rb +66 -0
- data/lib/rex/transformer.rb +116 -0
- data/lib/rex/ui.rb +22 -0
- data/lib/rex/ui/interactive.rb +304 -0
- data/lib/rex/ui/output.rb +85 -0
- data/lib/rex/ui/output/none.rb +19 -0
- data/lib/rex/ui/progress_tracker.rb +97 -0
- data/lib/rex/ui/subscriber.rb +160 -0
- data/lib/rex/ui/text/color.rb +98 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +538 -0
- data/lib/rex/ui/text/input.rb +119 -0
- data/lib/rex/ui/text/input/buffer.rb +79 -0
- data/lib/rex/ui/text/input/readline.rb +129 -0
- data/lib/rex/ui/text/input/socket.rb +96 -0
- data/lib/rex/ui/text/input/stdio.rb +46 -0
- data/lib/rex/ui/text/irb_shell.rb +62 -0
- data/lib/rex/ui/text/output.rb +86 -0
- data/lib/rex/ui/text/output/buffer.rb +62 -0
- data/lib/rex/ui/text/output/buffer/stdout.rb +26 -0
- data/lib/rex/ui/text/output/file.rb +44 -0
- data/lib/rex/ui/text/output/socket.rb +44 -0
- data/lib/rex/ui/text/output/stdio.rb +53 -0
- data/lib/rex/ui/text/output/tee.rb +56 -0
- data/lib/rex/ui/text/progress_tracker.rb +57 -0
- data/lib/rex/ui/text/shell.rb +403 -0
- data/lib/rex/ui/text/table.rb +346 -0
- data/lib/rex/zip.rb +96 -0
- data/lib/rex/zip/archive.rb +130 -0
- data/lib/rex/zip/blocks.rb +184 -0
- data/lib/rex/zip/entry.rb +122 -0
- data/lib/rex/zip/jar.rb +283 -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 +536 -0
data/lib/rex/post/gen.pl
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/perl
|
|
2
|
+
use strict;
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
foreach my $f ('atime', 'blockdev?', 'chardev?', 'ctime', 'directory?',
|
|
6
|
+
'executable?', 'executable_real?', 'file?', 'ftype', 'grpowned?',
|
|
7
|
+
'mtime', 'owned?', 'pipe?', 'readable?', 'readable_real?', 'setuid?',
|
|
8
|
+
'setgid?', 'size', 'socket?', 'sticky?', 'symlink?', 'writeable?',
|
|
9
|
+
'writeable_real?', 'zero?') {
|
|
10
|
+
|
|
11
|
+
my $t = "\t";
|
|
12
|
+
print "${t}def File.$f(name)\n\t${t}stat(name).$f\n${t}end\n";
|
|
13
|
+
}
|
data/lib/rex/post/io.rb
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
#
|
|
8
|
+
# Base IO class that is modeled after the ruby IO class.
|
|
9
|
+
#
|
|
10
|
+
##
|
|
11
|
+
class IO
|
|
12
|
+
protected
|
|
13
|
+
attr_accessor :filed, :mode
|
|
14
|
+
public
|
|
15
|
+
|
|
16
|
+
##
|
|
17
|
+
#
|
|
18
|
+
# Conditionals
|
|
19
|
+
#
|
|
20
|
+
##
|
|
21
|
+
|
|
22
|
+
def eof?
|
|
23
|
+
return eof
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def closed?
|
|
27
|
+
raise NotImplementedError
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def tty?
|
|
31
|
+
return isatty
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
#
|
|
36
|
+
# I/O operations
|
|
37
|
+
#
|
|
38
|
+
##
|
|
39
|
+
|
|
40
|
+
def binmode
|
|
41
|
+
raise NotImplementedError
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def close
|
|
45
|
+
raise NotImplementedError
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def close_read
|
|
49
|
+
raise NotImplementedError
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def close_write
|
|
53
|
+
raise NotImplementedError
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def each(sep = $/, &block)
|
|
57
|
+
raise NotImplementedError
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def each_line(sep = $/, &block)
|
|
61
|
+
raise NotImplementedError
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def each_byte(&block)
|
|
65
|
+
raise NotImplementedError
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def eof
|
|
69
|
+
raise NotImplementedError
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def fcntl(cmd, arg)
|
|
73
|
+
raise NotImplementedError
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def flush
|
|
77
|
+
raise NotImplementedError
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def fsync
|
|
81
|
+
raise NotImplementedError
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def getc
|
|
85
|
+
raise NotImplementedError
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def gets(sep = $/)
|
|
89
|
+
raise NotImplementedError
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def ioctl(cmd, arg)
|
|
93
|
+
raise NotImplementedError
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def isatty
|
|
97
|
+
raise NotImplementedError
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def lineno
|
|
101
|
+
raise NotImplementedError
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def pos
|
|
105
|
+
raise NotImplementedError
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def print
|
|
109
|
+
raise NotImplementedError
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def printf(fmt, *args)
|
|
113
|
+
raise NotImplementedError
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def putc(obj)
|
|
117
|
+
raise NotImplementedError
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def puts(obj)
|
|
121
|
+
raise NotImplementedError
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def read(length = nil, buffer = nil)
|
|
125
|
+
raise NotImplementedError
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def readchar
|
|
129
|
+
raise NotImplementedError
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def readline(sep = $/)
|
|
133
|
+
raise NotImplementedError
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def readlines(sep = $/)
|
|
137
|
+
raise NotImplementedError
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def rewind
|
|
141
|
+
raise NotImplementedError
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def seek(offset, whence = SEEK_SET)
|
|
145
|
+
raise NotImplementedError
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def stat
|
|
149
|
+
raise NotImplementedError
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def sync
|
|
153
|
+
raise NotImplementedError
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def sysread(length)
|
|
157
|
+
raise NotImplementedError
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def sysseek(offset, whence = SEEK_SET)
|
|
161
|
+
raise NotImplementedError
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def syswrite(buf)
|
|
165
|
+
raise NotImplementedError
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def tell
|
|
169
|
+
return pos
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def ungetc(val)
|
|
173
|
+
raise NotImplementedError
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def write(buf)
|
|
177
|
+
raise NotImplementedError
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
end; end # Post/Rex
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/post/meterpreter/inbound_packet_handler'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
module Post
|
|
7
|
+
module Meterpreter
|
|
8
|
+
|
|
9
|
+
#
|
|
10
|
+
# The various types of channels
|
|
11
|
+
#
|
|
12
|
+
CHANNEL_CLASS_STREAM = 1
|
|
13
|
+
CHANNEL_CLASS_DATAGRAM = 2
|
|
14
|
+
CHANNEL_CLASS_POOL = 3
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# The various flags that can affect how the channel operates
|
|
18
|
+
#
|
|
19
|
+
# CHANNEL_FLAG_SYNCHRONOUS
|
|
20
|
+
# Specifies that I/O requests on the channel are blocking.
|
|
21
|
+
#
|
|
22
|
+
# CHANNEL_FLAG_COMPRESS
|
|
23
|
+
# Specifies that I/O requests on the channel have their data zlib compressed.
|
|
24
|
+
#
|
|
25
|
+
CHANNEL_FLAG_SYNCHRONOUS = (1 << 0)
|
|
26
|
+
CHANNEL_FLAG_COMPRESS = (1 << 1)
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# The core types of direct I/O requests
|
|
30
|
+
#
|
|
31
|
+
CHANNEL_DIO_READ = 'read'
|
|
32
|
+
CHANNEL_DIO_WRITE = 'write'
|
|
33
|
+
CHANNEL_DIO_CLOSE = 'close'
|
|
34
|
+
|
|
35
|
+
###
|
|
36
|
+
#
|
|
37
|
+
# The channel class represents a logical data pipe that exists between the
|
|
38
|
+
# client and the server. The purpose and behavior of the channel depends on
|
|
39
|
+
# which type it is. The three basic types of channels are streams, datagrams,
|
|
40
|
+
# and pools. Streams are basically equivalent to a TCP connection.
|
|
41
|
+
# Bidirectional, connection-oriented streams. Datagrams are basically
|
|
42
|
+
# equivalent to a UDP session. Bidirectional, connectionless. Pools are
|
|
43
|
+
# basically equivalent to a uni-directional connection, like a file handle.
|
|
44
|
+
# Pools denote channels that only have requests flowing in one direction.
|
|
45
|
+
#
|
|
46
|
+
###
|
|
47
|
+
class Channel
|
|
48
|
+
|
|
49
|
+
# Class modifications to support global channel message
|
|
50
|
+
# dispatching without having to register a per-instance handler
|
|
51
|
+
class << self
|
|
52
|
+
include Rex::Post::Meterpreter::InboundPacketHandler
|
|
53
|
+
|
|
54
|
+
# Class request handler for all channels that dispatches requests
|
|
55
|
+
# to the appropriate class instance's DIO handler
|
|
56
|
+
def request_handler(client, packet)
|
|
57
|
+
cid = packet.get_tlv_value(TLV_TYPE_CHANNEL_ID)
|
|
58
|
+
|
|
59
|
+
# No channel identifier, then drop it
|
|
60
|
+
if (cid == nil)
|
|
61
|
+
return false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
channel = client.find_channel(cid)
|
|
65
|
+
|
|
66
|
+
# No valid channel context? The channel may not be registered yet
|
|
67
|
+
if (channel == nil)
|
|
68
|
+
return false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
dio = channel.dio_map(packet.method)
|
|
73
|
+
|
|
74
|
+
# Supported DIO request? Dump it.
|
|
75
|
+
if (dio == nil)
|
|
76
|
+
return true
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# Call the channel's dio handler and return success or fail
|
|
81
|
+
# based on what happens
|
|
82
|
+
channel.dio_handler(dio, packet)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
##
|
|
87
|
+
#
|
|
88
|
+
# Factory
|
|
89
|
+
#
|
|
90
|
+
##
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Creates a logical channel between the client and the server
|
|
94
|
+
# based on a given type.
|
|
95
|
+
#
|
|
96
|
+
def Channel.create(client, type = nil, klass = nil,
|
|
97
|
+
flags = CHANNEL_FLAG_SYNCHRONOUS, addends = nil)
|
|
98
|
+
request = Packet.create_request('core_channel_open')
|
|
99
|
+
|
|
100
|
+
# Set the type of channel that we're allocating
|
|
101
|
+
if (type != nil)
|
|
102
|
+
request.add_tlv(TLV_TYPE_CHANNEL_TYPE, type)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# If no factory class was provided, use the default native class
|
|
106
|
+
if (klass == nil)
|
|
107
|
+
klass = self
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
request.add_tlv(TLV_TYPE_CHANNEL_CLASS, klass.cls)
|
|
111
|
+
request.add_tlv(TLV_TYPE_FLAGS, flags)
|
|
112
|
+
request.add_tlvs(addends);
|
|
113
|
+
|
|
114
|
+
# Transmit the request and wait for the response
|
|
115
|
+
response = client.send_request(request)
|
|
116
|
+
cid = response.get_tlv(TLV_TYPE_CHANNEL_ID).value
|
|
117
|
+
|
|
118
|
+
# Create the channel instance
|
|
119
|
+
channel = klass.new(client, cid, type, flags)
|
|
120
|
+
|
|
121
|
+
return channel
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
##
|
|
125
|
+
#
|
|
126
|
+
# Constructor
|
|
127
|
+
#
|
|
128
|
+
##
|
|
129
|
+
|
|
130
|
+
#
|
|
131
|
+
# Initializes the instance's attributes, such as client context,
|
|
132
|
+
# class identifier, type, and flags.
|
|
133
|
+
#
|
|
134
|
+
def initialize(client, cid, type, flags)
|
|
135
|
+
self.client = client
|
|
136
|
+
self.cid = cid
|
|
137
|
+
self.type = type
|
|
138
|
+
self.flags = flags
|
|
139
|
+
|
|
140
|
+
# Add this instance to the list
|
|
141
|
+
if (cid and client)
|
|
142
|
+
client.add_channel(self)
|
|
143
|
+
end
|
|
144
|
+
ObjectSpace.define_finalizer( self, self.class.finalize(self.client, self.cid) )
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def self.finalize(client,cid)
|
|
148
|
+
proc { self._close(client,cid) }
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
##
|
|
152
|
+
#
|
|
153
|
+
# Channel interaction
|
|
154
|
+
#
|
|
155
|
+
##
|
|
156
|
+
|
|
157
|
+
#
|
|
158
|
+
# Wrapper around the low-level channel read operation.
|
|
159
|
+
#
|
|
160
|
+
def read(length = nil, addends = nil)
|
|
161
|
+
return _read(length, addends)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
#
|
|
165
|
+
# Reads data from the remote half of the channel.
|
|
166
|
+
#
|
|
167
|
+
def _read(length = nil, addends = nil)
|
|
168
|
+
if (self.cid == nil)
|
|
169
|
+
raise IOError, "Channel has been closed.", caller
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
request = Packet.create_request('core_channel_read')
|
|
173
|
+
|
|
174
|
+
if (length == nil)
|
|
175
|
+
# Default block size to a higher amount for passive dispatcher
|
|
176
|
+
length = self.client.passive_service ? (1024*1024) : 65536
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
request.add_tlv(TLV_TYPE_CHANNEL_ID, self.cid)
|
|
180
|
+
request.add_tlv(TLV_TYPE_LENGTH, length)
|
|
181
|
+
request.add_tlvs(addends)
|
|
182
|
+
|
|
183
|
+
begin
|
|
184
|
+
response = self.client.send_request(request)
|
|
185
|
+
rescue
|
|
186
|
+
return nil
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# If the channel is in synchronous mode, the response should contain
|
|
190
|
+
# data that was read from the remote side of the channel
|
|
191
|
+
if (flag?(CHANNEL_FLAG_SYNCHRONOUS))
|
|
192
|
+
data = response.get_tlv(TLV_TYPE_CHANNEL_DATA);
|
|
193
|
+
|
|
194
|
+
if (data != nil)
|
|
195
|
+
return data.value
|
|
196
|
+
end
|
|
197
|
+
else
|
|
198
|
+
raise NotImplementedError, "Asynchronous channel mode is not implemented", caller
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
return nil
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
#
|
|
205
|
+
# Wrapper around the low-level write.
|
|
206
|
+
#
|
|
207
|
+
def write(buf, length = nil, addends = nil)
|
|
208
|
+
return _write(buf, length, addends)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
#
|
|
212
|
+
# Writes data to the remote half of the channel.
|
|
213
|
+
#
|
|
214
|
+
def _write(buf, length = nil, addends = nil)
|
|
215
|
+
|
|
216
|
+
if (self.cid == nil)
|
|
217
|
+
raise IOError, "Channel has been closed.", caller
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
request = Packet.create_request('core_channel_write')
|
|
221
|
+
|
|
222
|
+
# Truncation and celebration
|
|
223
|
+
if ((length != nil) &&
|
|
224
|
+
(buf.length >= length))
|
|
225
|
+
buf = buf[0..length]
|
|
226
|
+
else
|
|
227
|
+
length = buf.length
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Populate the request
|
|
231
|
+
request.add_tlv(TLV_TYPE_CHANNEL_ID, self.cid)
|
|
232
|
+
|
|
233
|
+
cdata = request.add_tlv(TLV_TYPE_CHANNEL_DATA, buf)
|
|
234
|
+
if( ( self.flags & CHANNEL_FLAG_COMPRESS ) == CHANNEL_FLAG_COMPRESS )
|
|
235
|
+
cdata.compress = true
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
request.add_tlv(TLV_TYPE_LENGTH, length)
|
|
239
|
+
request.add_tlvs(addends)
|
|
240
|
+
|
|
241
|
+
response = self.client.send_request(request)
|
|
242
|
+
written = response.get_tlv(TLV_TYPE_LENGTH)
|
|
243
|
+
|
|
244
|
+
return (written == nil) ? 0 : written.value
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
#
|
|
248
|
+
# Wrapper around the low-level close.
|
|
249
|
+
#
|
|
250
|
+
def close(addends = nil)
|
|
251
|
+
return _close(addends)
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
#
|
|
255
|
+
# Close the channel for future writes.
|
|
256
|
+
#
|
|
257
|
+
def close_write
|
|
258
|
+
return _close
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
#
|
|
262
|
+
# Close the channel for future reads.
|
|
263
|
+
#
|
|
264
|
+
def close_read
|
|
265
|
+
return _close
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
#
|
|
269
|
+
# Closes the channel.
|
|
270
|
+
#
|
|
271
|
+
def self._close(client, cid, addends=nil)
|
|
272
|
+
if (cid == nil)
|
|
273
|
+
raise IOError, "Channel has been closed.", caller
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
request = Packet.create_request('core_channel_close')
|
|
277
|
+
|
|
278
|
+
# Populate the request
|
|
279
|
+
request.add_tlv(TLV_TYPE_CHANNEL_ID, cid)
|
|
280
|
+
request.add_tlvs(addends)
|
|
281
|
+
|
|
282
|
+
client.send_request(request, nil)
|
|
283
|
+
|
|
284
|
+
# Disassociate this channel instance
|
|
285
|
+
client.remove_channel(cid)
|
|
286
|
+
|
|
287
|
+
return true
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def _close(addends = nil)
|
|
291
|
+
self.class._close(self.client, self.cid, addends)
|
|
292
|
+
self.cid = nil
|
|
293
|
+
end
|
|
294
|
+
#
|
|
295
|
+
# Enables or disables interactive mode.
|
|
296
|
+
#
|
|
297
|
+
def interactive(tf = true, addends = nil)
|
|
298
|
+
if (self.cid == nil)
|
|
299
|
+
raise IOError, "Channel has been closed.", caller
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
request = Packet.create_request('core_channel_interact')
|
|
303
|
+
|
|
304
|
+
# Populate the request
|
|
305
|
+
request.add_tlv(TLV_TYPE_CHANNEL_ID, self.cid)
|
|
306
|
+
request.add_tlv(TLV_TYPE_BOOL, tf)
|
|
307
|
+
request.add_tlvs(addends)
|
|
308
|
+
|
|
309
|
+
self.client.send_request(request)
|
|
310
|
+
|
|
311
|
+
return true
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
##
|
|
315
|
+
#
|
|
316
|
+
# Direct I/O
|
|
317
|
+
#
|
|
318
|
+
##
|
|
319
|
+
|
|
320
|
+
#
|
|
321
|
+
# Handles dispatching I/O requests based on the request packet.
|
|
322
|
+
# The default implementation does nothing with direct I/O requests.
|
|
323
|
+
#
|
|
324
|
+
def dio_handler(dio, packet)
|
|
325
|
+
if (dio == CHANNEL_DIO_READ)
|
|
326
|
+
length = packet.get_tlv_value(TLV_TYPE_LENGTH)
|
|
327
|
+
|
|
328
|
+
return dio_read_handler(packet, length)
|
|
329
|
+
elsif (dio == CHANNEL_DIO_WRITE)
|
|
330
|
+
data = packet.get_tlv_value(TLV_TYPE_CHANNEL_DATA)
|
|
331
|
+
|
|
332
|
+
return dio_write_handler(packet, data)
|
|
333
|
+
elsif (dio == CHANNEL_DIO_CLOSE)
|
|
334
|
+
return dio_close_handler(packet)
|
|
335
|
+
end
|
|
336
|
+
return false;
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
#
|
|
340
|
+
# Stub read handler.
|
|
341
|
+
#
|
|
342
|
+
def dio_read_handler(packet, length)
|
|
343
|
+
return true
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
#
|
|
347
|
+
# Stub write handler.
|
|
348
|
+
#
|
|
349
|
+
def dio_write_handler(packet, data)
|
|
350
|
+
return true
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
#
|
|
354
|
+
# Stub close handler.
|
|
355
|
+
#
|
|
356
|
+
def dio_close_handler(packet)
|
|
357
|
+
client.remove_channel(self.cid)
|
|
358
|
+
|
|
359
|
+
# Trap IOErrors as parts of the channel may have already been closed
|
|
360
|
+
begin
|
|
361
|
+
self.cleanup
|
|
362
|
+
rescue IOError
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# No more channel action, foo.
|
|
366
|
+
self.cid = nil
|
|
367
|
+
|
|
368
|
+
return true
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
#
|
|
372
|
+
# Maps packet request methods to DIO request identifiers on a
|
|
373
|
+
# per-instance basis as other instances may add custom dio
|
|
374
|
+
# handlers.
|
|
375
|
+
#
|
|
376
|
+
def dio_map(method)
|
|
377
|
+
if (method == 'core_channel_read')
|
|
378
|
+
return CHANNEL_DIO_READ
|
|
379
|
+
elsif (method == 'core_channel_write')
|
|
380
|
+
return CHANNEL_DIO_WRITE
|
|
381
|
+
elsif (method == 'core_channel_close')
|
|
382
|
+
return CHANNEL_DIO_CLOSE
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
return nil
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
##
|
|
389
|
+
#
|
|
390
|
+
# Conditionals
|
|
391
|
+
#
|
|
392
|
+
##
|
|
393
|
+
|
|
394
|
+
#
|
|
395
|
+
# Checks to see if a flag is set on the instance's flags attribute.
|
|
396
|
+
#
|
|
397
|
+
def flag?(flag)
|
|
398
|
+
return ((self.flags & flag) == flag)
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
#
|
|
402
|
+
# Returns whether or not the channel is operating synchronously.
|
|
403
|
+
#
|
|
404
|
+
def synchronous?
|
|
405
|
+
return (self.flags & CHANNEL_FLAG_SYNCHRONOUS)
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
#
|
|
409
|
+
# The unique channel identifier.
|
|
410
|
+
#
|
|
411
|
+
attr_reader :cid
|
|
412
|
+
#
|
|
413
|
+
# The type of channel.
|
|
414
|
+
#
|
|
415
|
+
attr_reader :type
|
|
416
|
+
#
|
|
417
|
+
# The class of channel (stream, datagram, pool).
|
|
418
|
+
#
|
|
419
|
+
attr_reader :cls
|
|
420
|
+
#
|
|
421
|
+
# Any channel-specific flag, like synchronous IO.
|
|
422
|
+
#
|
|
423
|
+
attr_reader :flags
|
|
424
|
+
#
|
|
425
|
+
# Any channel-specific parameters.
|
|
426
|
+
#
|
|
427
|
+
attr_accessor :params
|
|
428
|
+
#
|
|
429
|
+
# The associated meterpreter client instance
|
|
430
|
+
#
|
|
431
|
+
attr_accessor :client
|
|
432
|
+
protected
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
attr_writer :cid, :type, :cls, :flags # :nodoc:
|
|
436
|
+
|
|
437
|
+
#
|
|
438
|
+
# Cleans up any lingering resources
|
|
439
|
+
#
|
|
440
|
+
def cleanup
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
end; end; end
|
|
446
|
+
|