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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/encoder/xor/dword_additive'
|
|
4
|
+
|
|
5
|
+
##
|
|
6
|
+
#
|
|
7
|
+
# Jmp/Call Dword Additive Feedback Encoder
|
|
8
|
+
# Author: skape
|
|
9
|
+
# Arch: x86
|
|
10
|
+
#
|
|
11
|
+
##
|
|
12
|
+
module Rex
|
|
13
|
+
module Encoders
|
|
14
|
+
|
|
15
|
+
class XorDwordAdditive < Rex::Encoder::Xor::DwordAdditive
|
|
16
|
+
module Backend
|
|
17
|
+
|
|
18
|
+
def _unencoded_transform(data)
|
|
19
|
+
# check for any dword aligned zeros that would falsely terminate the decoder
|
|
20
|
+
idx = 0
|
|
21
|
+
while true
|
|
22
|
+
idx = data.index("\x00\x00\x00\x00", idx)
|
|
23
|
+
break if !idx
|
|
24
|
+
if idx & 3 == 0
|
|
25
|
+
raise RuntimeError, "Unencoded data cannot have a dword aligned 0 dword!", caller()
|
|
26
|
+
end
|
|
27
|
+
idx += 1
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# pad to a dword boundary and append null dword for termination
|
|
31
|
+
data = data + ("\x00" * ((4 - data.length & 3) & 3)) + "\x00\x00\x00\x00"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def _prepend
|
|
35
|
+
"\xfc" + # cld
|
|
36
|
+
"\xbb" + key + # mov ebx, key
|
|
37
|
+
"\xeb\x0c" + # jmp short 0x14
|
|
38
|
+
"\x5e" + # pop esi
|
|
39
|
+
"\x56" + # push esi
|
|
40
|
+
"\x31\x1e" + # xor [esi], ebx
|
|
41
|
+
"\xad" + # lodsd
|
|
42
|
+
"\x01\xc3" + # add ebx, eax
|
|
43
|
+
"\x85\xc0" + # test eax, eax
|
|
44
|
+
"\x75\xf7" + # jnz 0xa
|
|
45
|
+
"\xc3" + # ret
|
|
46
|
+
"\xe8\xef\xff\xff\xff" # call 0x8
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
include Backend
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# make sure the namespace is created
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module Encoding
|
|
9
|
+
module Xor
|
|
10
|
+
end end end
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# include the Xor encodings
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
require 'rex/encoding/xor/generic'
|
|
17
|
+
require 'rex/encoding/xor/byte'
|
|
18
|
+
require 'rex/encoding/xor/word'
|
|
19
|
+
require 'rex/encoding/xor/dword'
|
|
20
|
+
require 'rex/encoding/xor/qword'
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/encoding/xor/generic'
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Routine for xor encoding a buffer by a 2-byte (intel word) key. The perl
|
|
7
|
+
# version used to pad this buffer out to a 2-byte boundary, but I can't think
|
|
8
|
+
# of a good reason to do that anymore, so this doesn't.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
module Rex
|
|
12
|
+
module Encoding
|
|
13
|
+
module Xor
|
|
14
|
+
|
|
15
|
+
class Dword < Generic
|
|
16
|
+
|
|
17
|
+
def Dword.keysize
|
|
18
|
+
4
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end end end end # Dword/Xor/Encoding/Rex
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/encoding/xor/exceptions'
|
|
4
|
+
require 'rex/encoding/xor/generic'
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# Routine for xor encoding a buffer by a 2-byte (intel word) key. The perl
|
|
8
|
+
# version used to pad this buffer out to a 2-byte boundary, but I can't think
|
|
9
|
+
# of a good reason to do that anymore, so this doesn't.
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
module Rex
|
|
13
|
+
module Encoding
|
|
14
|
+
module Xor
|
|
15
|
+
|
|
16
|
+
class DwordAdditive < Generic
|
|
17
|
+
|
|
18
|
+
def DwordAdditive.keysize
|
|
19
|
+
4
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def DwordAdditive._packspec
|
|
23
|
+
'V'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def DwordAdditive.pack_key(key)
|
|
27
|
+
return [ key ].pack(_packspec)
|
|
28
|
+
end
|
|
29
|
+
def DwordAdditive.unpack_key(key)
|
|
30
|
+
return key.unpack(_packspec)[0]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# hook in the key mutation routine of encode for the additive feedback
|
|
34
|
+
def DwordAdditive._encode_mutate_key(buf, key, pos, len)
|
|
35
|
+
if (pos + 1) % len == 0
|
|
36
|
+
# add the last len bytes (in this case 4) with the key,
|
|
37
|
+
# dropping off any overflow
|
|
38
|
+
key = pack_key(
|
|
39
|
+
unpack_key(key) + unpack_key(buf[pos - (len - 1), len]) &
|
|
40
|
+
(1 << (len << 3)) - 1
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
return key
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# I realize this algorithm is broken. We invalidate some keys
|
|
49
|
+
# in _find_bad_keys that could actually be perfectly fine. However,
|
|
50
|
+
# it seems to work ok for now, and this is all just a lame adhoc method.
|
|
51
|
+
# Maybe someday we can revisit this and make it a bit less ghetto...
|
|
52
|
+
#
|
|
53
|
+
|
|
54
|
+
def DwordAdditive._find_good_key(data, badkeys, badchars)
|
|
55
|
+
|
|
56
|
+
ksize = keysize
|
|
57
|
+
kstart = ""
|
|
58
|
+
ksize.times { kstart << rand(256) } # random key starting place
|
|
59
|
+
|
|
60
|
+
key = kstart.dup
|
|
61
|
+
|
|
62
|
+
#
|
|
63
|
+
# now for the ghettoness of an algorithm:
|
|
64
|
+
# try the random key we picked
|
|
65
|
+
# if the key failed, figure out which key byte corresponds
|
|
66
|
+
# increment that key byte
|
|
67
|
+
# if we wrapped a byte all the way around, fail :(
|
|
68
|
+
#
|
|
69
|
+
|
|
70
|
+
loop do
|
|
71
|
+
# ok, try to encode it, any bad chars present?
|
|
72
|
+
pos = _check(data, key, badchars)
|
|
73
|
+
|
|
74
|
+
# yay, no problems, we found a key!
|
|
75
|
+
break if !pos
|
|
76
|
+
|
|
77
|
+
strip = pos % ksize
|
|
78
|
+
|
|
79
|
+
# increment the offending key byte
|
|
80
|
+
key[strip] = key[strip] + 1 & 0xff
|
|
81
|
+
|
|
82
|
+
# We wrapped around!
|
|
83
|
+
if key[strip] == kstart[strip]
|
|
84
|
+
raise KeySearchError, "Key space exhausted on strip #{strip}!", caller
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
return key
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end end end end # DwordAdditive/Xor/Encoding/Rex
|
|
92
|
+
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/encoding/xor/exceptions'
|
|
4
|
+
require 'rex/text'
|
|
5
|
+
|
|
6
|
+
module Rex
|
|
7
|
+
module Encoding
|
|
8
|
+
module Xor
|
|
9
|
+
|
|
10
|
+
class Generic
|
|
11
|
+
|
|
12
|
+
def Generic.keysize
|
|
13
|
+
# special case:
|
|
14
|
+
# 0 means we encode based on the length of the key
|
|
15
|
+
# we don't enforce any perticular key length
|
|
16
|
+
return 0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
# Now for some internal check methods
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
# hook stylies!
|
|
24
|
+
# return index of offending byte or nil
|
|
25
|
+
def Generic._check(data, key, badchars)
|
|
26
|
+
return _check_key(key, badchars) || _check_encode(data, key, badchars)
|
|
27
|
+
end
|
|
28
|
+
def Generic._check_key(key, badchars)
|
|
29
|
+
return Rex::Text.badchar_index(key, badchars)
|
|
30
|
+
end
|
|
31
|
+
def Generic._check_encode(data, key, badchars)
|
|
32
|
+
return Rex::Text.badchar_index(encode(data, key), badchars)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def Generic.find_key(data, badchars)
|
|
36
|
+
return _find_good_key(data, _find_bad_keys(data, badchars), badchars)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# !!! xxx MAKE THESE PRIVATE
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Find a list of bytes that can't be valid xor keys, from the data and badchars.
|
|
43
|
+
# This returns a Array of hashes, length keysize
|
|
44
|
+
#
|
|
45
|
+
def Generic._find_bad_keys(data, badchars)
|
|
46
|
+
|
|
47
|
+
ksize = keysize
|
|
48
|
+
|
|
49
|
+
# array of hashes for the bad characters based
|
|
50
|
+
# on their position in the data
|
|
51
|
+
badkeys = [ ]
|
|
52
|
+
ksize.times { badkeys << { } }
|
|
53
|
+
|
|
54
|
+
badchars.each_byte { |badchar|
|
|
55
|
+
pos = 0
|
|
56
|
+
data.each_byte { |char|
|
|
57
|
+
badkeys[pos % ksize][char ^ badchar] = true
|
|
58
|
+
pos += 1
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return badkeys
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# (Hopefully) find a good key, from badkeys and badchars
|
|
67
|
+
#
|
|
68
|
+
def Generic._find_good_key(data, badkeys, badchars)
|
|
69
|
+
|
|
70
|
+
ksize = keysize
|
|
71
|
+
strip = 0
|
|
72
|
+
key = ""
|
|
73
|
+
|
|
74
|
+
while strip < keysize
|
|
75
|
+
|
|
76
|
+
kbyte = rand(256)
|
|
77
|
+
|
|
78
|
+
catch(:found_kbyte) do
|
|
79
|
+
256.times {
|
|
80
|
+
|
|
81
|
+
if !badkeys[strip][kbyte] && !badchars[kbyte.chr]
|
|
82
|
+
throw :found_kbyte
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
kbyte = (kbyte + 1) & 0xff
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
raise KeySearchError, "Exhausted byte space for strip #{strip}!", caller
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
key << kbyte
|
|
92
|
+
strip += 1
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# ok, we should have a good key now, lets double check...
|
|
96
|
+
if _check(data, key, badchars)
|
|
97
|
+
raise KeySearchError, "Key found, but bad character check failed!", caller
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
return key
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def Generic.encode(buf, key)
|
|
104
|
+
|
|
105
|
+
if !key.kind_of?(String)
|
|
106
|
+
raise ::ArgumentError, "Key must be a string!", caller
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
len = key.length
|
|
110
|
+
|
|
111
|
+
if len == 0
|
|
112
|
+
raise ::ArgumentError, "Zero key length!", caller
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
if keysize != 0 && keysize != len
|
|
116
|
+
raise ::ArgumentError, "Key length #{len}, expected #{keysize}", caller
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
encoded = ""
|
|
120
|
+
pos = 0
|
|
121
|
+
|
|
122
|
+
while pos < buf.length
|
|
123
|
+
encoded += (buf[pos,1].unpack("C*")[0] ^ key[pos % len, 1].unpack("C*")[0]).chr
|
|
124
|
+
key = _encode_mutate_key(buf, key, pos, len)
|
|
125
|
+
pos += 1
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
return [ encoded, key ]
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# kind of ghetto, but very convenient for mutating keys
|
|
133
|
+
# by default, do no key mutations
|
|
134
|
+
def Generic._encode_mutate_key(buf, key, pos, len)
|
|
135
|
+
return key
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# maybe a bit a smaller of method name?
|
|
139
|
+
def Generic.find_key_and_encode(data, badchars)
|
|
140
|
+
key = find_key(data, badchars)
|
|
141
|
+
enc, fkey = encode(data, key)
|
|
142
|
+
return [ enc, key, fkey ]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
end end end end # Generic/Xor/Encoding/Rex
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/encoding/xor/generic'
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Routine for xor encoding a buffer by a 2-byte (intel word) key. The perl
|
|
7
|
+
# version used to pad this buffer out to a 2-byte boundary, but I can't think
|
|
8
|
+
# of a good reason to do that anymore, so this doesn't.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
module Rex
|
|
12
|
+
module Encoding
|
|
13
|
+
module Xor
|
|
14
|
+
|
|
15
|
+
class Word < Generic
|
|
16
|
+
|
|
17
|
+
def Word.keysize
|
|
18
|
+
2
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end end end end # Word/Xor/Encoding/Rex
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# Base mixin for all exceptions that can be thrown from inside Rex.
|
|
8
|
+
#
|
|
9
|
+
###
|
|
10
|
+
module Exception
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
###
|
|
14
|
+
#
|
|
15
|
+
# This exception is raised when a timeout occurs.
|
|
16
|
+
#
|
|
17
|
+
###
|
|
18
|
+
class TimeoutError < Interrupt
|
|
19
|
+
include Exception
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
"Operation timed out."
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
###
|
|
27
|
+
#
|
|
28
|
+
# This exception is raised when a method is called or a feature is used that
|
|
29
|
+
# is not implemented.
|
|
30
|
+
#
|
|
31
|
+
###
|
|
32
|
+
class NotImplementedError < ::NotImplementedError
|
|
33
|
+
include Exception
|
|
34
|
+
|
|
35
|
+
def to_s
|
|
36
|
+
"The requested method is not implemented."
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
###
|
|
41
|
+
#
|
|
42
|
+
# This exception is raised when a generalized runtime error occurs.
|
|
43
|
+
#
|
|
44
|
+
###
|
|
45
|
+
class RuntimeError < ::RuntimeError
|
|
46
|
+
include Exception
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
###
|
|
50
|
+
#
|
|
51
|
+
# This exception is raised when an invalid argument is supplied to a method.
|
|
52
|
+
#
|
|
53
|
+
###
|
|
54
|
+
class ArgumentError < ::ArgumentError
|
|
55
|
+
include Exception
|
|
56
|
+
|
|
57
|
+
def initialize(message = nil)
|
|
58
|
+
@message = message
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def to_s
|
|
62
|
+
str = 'An invalid argument was specified.'
|
|
63
|
+
if @message
|
|
64
|
+
str << " #{@message}"
|
|
65
|
+
end
|
|
66
|
+
str
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
###
|
|
71
|
+
#
|
|
72
|
+
# This exception is raised when an argument that was supplied to a method
|
|
73
|
+
# could not be parsed correctly.
|
|
74
|
+
#
|
|
75
|
+
###
|
|
76
|
+
class ArgumentParseError < ::ArgumentError
|
|
77
|
+
include Exception
|
|
78
|
+
|
|
79
|
+
def to_s
|
|
80
|
+
"The argument could not be parsed correctly."
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
###
|
|
85
|
+
#
|
|
86
|
+
# This exception is raised when an argument is ambiguous.
|
|
87
|
+
#
|
|
88
|
+
###
|
|
89
|
+
class AmbiguousArgumentError < ::RuntimeError
|
|
90
|
+
include Exception
|
|
91
|
+
|
|
92
|
+
def initialize(name = nil)
|
|
93
|
+
@name = name
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def to_s
|
|
97
|
+
"The name #{@name} is ambiguous."
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
###
|
|
102
|
+
#
|
|
103
|
+
# This error is thrown when a stream is detected as being closed.
|
|
104
|
+
#
|
|
105
|
+
###
|
|
106
|
+
class StreamClosedError < ::IOError
|
|
107
|
+
include Exception
|
|
108
|
+
|
|
109
|
+
def initialize(stream)
|
|
110
|
+
@stream = stream
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def stream
|
|
114
|
+
@stream
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def to_s
|
|
118
|
+
"Stream #{@stream} is closed."
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
##
|
|
123
|
+
#
|
|
124
|
+
# Socket exceptions
|
|
125
|
+
#
|
|
126
|
+
##
|
|
127
|
+
|
|
128
|
+
###
|
|
129
|
+
#
|
|
130
|
+
# This exception is raised when a general socket error occurs.
|
|
131
|
+
#
|
|
132
|
+
###
|
|
133
|
+
module SocketError
|
|
134
|
+
include Exception
|
|
135
|
+
|
|
136
|
+
def to_s
|
|
137
|
+
"A socket error occurred."
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
###
|
|
142
|
+
#
|
|
143
|
+
# This exception is raised when there is some kind of error related to
|
|
144
|
+
# communication with a host.
|
|
145
|
+
#
|
|
146
|
+
###
|
|
147
|
+
module HostCommunicationError
|
|
148
|
+
def initialize(addr = nil, port = nil)
|
|
149
|
+
self.host = addr
|
|
150
|
+
self.port = port
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# This method returns a printable address and optional port associated
|
|
155
|
+
# with the host that triggered the exception.
|
|
156
|
+
#
|
|
157
|
+
def addr_to_s
|
|
158
|
+
if host and port
|
|
159
|
+
"(#{host}:#{port})"
|
|
160
|
+
elsif host
|
|
161
|
+
"(#{host})"
|
|
162
|
+
else
|
|
163
|
+
""
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
attr_accessor :host, :port
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
###
|
|
172
|
+
#
|
|
173
|
+
# This is a generic exception for errors that cause a connection to fail.
|
|
174
|
+
#
|
|
175
|
+
###
|
|
176
|
+
class ConnectionError < ::IOError
|
|
177
|
+
include SocketError
|
|
178
|
+
include HostCommunicationError
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
###
|
|
182
|
+
#
|
|
183
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
184
|
+
# side refused the connection.
|
|
185
|
+
#
|
|
186
|
+
###
|
|
187
|
+
class ConnectionRefused < ConnectionError
|
|
188
|
+
def to_s
|
|
189
|
+
"The connection was refused by the remote host #{addr_to_s}."
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
###
|
|
194
|
+
#
|
|
195
|
+
# This exception is raised when a connection attempt fails because the remote
|
|
196
|
+
# side is unreachable.
|
|
197
|
+
#
|
|
198
|
+
###
|
|
199
|
+
class HostUnreachable < ConnectionError
|
|
200
|
+
def to_s
|
|
201
|
+
"The host #{addr_to_s} was unreachable."
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
###
|
|
206
|
+
#
|
|
207
|
+
# This exception is raised when a connection attempt times out.
|
|
208
|
+
#
|
|
209
|
+
###
|
|
210
|
+
class ConnectionTimeout < ConnectionError
|
|
211
|
+
def to_s
|
|
212
|
+
"The connection timed out #{addr_to_s}."
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
###
|
|
218
|
+
#
|
|
219
|
+
# This exception is raised when an attempt to use an address or port that is
|
|
220
|
+
# already in use occurs, such as binding to a host on a given port that is
|
|
221
|
+
# already in use. Note that Windows raises this in some cases when attempting
|
|
222
|
+
# to connect to addresses that it can't handle, e.g. "0.0.0.0". Thus, this is
|
|
223
|
+
# a ConnectionError.
|
|
224
|
+
#
|
|
225
|
+
###
|
|
226
|
+
class AddressInUse < ConnectionError
|
|
227
|
+
include SocketError
|
|
228
|
+
include HostCommunicationError
|
|
229
|
+
|
|
230
|
+
def to_s
|
|
231
|
+
"The address is already in use #{addr_to_s}."
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
###
|
|
236
|
+
#
|
|
237
|
+
# This exception is raised when an unsupported internet protocol is specified.
|
|
238
|
+
#
|
|
239
|
+
###
|
|
240
|
+
class UnsupportedProtocol < ::ArgumentError
|
|
241
|
+
include SocketError
|
|
242
|
+
|
|
243
|
+
def initialize(proto = nil)
|
|
244
|
+
self.proto = proto
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def to_s
|
|
248
|
+
"The protocol #{proto} is not supported."
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
attr_accessor :proto
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
###
|
|
256
|
+
#
|
|
257
|
+
# This exception is raised when a proxy fails to pass a connection
|
|
258
|
+
#
|
|
259
|
+
###
|
|
260
|
+
class ConnectionProxyError < ConnectionError
|
|
261
|
+
def initialize(host,port,ptype,reason)
|
|
262
|
+
super(host,port)
|
|
263
|
+
self.ptype = ptype
|
|
264
|
+
self.reason = reason
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def to_s
|
|
268
|
+
self.ptype + ": " + self.reason
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
attr_accessor :ptype, :reason
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
end
|
|
275
|
+
|