rex 1.0.2 → 2.0.2
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 +22 -0
- data/examples/smb_example.rb +35 -0
- data/lib/rex.rb +108 -3
- 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 +321 -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
- data/rex.gemspec +20 -0
- metadata +528 -98
- data/CHANGELOG.rdoc +0 -7
- data/DOCUMENTATION.en.rdoc +0 -215
- data/DOCUMENTATION.ja.rdoc +0 -205
- data/Manifest.txt +0 -37
- data/README.ja +0 -73
- data/README.rdoc +0 -53
- data/Rakefile +0 -28
- data/bin/rex +0 -18
- data/lib/rex/generator.rb +0 -523
- data/lib/rex/info.rb +0 -16
- data/lib/rex/rexcmd.rb +0 -136
- data/sample/a.cmd +0 -1
- data/sample/b.cmd +0 -1
- data/sample/c.cmd +0 -4
- data/sample/calc3.racc +0 -47
- data/sample/calc3.rex +0 -15
- data/sample/calc3.rex.rb +0 -94
- data/sample/calc3.tab.rb +0 -188
- data/sample/error1.rex +0 -15
- data/sample/error2.rex +0 -15
- data/sample/sample.html +0 -32
- data/sample/sample.rex +0 -15
- data/sample/sample.rex.rb +0 -100
- data/sample/sample.xhtml +0 -32
- data/sample/sample1.c +0 -9
- data/sample/sample1.rex +0 -43
- data/sample/sample2.bas +0 -4
- data/sample/sample2.rex +0 -33
- data/sample/simple.html +0 -7
- data/sample/simple.xhtml +0 -10
- data/sample/xhtmlparser.racc +0 -66
- data/sample/xhtmlparser.rex +0 -72
- data/test/assets/test.rex +0 -12
- data/test/rex-20060125.rb +0 -152
- data/test/rex-20060511.rb +0 -143
- data/test/test_generator.rb +0 -184
@@ -0,0 +1,96 @@
|
|
1
|
+
# -*- coding: binary -*-
|
2
|
+
# Copyright (c) 2010, patrickHVE@googlemail.com
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
# * Redistributions of source code must retain the above copyright
|
8
|
+
# notice, this list of conditions and the following disclaimer.
|
9
|
+
# * Redistributions in binary form must reproduce the above copyright
|
10
|
+
# notice, this list of conditions and the following disclaimer in the
|
11
|
+
# documentation and/or other materials provided with the distribution.
|
12
|
+
# * The names of the author may not be used to endorse or promote products
|
13
|
+
# derived from this software without specific prior written permission.
|
14
|
+
#
|
15
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
16
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
17
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
18
|
+
# DISCLAIMED. IN NO EVENT SHALL patrickHVE@googlemail.com BE LIABLE FOR ANY
|
19
|
+
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
20
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
21
|
+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
22
|
+
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
23
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
24
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
25
|
+
|
26
|
+
module Rex
|
27
|
+
module Post
|
28
|
+
module Meterpreter
|
29
|
+
module Extensions
|
30
|
+
module Stdapi
|
31
|
+
module Railgun
|
32
|
+
|
33
|
+
#
|
34
|
+
# Manages our library of windows constants
|
35
|
+
#
|
36
|
+
class WinConstManager
|
37
|
+
attr_reader :consts
|
38
|
+
|
39
|
+
def initialize(initial_consts = {})
|
40
|
+
@consts = {}
|
41
|
+
|
42
|
+
initial_consts.each_pair do |name, value|
|
43
|
+
add_const(name, value)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_const(name, value)
|
48
|
+
consts[name] = value
|
49
|
+
end
|
50
|
+
|
51
|
+
# parses a string constaining constants and returns an integer
|
52
|
+
# the string can be either "CONST" or "CONST1 | CONST2"
|
53
|
+
#
|
54
|
+
# this function will NOT throw an exception but return "nil" if it can't parse a string
|
55
|
+
def parse(s)
|
56
|
+
if s.class != String
|
57
|
+
return nil # it's not even a string'
|
58
|
+
end
|
59
|
+
return_value = 0
|
60
|
+
for one_const in s.split('|')
|
61
|
+
one_const = one_const.strip()
|
62
|
+
if not consts.has_key? one_const
|
63
|
+
return nil # at least one "Constant" is unknown to us
|
64
|
+
end
|
65
|
+
return_value |= consts[one_const]
|
66
|
+
end
|
67
|
+
return return_value
|
68
|
+
end
|
69
|
+
|
70
|
+
def is_parseable(s)
|
71
|
+
return !parse(s).nil?
|
72
|
+
end
|
73
|
+
|
74
|
+
#
|
75
|
+
# Returns an array of constant names that have a value matching "winconst"
|
76
|
+
# and (optionally) a name that matches "filter_regex"
|
77
|
+
#
|
78
|
+
def select_const_names(winconst, filter_regex=nil)
|
79
|
+
matches = []
|
80
|
+
|
81
|
+
consts.each_pair do |name, value|
|
82
|
+
matches << name if value == winconst
|
83
|
+
end
|
84
|
+
|
85
|
+
# Filter matches by name if a filter has been provided
|
86
|
+
unless filter_regex.nil?
|
87
|
+
matches.reject! do |name|
|
88
|
+
name !~ filter_regex
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
return matches
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end; end; end; end; end; end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
# -*- coding: binary -*-
|
2
|
+
|
3
|
+
require 'rex/post/meterpreter/object_aliases'
|
4
|
+
require 'rex/post/meterpreter/extension'
|
5
|
+
require 'rex/post/meterpreter/extensions/stdapi/constants'
|
6
|
+
require 'rex/post/meterpreter/extensions/stdapi/tlv'
|
7
|
+
require 'rex/post/meterpreter/extensions/stdapi/fs/dir'
|
8
|
+
require 'rex/post/meterpreter/extensions/stdapi/fs/file'
|
9
|
+
require 'rex/post/meterpreter/extensions/stdapi/fs/file_stat'
|
10
|
+
require 'rex/post/meterpreter/extensions/stdapi/net/resolve'
|
11
|
+
require 'rex/post/meterpreter/extensions/stdapi/net/config'
|
12
|
+
require 'rex/post/meterpreter/extensions/stdapi/net/socket'
|
13
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/config'
|
14
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/process'
|
15
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/registry'
|
16
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/event_log'
|
17
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/power'
|
18
|
+
require 'rex/post/meterpreter/extensions/stdapi/railgun/railgun'
|
19
|
+
require 'rex/post/meterpreter/extensions/stdapi/ui'
|
20
|
+
require 'rex/post/meterpreter/extensions/stdapi/webcam/webcam'
|
21
|
+
|
22
|
+
module Rex
|
23
|
+
module Post
|
24
|
+
module Meterpreter
|
25
|
+
module Extensions
|
26
|
+
module Stdapi
|
27
|
+
|
28
|
+
###
|
29
|
+
#
|
30
|
+
# Standard ruby interface to remote entities for meterpreter. It provides
|
31
|
+
# basic access to files, network, system, and other properties of the remote
|
32
|
+
# machine that are fairly universal.
|
33
|
+
#
|
34
|
+
###
|
35
|
+
class Stdapi < Extension
|
36
|
+
|
37
|
+
#
|
38
|
+
# Initializes an instance of the standard API extension.
|
39
|
+
#
|
40
|
+
def initialize(client)
|
41
|
+
super(client, 'stdapi')
|
42
|
+
|
43
|
+
# Alias the following things on the client object so that they
|
44
|
+
# can be directly referenced
|
45
|
+
client.register_extension_aliases(
|
46
|
+
[
|
47
|
+
{
|
48
|
+
'name' => 'fs',
|
49
|
+
'ext' => ObjectAliases.new(
|
50
|
+
{
|
51
|
+
'dir' => self.dir,
|
52
|
+
'file' => self.file,
|
53
|
+
'filestat' => self.filestat
|
54
|
+
})
|
55
|
+
},
|
56
|
+
{
|
57
|
+
'name' => 'sys',
|
58
|
+
'ext' => ObjectAliases.new(
|
59
|
+
{
|
60
|
+
'config' => Sys::Config.new(client),
|
61
|
+
'process' => self.process,
|
62
|
+
'registry' => self.registry,
|
63
|
+
'eventlog' => self.eventlog,
|
64
|
+
'power' => self.power
|
65
|
+
})
|
66
|
+
},
|
67
|
+
{
|
68
|
+
'name' => 'net',
|
69
|
+
'ext' => ObjectAliases.new(
|
70
|
+
{
|
71
|
+
'config' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Config.new(client),
|
72
|
+
'socket' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Socket.new(client),
|
73
|
+
'resolve' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Resolve.new(client)
|
74
|
+
})
|
75
|
+
},
|
76
|
+
{
|
77
|
+
'name' => 'railgun',
|
78
|
+
'ext' => Rex::Post::Meterpreter::Extensions::Stdapi::Railgun::Railgun.new(client)
|
79
|
+
},
|
80
|
+
{
|
81
|
+
'name' => 'webcam',
|
82
|
+
'ext' => Rex::Post::Meterpreter::Extensions::Stdapi::Webcam::Webcam.new(client)
|
83
|
+
},
|
84
|
+
{
|
85
|
+
'name' => 'ui',
|
86
|
+
'ext' => UI.new(client)
|
87
|
+
}
|
88
|
+
|
89
|
+
])
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Sets the client instance on a duplicated copy of the supplied class.
|
94
|
+
#
|
95
|
+
def brand(klass)
|
96
|
+
klass = klass.dup
|
97
|
+
klass.client = self.client
|
98
|
+
return klass
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# Returns a copy of the Dir class.
|
103
|
+
#
|
104
|
+
def dir
|
105
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::Dir)
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# Returns a copy of the File class.
|
110
|
+
#
|
111
|
+
def file
|
112
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::File)
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# Returns a copy of the FileStat class.
|
117
|
+
#
|
118
|
+
def filestat
|
119
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::FileStat)
|
120
|
+
end
|
121
|
+
|
122
|
+
#
|
123
|
+
# Returns a copy of the Process class.
|
124
|
+
#
|
125
|
+
def process
|
126
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Process)
|
127
|
+
end
|
128
|
+
|
129
|
+
#
|
130
|
+
# Returns a copy of the Registry class.
|
131
|
+
#
|
132
|
+
def registry
|
133
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Registry)
|
134
|
+
end
|
135
|
+
|
136
|
+
#
|
137
|
+
# Returns a copy of the EventLog class.
|
138
|
+
#
|
139
|
+
def eventlog
|
140
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::EventLog)
|
141
|
+
end
|
142
|
+
|
143
|
+
#
|
144
|
+
# Returns a copy of the Power class.
|
145
|
+
#
|
146
|
+
def power
|
147
|
+
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Power)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
end; end; end; end; end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# -*- coding: binary -*-
|
2
|
+
|
3
|
+
require 'rex/post/process'
|
4
|
+
require 'rex/post/meterpreter/packet'
|
5
|
+
require 'rex/post/meterpreter/client'
|
6
|
+
require 'rex/post/meterpreter/extensions/stdapi/constants'
|
7
|
+
require 'rex/post/meterpreter/extensions/stdapi/stdapi'
|
8
|
+
|
9
|
+
module Rex
|
10
|
+
module Post
|
11
|
+
module Meterpreter
|
12
|
+
module Extensions
|
13
|
+
module Stdapi
|
14
|
+
module Sys
|
15
|
+
|
16
|
+
###
|
17
|
+
#
|
18
|
+
# This class provides access to remote system configuration and information.
|
19
|
+
#
|
20
|
+
###
|
21
|
+
class Config
|
22
|
+
|
23
|
+
def initialize(client)
|
24
|
+
self.client = client
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# Returns the username that the remote side is running as.
|
29
|
+
#
|
30
|
+
def getuid
|
31
|
+
request = Packet.create_request('stdapi_sys_config_getuid')
|
32
|
+
response = client.send_request(request)
|
33
|
+
client.unicode_filter_encode( response.get_tlv_value(TLV_TYPE_USER_NAME) )
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# Returns a hash of requested environment variables, along with their values.
|
38
|
+
# If a requested value doesn't exist in the response, then the value wasn't found.
|
39
|
+
#
|
40
|
+
def getenvs(*var_names)
|
41
|
+
request = Packet.create_request('stdapi_sys_config_getenv')
|
42
|
+
|
43
|
+
var_names.each do |v|
|
44
|
+
request.add_tlv(TLV_TYPE_ENV_VARIABLE, v)
|
45
|
+
end
|
46
|
+
|
47
|
+
response = client.send_request(request)
|
48
|
+
result = {}
|
49
|
+
|
50
|
+
response.each(TLV_TYPE_ENV_GROUP) do |env|
|
51
|
+
var_name = env.get_tlv_value(TLV_TYPE_ENV_VARIABLE)
|
52
|
+
var_value = env.get_tlv_value(TLV_TYPE_ENV_VALUE)
|
53
|
+
result[var_name] = var_value
|
54
|
+
end
|
55
|
+
|
56
|
+
result
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Returns the value of a single requested environment variable name
|
61
|
+
#
|
62
|
+
def getenv(var_name)
|
63
|
+
_, value = getenvs(var_name).first
|
64
|
+
value
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# Returns a hash of information about the remote computer.
|
69
|
+
#
|
70
|
+
def sysinfo
|
71
|
+
request = Packet.create_request('stdapi_sys_config_sysinfo')
|
72
|
+
response = client.send_request(request)
|
73
|
+
|
74
|
+
{
|
75
|
+
'Computer' => response.get_tlv_value(TLV_TYPE_COMPUTER_NAME),
|
76
|
+
'OS' => response.get_tlv_value(TLV_TYPE_OS_NAME),
|
77
|
+
'Architecture' => response.get_tlv_value(TLV_TYPE_ARCHITECTURE),
|
78
|
+
'System Language' => response.get_tlv_value(TLV_TYPE_LANG_SYSTEM),
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# Calls RevertToSelf on the remote machine.
|
84
|
+
#
|
85
|
+
def revert_to_self
|
86
|
+
client.send_request(Packet.create_request('stdapi_sys_config_rev2self'))
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Steals the primary token from a target process
|
91
|
+
#
|
92
|
+
def steal_token(pid)
|
93
|
+
req = Packet.create_request('stdapi_sys_config_steal_token')
|
94
|
+
req.add_tlv(TLV_TYPE_PID, pid.to_i)
|
95
|
+
res = client.send_request(req)
|
96
|
+
client.unicode_filter_encode( res.get_tlv_value(TLV_TYPE_USER_NAME) )
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Drops any assumed token
|
101
|
+
#
|
102
|
+
def drop_token
|
103
|
+
req = Packet.create_request('stdapi_sys_config_drop_token')
|
104
|
+
res = client.send_request(req)
|
105
|
+
client.unicode_filter_encode( res.get_tlv_value(TLV_TYPE_USER_NAME) )
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# Enables all possible privileges
|
110
|
+
#
|
111
|
+
def getprivs
|
112
|
+
req = Packet.create_request('stdapi_sys_config_getprivs')
|
113
|
+
ret = []
|
114
|
+
res = client.send_request(req)
|
115
|
+
res.each(TLV_TYPE_PRIVILEGE) do |p|
|
116
|
+
ret << p.value
|
117
|
+
end
|
118
|
+
ret
|
119
|
+
end
|
120
|
+
|
121
|
+
protected
|
122
|
+
|
123
|
+
attr_accessor :client
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
end; end; end; end; end; end
|
128
|
+
|
@@ -0,0 +1,192 @@
|
|
1
|
+
# -*- coding: binary -*-
|
2
|
+
|
3
|
+
require 'rex/post/process'
|
4
|
+
require 'rex/post/meterpreter/packet'
|
5
|
+
require 'rex/post/meterpreter/client'
|
6
|
+
require 'rex/post/meterpreter/extensions/stdapi/constants'
|
7
|
+
require 'rex/post/meterpreter/extensions/stdapi/stdapi'
|
8
|
+
require 'rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record'
|
9
|
+
|
10
|
+
module Rex
|
11
|
+
module Post
|
12
|
+
module Meterpreter
|
13
|
+
module Extensions
|
14
|
+
module Stdapi
|
15
|
+
module Sys
|
16
|
+
|
17
|
+
###
|
18
|
+
#
|
19
|
+
# This class provides access to the Windows event log on the remote
|
20
|
+
# machine.
|
21
|
+
#
|
22
|
+
###
|
23
|
+
class EventLog
|
24
|
+
|
25
|
+
class << self
|
26
|
+
attr_accessor :client
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Opens the supplied event log.
|
31
|
+
#
|
32
|
+
#--
|
33
|
+
# NOTE: should support UNCServerName sometime
|
34
|
+
#++
|
35
|
+
#
|
36
|
+
def EventLog.open(name)
|
37
|
+
request = Packet.create_request('stdapi_sys_eventlog_open')
|
38
|
+
|
39
|
+
request.add_tlv(TLV_TYPE_EVENT_SOURCENAME, name);
|
40
|
+
|
41
|
+
response = client.send_request(request)
|
42
|
+
|
43
|
+
return self.new(response.get_tlv_value(TLV_TYPE_EVENT_HANDLE))
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
#
|
48
|
+
# Event Log Instance Stuffs!
|
49
|
+
#
|
50
|
+
##
|
51
|
+
|
52
|
+
attr_accessor :handle # :nodoc:
|
53
|
+
attr_accessor :client # :nodoc:
|
54
|
+
|
55
|
+
public
|
56
|
+
|
57
|
+
#
|
58
|
+
# Initializes an instance of the eventlog manipulator.
|
59
|
+
#
|
60
|
+
def initialize(hand)
|
61
|
+
self.client = self.class.client
|
62
|
+
self.handle = hand
|
63
|
+
ObjectSpace.define_finalizer( self, self.class.finalize(self.client, self.handle) )
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.finalize(client,handle)
|
67
|
+
proc { self.close(client,handle) }
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# Return the number of records in the event log.
|
72
|
+
#
|
73
|
+
def length
|
74
|
+
request = Packet.create_request('stdapi_sys_eventlog_numrecords')
|
75
|
+
|
76
|
+
request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
|
77
|
+
|
78
|
+
response = client.send_request(request)
|
79
|
+
|
80
|
+
return response.get_tlv_value(TLV_TYPE_EVENT_NUMRECORDS)
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# the low level read function (takes flags, not hash, etc).
|
85
|
+
#
|
86
|
+
def _read(flags, offset = 0)
|
87
|
+
request = Packet.create_request('stdapi_sys_eventlog_read')
|
88
|
+
|
89
|
+
request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle)
|
90
|
+
request.add_tlv(TLV_TYPE_EVENT_READFLAGS, flags)
|
91
|
+
request.add_tlv(TLV_TYPE_EVENT_RECORDOFFSET, offset)
|
92
|
+
|
93
|
+
response = client.send_request(request)
|
94
|
+
|
95
|
+
EventLogSubsystem::EventRecord.new(
|
96
|
+
response.get_tlv_value(TLV_TYPE_EVENT_RECORDNUMBER),
|
97
|
+
response.get_tlv_value(TLV_TYPE_EVENT_TIMEGENERATED),
|
98
|
+
response.get_tlv_value(TLV_TYPE_EVENT_TIMEWRITTEN),
|
99
|
+
response.get_tlv_value(TLV_TYPE_EVENT_ID),
|
100
|
+
response.get_tlv_value(TLV_TYPE_EVENT_TYPE),
|
101
|
+
response.get_tlv_value(TLV_TYPE_EVENT_CATEGORY),
|
102
|
+
response.get_tlv_values(TLV_TYPE_EVENT_STRING),
|
103
|
+
response.get_tlv_value(TLV_TYPE_EVENT_DATA)
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# Read the eventlog forwards, meaning from oldest to newest.
|
109
|
+
# Returns a EventRecord, and throws an exception after no more records.
|
110
|
+
#
|
111
|
+
def read_forwards
|
112
|
+
_read(EVENTLOG_SEQUENTIAL_READ | EVENTLOG_FORWARDS_READ)
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# Iterator for read_forwards.
|
117
|
+
#
|
118
|
+
def each_forwards
|
119
|
+
begin
|
120
|
+
loop do
|
121
|
+
yield(read_forwards)
|
122
|
+
end
|
123
|
+
rescue ::Exception
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
#
|
128
|
+
# Read the eventlog backwards, meaning from newest to oldest.
|
129
|
+
# Returns a EventRecord, and throws an exception after no more records.
|
130
|
+
#
|
131
|
+
def read_backwards
|
132
|
+
_read(EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ)
|
133
|
+
end
|
134
|
+
|
135
|
+
#
|
136
|
+
# Iterator for read_backwards.
|
137
|
+
#
|
138
|
+
def each_backwards
|
139
|
+
begin
|
140
|
+
loop do
|
141
|
+
yield(read_backwards)
|
142
|
+
end
|
143
|
+
rescue ::Exception
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Return the record number of the oldest event (not necessarily 1).
|
149
|
+
#
|
150
|
+
def oldest
|
151
|
+
request = Packet.create_request('stdapi_sys_eventlog_oldest')
|
152
|
+
|
153
|
+
request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
|
154
|
+
|
155
|
+
response = client.send_request(request)
|
156
|
+
|
157
|
+
return response.get_tlv_value(TLV_TYPE_EVENT_RECORDNUMBER)
|
158
|
+
end
|
159
|
+
|
160
|
+
#
|
161
|
+
# Clear the specified event log (and return nil).
|
162
|
+
#
|
163
|
+
#--
|
164
|
+
# I should eventually support BackupFile
|
165
|
+
#++
|
166
|
+
#
|
167
|
+
def clear
|
168
|
+
request = Packet.create_request('stdapi_sys_eventlog_clear')
|
169
|
+
|
170
|
+
request.add_tlv(TLV_TYPE_EVENT_HANDLE, self.handle);
|
171
|
+
|
172
|
+
response = client.send_request(request)
|
173
|
+
return self
|
174
|
+
end
|
175
|
+
|
176
|
+
#
|
177
|
+
# Close the event log
|
178
|
+
#
|
179
|
+
def self.close(client, handle)
|
180
|
+
request = Packet.create_request('stdapi_sys_eventlog_close')
|
181
|
+
request.add_tlv(TLV_TYPE_EVENT_HANDLE, handle);
|
182
|
+
response = client.send_request(request, nil)
|
183
|
+
return nil
|
184
|
+
end
|
185
|
+
|
186
|
+
# Instance method
|
187
|
+
def close
|
188
|
+
self.class.close(self.client, self.handle)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
end end end end end end
|