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,199 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
require 'rex/post/meterpreter'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Post
|
|
6
|
+
module Meterpreter
|
|
7
|
+
module Ui
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# Extended API window management user interface.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Console::CommandDispatcher::Extapi::Service
|
|
15
|
+
|
|
16
|
+
Klass = Console::CommandDispatcher::Extapi::Service
|
|
17
|
+
|
|
18
|
+
include Console::CommandDispatcher
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# List of supported commands.
|
|
22
|
+
#
|
|
23
|
+
def commands
|
|
24
|
+
{
|
|
25
|
+
"service_enum" => "Enumerate all registered Windows services",
|
|
26
|
+
"service_query" => "Query more detail about a specific Windows service",
|
|
27
|
+
"service_control" => "Control a single service (start/pause/resume/stop/restart)"
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# Name for this dispatcher
|
|
33
|
+
#
|
|
34
|
+
def name
|
|
35
|
+
"Extapi: Service Management"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Initialize the instance
|
|
40
|
+
#
|
|
41
|
+
def initialize(shell)
|
|
42
|
+
super
|
|
43
|
+
|
|
44
|
+
@status_map = {
|
|
45
|
+
1 => "Stopped",
|
|
46
|
+
2 => "Starting",
|
|
47
|
+
3 => "Stopping",
|
|
48
|
+
4 => "Running",
|
|
49
|
+
5 => "Continuing",
|
|
50
|
+
6 => "Pausing",
|
|
51
|
+
7 => "Paused"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@start_type_map = {
|
|
55
|
+
0 => "Boot",
|
|
56
|
+
1 => "System",
|
|
57
|
+
2 => "Automatic",
|
|
58
|
+
3 => "Manual",
|
|
59
|
+
4 => "Disabled"
|
|
60
|
+
}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
#
|
|
64
|
+
# Options for the service_enum command.
|
|
65
|
+
#
|
|
66
|
+
@@service_enum_opts = Rex::Parser::Arguments.new(
|
|
67
|
+
"-h" => [ false, "Help banner" ]
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# Query a single service for more detail.
|
|
72
|
+
#
|
|
73
|
+
def cmd_service_enum(*args)
|
|
74
|
+
@@service_enum_opts.parse(args) do |opt, idx, val|
|
|
75
|
+
case opt
|
|
76
|
+
when "-h"
|
|
77
|
+
print(
|
|
78
|
+
"\nUsage: service_enum [-h]\n\n" +
|
|
79
|
+
"Enumerate services installed on the target.\n\n" +
|
|
80
|
+
"Enumeration returns the Process ID, Status, and name of each installed\n" +
|
|
81
|
+
"service that was enumerated. The 'Int' value indicates if the service is\n" +
|
|
82
|
+
"able to interact with the desktop.\n\n")
|
|
83
|
+
return true
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
services = client.extapi.service.enumerate
|
|
88
|
+
|
|
89
|
+
table = Rex::Ui::Text::Table.new(
|
|
90
|
+
'Header' => 'Service List',
|
|
91
|
+
'Indent' => 0,
|
|
92
|
+
'SortIndex' => 3,
|
|
93
|
+
'Columns' => [
|
|
94
|
+
'PID', 'Status', 'Int', 'Name (Display Name)'
|
|
95
|
+
]
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
services.each do |s|
|
|
99
|
+
table << [
|
|
100
|
+
s[:pid],
|
|
101
|
+
@status_map[s[:status]],
|
|
102
|
+
s[:interactive] ? "Y" : "N",
|
|
103
|
+
"#{s[:name].downcase} (#{s[:display]})"
|
|
104
|
+
]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
print_line
|
|
108
|
+
print_line(table.to_s)
|
|
109
|
+
print_line
|
|
110
|
+
print_line("Total services: #{services.length}")
|
|
111
|
+
print_line
|
|
112
|
+
|
|
113
|
+
return true
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
#
|
|
117
|
+
# Options for the service_query command.
|
|
118
|
+
#
|
|
119
|
+
@@service_query_opts = Rex::Parser::Arguments.new(
|
|
120
|
+
"-h" => [ false, "Help banner" ]
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
#
|
|
124
|
+
# Query a single service for more detail.
|
|
125
|
+
#
|
|
126
|
+
def cmd_service_query(*args)
|
|
127
|
+
args.unshift("-h") if args.length != 1
|
|
128
|
+
|
|
129
|
+
@@service_query_opts.parse(args) do |opt, idx, val|
|
|
130
|
+
case opt
|
|
131
|
+
when "-h"
|
|
132
|
+
print(
|
|
133
|
+
"\nUsage: service_query [-h] <servicename>\n" +
|
|
134
|
+
" <servicename>: The name of the service to query.\n\n" +
|
|
135
|
+
"Gets details information about a particular Windows service, including\n" +
|
|
136
|
+
"binary path, DACL, load order group, start type and more.\n\n")
|
|
137
|
+
return true
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
service_name = args.shift
|
|
142
|
+
|
|
143
|
+
detail = client.extapi.service.query(service_name)
|
|
144
|
+
|
|
145
|
+
print_line
|
|
146
|
+
print_line("Name : #{service_name}")
|
|
147
|
+
print_line("Display : #{detail[:display]}")
|
|
148
|
+
print_line("Account : #{detail[:startname]}")
|
|
149
|
+
print_line("Status : #{@status_map[detail[:status]]}")
|
|
150
|
+
print_line("Start Type : #{@start_type_map[detail[:starttype]]}")
|
|
151
|
+
print_line("Path : #{detail[:path]}")
|
|
152
|
+
print_line("L.O. Group : #{detail[:logroup]}")
|
|
153
|
+
print_line("Interactive : #{detail[:interactive] ? "Yes" : "No"}")
|
|
154
|
+
print_line("DACL : #{detail[:dacl]}")
|
|
155
|
+
print_line
|
|
156
|
+
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
#
|
|
160
|
+
# Options for the service_control command.
|
|
161
|
+
#
|
|
162
|
+
@@service_control_opts = Rex::Parser::Arguments.new(
|
|
163
|
+
"-h" => [ false, "Help banner" ]
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
#
|
|
167
|
+
# Query a single service for more detail.
|
|
168
|
+
#
|
|
169
|
+
def cmd_service_control(*args)
|
|
170
|
+
args.unshift("-h") if args.length != 2
|
|
171
|
+
|
|
172
|
+
@@service_control_opts.parse(args) do |opt, idx, val|
|
|
173
|
+
case opt
|
|
174
|
+
when "-h"
|
|
175
|
+
print(
|
|
176
|
+
"\nUsage: service_control [-h] <servicename> <op>\n" +
|
|
177
|
+
" <servicename> : The name of the service to control.\n" +
|
|
178
|
+
" <op> : The operation to perform on the service.\n" +
|
|
179
|
+
" Valid ops: start pause resume stop restart.\n\n")
|
|
180
|
+
return true
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
service_name = args[0]
|
|
185
|
+
op = args[1]
|
|
186
|
+
|
|
187
|
+
client.extapi.service.control(service_name, op)
|
|
188
|
+
|
|
189
|
+
print_good("Operation #{op} succeeded.")
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
require 'rex/post/meterpreter'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Post
|
|
6
|
+
module Meterpreter
|
|
7
|
+
module Ui
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# Extended API window management user interface.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Console::CommandDispatcher::Extapi::Window
|
|
15
|
+
|
|
16
|
+
Klass = Console::CommandDispatcher::Extapi::Window
|
|
17
|
+
|
|
18
|
+
include Console::CommandDispatcher
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# List of supported commands.
|
|
22
|
+
#
|
|
23
|
+
def commands
|
|
24
|
+
{
|
|
25
|
+
"window_enum" => "Enumerate all current open windows"
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# Name for this dispatcher
|
|
31
|
+
#
|
|
32
|
+
def name
|
|
33
|
+
"Extapi: Window Management"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Options for the window_enum command.
|
|
38
|
+
#
|
|
39
|
+
@@window_enum_opts = Rex::Parser::Arguments.new(
|
|
40
|
+
"-h" => [ false, "Help banner" ],
|
|
41
|
+
"-p" => [ true, "Parent window handle, used to enumerate child windows" ],
|
|
42
|
+
"-u" => [ false, "Include unknown/untitled windows in the result set" ]
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
def window_enum_usage
|
|
46
|
+
print(
|
|
47
|
+
"\nUsage: window_enum [-h] [-p parent_window] [-u]\n\n" +
|
|
48
|
+
"Enumerate the windows on the target.\n\n" +
|
|
49
|
+
"Enumeration returns the Process ID and Window Handle for each window\n" +
|
|
50
|
+
"found. The Window Handle can be used for further calls to window_enum\n" +
|
|
51
|
+
"or the railgun API.\n" +
|
|
52
|
+
@@window_enum_opts.usage +
|
|
53
|
+
"Note: Not all windows can be enumerated. An attempt to enumerate\n" +
|
|
54
|
+
" the children of such a window will result in a failure with the\n"+
|
|
55
|
+
" message \"Operation failed: The parameter is incorrect.\"\n\n")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Enumerate top-level windows.
|
|
60
|
+
#
|
|
61
|
+
def cmd_window_enum(*args)
|
|
62
|
+
parent_window = nil
|
|
63
|
+
include_unknown = false
|
|
64
|
+
|
|
65
|
+
@@window_enum_opts.parse(args) { |opt, idx, val|
|
|
66
|
+
case opt
|
|
67
|
+
when "-u"
|
|
68
|
+
include_unknown = true
|
|
69
|
+
when "-p"
|
|
70
|
+
parent_window = val.to_i
|
|
71
|
+
if parent_window == 0
|
|
72
|
+
window_enum_usage
|
|
73
|
+
return true
|
|
74
|
+
end
|
|
75
|
+
when "-h"
|
|
76
|
+
window_enum_usage
|
|
77
|
+
return true
|
|
78
|
+
end
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
windows = client.extapi.window.enumerate(include_unknown, parent_window)
|
|
82
|
+
|
|
83
|
+
header = parent_window ? "Child windows of #{parent_window}" : "Top-level windows"
|
|
84
|
+
|
|
85
|
+
table = Rex::Ui::Text::Table.new(
|
|
86
|
+
'Header' => header,
|
|
87
|
+
'Indent' => 0,
|
|
88
|
+
'SortIndex' => 0,
|
|
89
|
+
'Columns' => [
|
|
90
|
+
'PID', 'Handle', 'Title'
|
|
91
|
+
]
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
windows.each { |w|
|
|
95
|
+
table << [w[:pid], w[:handle], w[:title]]
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
print_line
|
|
99
|
+
print_line(table.to_s)
|
|
100
|
+
|
|
101
|
+
if parent_window.nil?
|
|
102
|
+
print_line("Total top-level Windows: #{windows.length}")
|
|
103
|
+
else
|
|
104
|
+
print_line("Total child Windows: #{windows.length}")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
print_line
|
|
108
|
+
|
|
109
|
+
return true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
require 'rex/post/meterpreter'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Post
|
|
6
|
+
module Meterpreter
|
|
7
|
+
module Ui
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# Extended API WMI Querying interface.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Console::CommandDispatcher::Extapi::Wmi
|
|
15
|
+
|
|
16
|
+
Klass = Console::CommandDispatcher::Extapi::Wmi
|
|
17
|
+
|
|
18
|
+
include Console::CommandDispatcher
|
|
19
|
+
|
|
20
|
+
# Zero indicates "no limit"
|
|
21
|
+
DEFAULT_MAX_RESULTS = 0
|
|
22
|
+
DEFAULT_PAGE_SIZE = 0
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# List of supported commands.
|
|
26
|
+
#
|
|
27
|
+
def commands
|
|
28
|
+
{
|
|
29
|
+
"wmi_query" => "Perform a generic WMI query and return the results"
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# Name for this dispatcher
|
|
35
|
+
#
|
|
36
|
+
def name
|
|
37
|
+
"Extapi: WMI Querying"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Options for the wmi_query command.
|
|
42
|
+
#
|
|
43
|
+
@@wmi_query_opts = Rex::Parser::Arguments.new(
|
|
44
|
+
"-h" => [ false, "Help banner" ],
|
|
45
|
+
"-r" => [ true, "Specify a different root object (defaults to 'root\\CIMV2')" ]
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
def wmi_query_usage
|
|
49
|
+
print(
|
|
50
|
+
"\nUsage: wmi_query <query string> [-r root]\n\n" +
|
|
51
|
+
"Query the target and display the results.\n\n" +
|
|
52
|
+
@@wmi_query_opts.usage)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Enumerate WMI objects.
|
|
57
|
+
#
|
|
58
|
+
def cmd_wmi_query(*args)
|
|
59
|
+
args.unshift("-h") if args.length < 1
|
|
60
|
+
|
|
61
|
+
root = nil
|
|
62
|
+
|
|
63
|
+
@@wmi_query_opts.parse(args) { |opt, idx, val|
|
|
64
|
+
case opt
|
|
65
|
+
when "-r"
|
|
66
|
+
root = val
|
|
67
|
+
when "-h"
|
|
68
|
+
wmi_query_usage
|
|
69
|
+
return true
|
|
70
|
+
end
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
query = args.shift
|
|
74
|
+
|
|
75
|
+
objects = client.extapi.wmi.query(query, root)
|
|
76
|
+
|
|
77
|
+
if objects
|
|
78
|
+
table = Rex::Ui::Text::Table.new(
|
|
79
|
+
'Header' => query,
|
|
80
|
+
'Indent' => 0,
|
|
81
|
+
'SortIndex' => 0,
|
|
82
|
+
'Columns' => objects[:fields]
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
objects[:values].each do |c|
|
|
86
|
+
table << c
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
print_line
|
|
90
|
+
print_line(table.to_s)
|
|
91
|
+
|
|
92
|
+
print_line("Total objects: #{objects[:values].length}")
|
|
93
|
+
else
|
|
94
|
+
print_status("The WMI query yielded no results.")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
print_line
|
|
98
|
+
|
|
99
|
+
return true
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
require 'rex/post/meterpreter'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Post
|
|
6
|
+
module Meterpreter
|
|
7
|
+
module Ui
|
|
8
|
+
|
|
9
|
+
###
|
|
10
|
+
#
|
|
11
|
+
# Privilege escalation extension user interface.
|
|
12
|
+
#
|
|
13
|
+
###
|
|
14
|
+
class Console::CommandDispatcher::Incognito
|
|
15
|
+
|
|
16
|
+
Klass = Console::CommandDispatcher::Incognito
|
|
17
|
+
|
|
18
|
+
include Console::CommandDispatcher
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# Initializes an instance of the priv command interaction.
|
|
22
|
+
#
|
|
23
|
+
def initialize(shell)
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# List of supported commands.
|
|
29
|
+
#
|
|
30
|
+
def commands
|
|
31
|
+
{
|
|
32
|
+
"add_user" => "Attempt to add a user with all tokens",
|
|
33
|
+
"add_localgroup_user" => "Attempt to add a user to a local group with all tokens",
|
|
34
|
+
"add_group_user" => "Attempt to add a user to a global group with all tokens",
|
|
35
|
+
"list_tokens" => "List tokens available under current user context",
|
|
36
|
+
"impersonate_token" => "Impersonate specified token",
|
|
37
|
+
"snarf_hashes" => "Snarf challenge/response hashes for every token"
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@@add_user_opts = Rex::Parser::Arguments.new(
|
|
43
|
+
"-h" => [ true, "Add user to remote host" ])
|
|
44
|
+
|
|
45
|
+
@@add_localgroup_user_opts = Rex::Parser::Arguments.new(
|
|
46
|
+
"-h" => [ true, "Add user to local group on remote host" ])
|
|
47
|
+
|
|
48
|
+
@@add_group_user_opts = Rex::Parser::Arguments.new(
|
|
49
|
+
"-h" => [ true, "Add user to global group on remote host" ])
|
|
50
|
+
|
|
51
|
+
@@list_tokens_opts = Rex::Parser::Arguments.new(
|
|
52
|
+
"-u" => [ false, "List tokens by unique username" ],
|
|
53
|
+
"-g" => [ false, "List tokens by unique groupname" ])
|
|
54
|
+
|
|
55
|
+
def cmd_list_tokens(*args)
|
|
56
|
+
token_order = -1
|
|
57
|
+
|
|
58
|
+
@@list_tokens_opts.parse(args) { |opt, idx, val|
|
|
59
|
+
case opt
|
|
60
|
+
when "-u"
|
|
61
|
+
token_order = 0
|
|
62
|
+
when "-g"
|
|
63
|
+
token_order = 1
|
|
64
|
+
end
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (token_order == -1)
|
|
68
|
+
print_line("Usage: list_tokens <list_order_option>\n")
|
|
69
|
+
print_line("Lists all accessible tokens and their privilege level")
|
|
70
|
+
print_line(@@list_tokens_opts.usage)
|
|
71
|
+
return
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
system_privilege_check
|
|
75
|
+
|
|
76
|
+
tokens = client.incognito.incognito_list_tokens(token_order)
|
|
77
|
+
|
|
78
|
+
print_line()
|
|
79
|
+
print_line("Delegation Tokens Available")
|
|
80
|
+
print_line("========================================")
|
|
81
|
+
|
|
82
|
+
tokens['delegation'].each_line { |string|
|
|
83
|
+
print(string)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
print_line()
|
|
87
|
+
print_line("Impersonation Tokens Available")
|
|
88
|
+
print_line("========================================")
|
|
89
|
+
|
|
90
|
+
tokens['impersonation'].each_line { |string|
|
|
91
|
+
print(string)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
print_line()
|
|
95
|
+
|
|
96
|
+
return true
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def cmd_impersonate_token(*args)
|
|
100
|
+
if (args.length < 1)
|
|
101
|
+
print_line("Usage: impersonate_token <token>\n")
|
|
102
|
+
print_line("Instructs the meterpreter thread to impersonate the specified token. All other actions will then be made in the context of that token.\n")
|
|
103
|
+
print_line("Hint: Double backslash DOMAIN\\\\name (meterpreter quirk)")
|
|
104
|
+
print_line("Hint: Enclose with quotation marks if name contains a space\n")
|
|
105
|
+
return
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
system_privilege_check
|
|
109
|
+
username = args[0]
|
|
110
|
+
client.incognito.incognito_impersonate_token(username).each_line { |string|
|
|
111
|
+
print(string)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return true
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def cmd_add_user(*args)
|
|
118
|
+
# Default to localhost
|
|
119
|
+
host = "127.0.0.1"
|
|
120
|
+
|
|
121
|
+
@@add_user_opts.parse(args) { |opt, idx, val|
|
|
122
|
+
case opt
|
|
123
|
+
when "-h"
|
|
124
|
+
host = val
|
|
125
|
+
end
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (args.length < 2)
|
|
129
|
+
print_line("Usage: add_user <username> <password> [options]\n")
|
|
130
|
+
print_line("Attempts to add a user to a host with all accessible tokens. Terminates when successful, an error that is not access denied occurs (e.g. password does not meet complexity requirements) or when all tokens are exhausted")
|
|
131
|
+
print_line(@@add_user_opts.usage)
|
|
132
|
+
return
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
system_privilege_check
|
|
136
|
+
|
|
137
|
+
username = args[0]
|
|
138
|
+
password = args[1]
|
|
139
|
+
|
|
140
|
+
client.incognito.incognito_add_user(host, username, password).each_line { |string|
|
|
141
|
+
print(string)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return true
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def cmd_add_localgroup_user(*args)
|
|
148
|
+
# Default to localhost
|
|
149
|
+
host = "127.0.0.1"
|
|
150
|
+
|
|
151
|
+
@@add_localgroup_user_opts.parse(args) { |opt, idx, val|
|
|
152
|
+
case opt
|
|
153
|
+
when "-h"
|
|
154
|
+
host = val
|
|
155
|
+
end
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (args.length < 2)
|
|
159
|
+
print_line("Usage: add_localgroup_user <groupname> <username> [options]\n")
|
|
160
|
+
print_line("Attempts to add a user to a local group on a host with all accessible tokens. Terminates when successful, an error that is not access denied occurs (e.g. user not found) or when all tokens are exhausted")
|
|
161
|
+
print_line(@@add_localgroup_user_opts.usage)
|
|
162
|
+
return
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
system_privilege_check
|
|
166
|
+
|
|
167
|
+
groupname = args[0]
|
|
168
|
+
username = args[1]
|
|
169
|
+
|
|
170
|
+
client.incognito.incognito_add_localgroup_user(host, groupname, username).each_line { |string|
|
|
171
|
+
print(string)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return true
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def cmd_add_group_user(*args)
|
|
178
|
+
# Default to localhost
|
|
179
|
+
host = "127.0.0.1"
|
|
180
|
+
|
|
181
|
+
@@add_group_user_opts.parse(args) { |opt, idx, val|
|
|
182
|
+
case opt
|
|
183
|
+
when "-h"
|
|
184
|
+
host = val
|
|
185
|
+
end
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (args.length < 2)
|
|
189
|
+
print_line("Usage: add_group_user <groupname> <username> [options]\n")
|
|
190
|
+
print_line("Attempts to add a user to a global group on a host with all accessible tokens. Terminates when successful, an error that is not access denied occurs (e.g. user not found) or when all tokens are exhausted")
|
|
191
|
+
print_line(@@add_group_user_opts.usage)
|
|
192
|
+
return
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
system_privilege_check
|
|
196
|
+
|
|
197
|
+
groupname = args[0]
|
|
198
|
+
username = args[1]
|
|
199
|
+
|
|
200
|
+
client.incognito.incognito_add_group_user(host, groupname, username).each_line { |string|
|
|
201
|
+
print(string)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return true
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def cmd_snarf_hashes(*args)
|
|
208
|
+
if (args.length < 1)
|
|
209
|
+
print_line("Usage: snarf_hashes <sniffer_host>\n")
|
|
210
|
+
print_line("Captures LANMAN/NTLM challenge response hashes by making SMB requests to the supplied sniffing host with every accessible token.\n")
|
|
211
|
+
return
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
system_privilege_check
|
|
215
|
+
|
|
216
|
+
print_line("[*] Snarfing token hashes...")
|
|
217
|
+
client.incognito.incognito_snarf_hashes(args[0])
|
|
218
|
+
print_line("[*] Done. Check sniffer logs")
|
|
219
|
+
|
|
220
|
+
return true
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def system_privilege_check
|
|
224
|
+
if (client.sys.config.getuid != "NT AUTHORITY\\SYSTEM")
|
|
225
|
+
print_line("[-] Warning: Not currently running as SYSTEM, not all tokens will be available")
|
|
226
|
+
print_line(" Call rev2self if primary process token is SYSTEM")
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
#
|
|
231
|
+
# Name for this dispatcher
|
|
232
|
+
#
|
|
233
|
+
def name
|
|
234
|
+
"Incognito"
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|