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,101 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
module Rex
|
|
3
|
+
module Poly
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
#
|
|
7
|
+
# This class represents a register that is used in the context of one or more
|
|
8
|
+
# logical blocks. The register number is assigned on demand or is statically
|
|
9
|
+
# specified if passed in to the constructor.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class LogicalRegister
|
|
13
|
+
|
|
14
|
+
require 'rex/poly/register/x86'
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# This class method is meant to return an array of register numbers that
|
|
18
|
+
# can be used to pool from. Architecture specific classes must implement
|
|
19
|
+
# this method on their own.
|
|
20
|
+
#
|
|
21
|
+
def self.regnum_set
|
|
22
|
+
nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Initializes the register's name and number, if assigned. If a register
|
|
27
|
+
# number is specified, the instance will be assumed to have a statically
|
|
28
|
+
# assigned register number. The name is meant to be used as a symbolic
|
|
29
|
+
# variable name, such as 'counter' or 'key'.
|
|
30
|
+
#
|
|
31
|
+
def initialize(name, regnum = nil)
|
|
32
|
+
@name = name
|
|
33
|
+
@regnum = regnum
|
|
34
|
+
@static = (regnum) ? true : false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Returns true if the register number should be assumed static.
|
|
39
|
+
#
|
|
40
|
+
def static?
|
|
41
|
+
@static
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# Sets the register number to the value specified. If the register number
|
|
46
|
+
# is declared static, a RuntimeError exception is raised.
|
|
47
|
+
#
|
|
48
|
+
def regnum=(val)
|
|
49
|
+
raise RuntimeError, "Attempted to assign regnum to static register" if (static?)
|
|
50
|
+
|
|
51
|
+
@regnum = val
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Returns the register number that has currently been assigned. If no
|
|
56
|
+
# register number is assigned, an InvalidRegisterError exception is raised.
|
|
57
|
+
# This exception can be used to assign the LogicalRegister instance a
|
|
58
|
+
# register number on demand.
|
|
59
|
+
#
|
|
60
|
+
def regnum
|
|
61
|
+
raise InvalidRegisterError.new(self), "Register has not been assigned" if (@regnum == nil)
|
|
62
|
+
|
|
63
|
+
@regnum
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Returns the variable (friendly) name for the register that was passed to
|
|
68
|
+
# the constructor.
|
|
69
|
+
#
|
|
70
|
+
attr_reader :name
|
|
71
|
+
|
|
72
|
+
protected
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
###
|
|
77
|
+
#
|
|
78
|
+
# An exception that is raised when the regnum method is accessed on a
|
|
79
|
+
# LogicalRegister that does not currently have a regnum assigned to it.
|
|
80
|
+
#
|
|
81
|
+
###
|
|
82
|
+
class InvalidRegisterError < RuntimeError
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# Initializes the exception with the instance that lead to the generation
|
|
86
|
+
# of the exception such that it can be assigned a register number as
|
|
87
|
+
# needed.
|
|
88
|
+
#
|
|
89
|
+
def initialize(reg)
|
|
90
|
+
@reg = reg
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# The LogicalRegister instance that generated the exception.
|
|
95
|
+
#
|
|
96
|
+
attr_reader :reg
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
require 'rex/arch/x86'
|
|
3
|
+
|
|
4
|
+
module Rex
|
|
5
|
+
module Poly
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class encapsulates logical registers for the X86 architecture.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class LogicalRegister::X86 < LogicalRegister
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# The default set of register numbers that can be used on x86.
|
|
16
|
+
#
|
|
17
|
+
def self.regnum_set
|
|
18
|
+
[
|
|
19
|
+
Rex::Arch::X86::EAX,
|
|
20
|
+
Rex::Arch::X86::EBX,
|
|
21
|
+
Rex::Arch::X86::ECX,
|
|
22
|
+
Rex::Arch::X86::EDX,
|
|
23
|
+
Rex::Arch::X86::ESI,
|
|
24
|
+
Rex::Arch::X86::EDI,
|
|
25
|
+
Rex::Arch::X86::EBP,
|
|
26
|
+
Rex::Arch::X86::ESP
|
|
27
|
+
]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Calls the base class constructor after translating the register name to
|
|
32
|
+
# number.
|
|
33
|
+
#
|
|
34
|
+
def initialize(name, register = nil)
|
|
35
|
+
super(name, register ? Rex::Arch::X86.reg_number(register) : nil)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/rex/post.rb
ADDED
data/lib/rex/post/dir.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Post
|
|
5
|
+
|
|
6
|
+
###
|
|
7
|
+
#
|
|
8
|
+
# This class wraps the behavior of the Ruby Dir class against a remote entity.
|
|
9
|
+
# Refer to the Ruby documentation for expected behavior.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Dir
|
|
13
|
+
|
|
14
|
+
def Dir.entries(name)
|
|
15
|
+
raise NotImplementedError
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def Dir.foreach(name, &block)
|
|
19
|
+
entries(name).each(&block)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def Dir.chdir(path)
|
|
23
|
+
raise NotImplementedError
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def Dir.mkdir(path)
|
|
27
|
+
raise NotImplementedError
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def Dir.pwd
|
|
31
|
+
raise NotImplementedError
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def Dir.getwd
|
|
35
|
+
raise NotImplementedError
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def Dir.delete(path)
|
|
39
|
+
raise NotImplementedError
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def Dir.rmdir(path)
|
|
43
|
+
raise NotImplementedError
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def Dir.unlink(path)
|
|
47
|
+
raise NotImplementedError
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end; end # Post/Rex
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
require 'rex/post/io'
|
|
4
|
+
|
|
5
|
+
module Rex
|
|
6
|
+
module Post
|
|
7
|
+
|
|
8
|
+
# make this a module so we can mix it in, and have inheritence like..
|
|
9
|
+
# => [Rex::Post::DispatchNinja::File, Rex::Post::File,
|
|
10
|
+
# Rex::Post::DispatchNinja::IO, Rex::Post::IO, Object, Kernel]
|
|
11
|
+
|
|
12
|
+
###
|
|
13
|
+
#
|
|
14
|
+
# This module simulates the behavior that one would expect from the Ruby File
|
|
15
|
+
# class against a remote entity. Refer to the ruby documentation for expected
|
|
16
|
+
# behavior.
|
|
17
|
+
#
|
|
18
|
+
###
|
|
19
|
+
module File
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
# inherits fd and mode from IO
|
|
23
|
+
attr_accessor :filename
|
|
24
|
+
public
|
|
25
|
+
|
|
26
|
+
# f = File.new("testfile", "r")
|
|
27
|
+
# f = File.new("newfile", "w+")
|
|
28
|
+
# f = File.new("newfile", File::CREAT|File::TRUNC|File::RDWR, 0644)
|
|
29
|
+
# !!! I suppose I should figure out the correct default for perm..
|
|
30
|
+
def initialize(name, mode='r', perm=0)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def path
|
|
34
|
+
filename
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# ctime/atime blah need fstat..
|
|
38
|
+
# need lchown/chown/fchown, etc, etc
|
|
39
|
+
|
|
40
|
+
# proxy these methods
|
|
41
|
+
def File.basename(*a)
|
|
42
|
+
::File.basename(*a)
|
|
43
|
+
end
|
|
44
|
+
def File.dirname(*a)
|
|
45
|
+
::File.dirname(*a)
|
|
46
|
+
end
|
|
47
|
+
def File.extname(*a)
|
|
48
|
+
::File.extname(*a)
|
|
49
|
+
end
|
|
50
|
+
# !!! we might actually want to handle this File::SEPERATOR stuff
|
|
51
|
+
# for win32 support, etc.
|
|
52
|
+
def File.join(*a)
|
|
53
|
+
::File.join(*a)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def File.chmod
|
|
57
|
+
raise NotImplementedError
|
|
58
|
+
end
|
|
59
|
+
def File.chown
|
|
60
|
+
raise NotImplementedError
|
|
61
|
+
end
|
|
62
|
+
def File.delete(*a)
|
|
63
|
+
unlink(*a)
|
|
64
|
+
end
|
|
65
|
+
def File.unlink
|
|
66
|
+
raise NotImplementedError
|
|
67
|
+
end
|
|
68
|
+
def File.lchmod
|
|
69
|
+
raise NotImplementedError
|
|
70
|
+
end
|
|
71
|
+
def File.lchown
|
|
72
|
+
raise NotImplementedError
|
|
73
|
+
end
|
|
74
|
+
def File.link
|
|
75
|
+
raise NotImplementedError
|
|
76
|
+
end
|
|
77
|
+
def File.lstat
|
|
78
|
+
raise NotImplementedError
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# this, along with all the other globbing/search stuff, probably
|
|
82
|
+
# won't get implemented, atleast for a bit...
|
|
83
|
+
def File.expand_path
|
|
84
|
+
raise NotImplementedError
|
|
85
|
+
end
|
|
86
|
+
def File.fnmatch(*a)
|
|
87
|
+
fnmatch?(*a)
|
|
88
|
+
end
|
|
89
|
+
def File.fnmatch?
|
|
90
|
+
raise NotImplementedError
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# autogen'd stat passthroughs
|
|
95
|
+
#
|
|
96
|
+
def File.atime(name)
|
|
97
|
+
stat(name).atime
|
|
98
|
+
end
|
|
99
|
+
def File.blockdev?(name)
|
|
100
|
+
stat(name).blockdev?
|
|
101
|
+
end
|
|
102
|
+
def File.chardev?(name)
|
|
103
|
+
stat(name).chardev?
|
|
104
|
+
end
|
|
105
|
+
def File.ctime(name)
|
|
106
|
+
stat(name).ctime
|
|
107
|
+
end
|
|
108
|
+
def File.directory?(name)
|
|
109
|
+
stat(name).directory?
|
|
110
|
+
end
|
|
111
|
+
def File.executable?(name)
|
|
112
|
+
stat(name).executable?
|
|
113
|
+
end
|
|
114
|
+
def File.executable_real?(name)
|
|
115
|
+
stat(name).executable_real?
|
|
116
|
+
end
|
|
117
|
+
def File.file?(name)
|
|
118
|
+
stat(name).file?
|
|
119
|
+
end
|
|
120
|
+
def File.ftype(name)
|
|
121
|
+
stat(name).ftype
|
|
122
|
+
end
|
|
123
|
+
def File.grpowned?(name)
|
|
124
|
+
stat(name).grpowned?
|
|
125
|
+
end
|
|
126
|
+
def File.mtime(name)
|
|
127
|
+
stat(name).mtime
|
|
128
|
+
end
|
|
129
|
+
def File.owned?(name)
|
|
130
|
+
stat(name).owned?
|
|
131
|
+
end
|
|
132
|
+
def File.pipe?(name)
|
|
133
|
+
stat(name).pipe?
|
|
134
|
+
end
|
|
135
|
+
def File.readable?(name)
|
|
136
|
+
stat(name).readable?
|
|
137
|
+
end
|
|
138
|
+
def File.readable_real?(name)
|
|
139
|
+
stat(name).readable_real?
|
|
140
|
+
end
|
|
141
|
+
def File.setuid?(name)
|
|
142
|
+
stat(name).setuid?
|
|
143
|
+
end
|
|
144
|
+
def File.setgid?(name)
|
|
145
|
+
stat(name).setgid?
|
|
146
|
+
end
|
|
147
|
+
def File.size(name)
|
|
148
|
+
stat(name).size
|
|
149
|
+
end
|
|
150
|
+
def File.socket?(name)
|
|
151
|
+
stat(name).socket?
|
|
152
|
+
end
|
|
153
|
+
def File.sticky?(name)
|
|
154
|
+
stat(name).sticky?
|
|
155
|
+
end
|
|
156
|
+
def File.symlink?(name)
|
|
157
|
+
stat(name).symlink?
|
|
158
|
+
end
|
|
159
|
+
def File.writeable?(name)
|
|
160
|
+
stat(name).writeable?
|
|
161
|
+
end
|
|
162
|
+
def File.writeable_real?(name)
|
|
163
|
+
stat(name).writeable_real?
|
|
164
|
+
end
|
|
165
|
+
def File.zero?(name)
|
|
166
|
+
stat(name).zero?
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end; end # Post/Rex
|
|
172
|
+
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# -*- coding: binary -*-
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# This is just a container class basically, that acts like File::Struct
|
|
5
|
+
#
|
|
6
|
+
# You must supply an initialize method that somehow populates the stathash..
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
module Rex
|
|
10
|
+
module Post
|
|
11
|
+
|
|
12
|
+
###
|
|
13
|
+
#
|
|
14
|
+
# This class emulates the ruby FileStat class against a remote entity in a
|
|
15
|
+
# generic fashion. Refer to the ruby documentation for expected behavior.
|
|
16
|
+
#
|
|
17
|
+
###
|
|
18
|
+
class FileStat
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# Basic file types.
|
|
22
|
+
#
|
|
23
|
+
@@ftypes = [
|
|
24
|
+
'fifo', 'characterSpecial', 'directory',
|
|
25
|
+
'blockSpecial', 'file', 'link', 'socket'
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
attr_accessor :stathash
|
|
29
|
+
|
|
30
|
+
def initialize(buf='')
|
|
31
|
+
self.stathash = {}
|
|
32
|
+
update(buf) if (buf and not buf.empty?)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def dev
|
|
36
|
+
self.stathash['st_dev']
|
|
37
|
+
end
|
|
38
|
+
def ino
|
|
39
|
+
self.stathash['st_ino']
|
|
40
|
+
end
|
|
41
|
+
def mode
|
|
42
|
+
self.stathash['st_mode']
|
|
43
|
+
end
|
|
44
|
+
def nlink
|
|
45
|
+
self.stathash['st_nlink']
|
|
46
|
+
end
|
|
47
|
+
def uid
|
|
48
|
+
self.stathash['st_uid']
|
|
49
|
+
end
|
|
50
|
+
def gid
|
|
51
|
+
self.stathash['st_gid']
|
|
52
|
+
end
|
|
53
|
+
def rdev
|
|
54
|
+
self.stathash['st_rdev']
|
|
55
|
+
end
|
|
56
|
+
def size
|
|
57
|
+
self.stathash['st_size']
|
|
58
|
+
end
|
|
59
|
+
def blksize
|
|
60
|
+
self.stathash['st_blksize']
|
|
61
|
+
end
|
|
62
|
+
def blocks
|
|
63
|
+
self.stathash['st_blocks']
|
|
64
|
+
end
|
|
65
|
+
def atime
|
|
66
|
+
Time.at(self.stathash['st_atime'])
|
|
67
|
+
end
|
|
68
|
+
def mtime
|
|
69
|
+
Time.at(self.stathash['st_mtime'])
|
|
70
|
+
end
|
|
71
|
+
def ctime
|
|
72
|
+
Time.at(self.stathash['st_ctime'])
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def update(buf)
|
|
76
|
+
|
|
77
|
+
# XXX: This needs to understand more than just 'stat' structures
|
|
78
|
+
# Windows can also return _stat32, _stat32i64, _stat64i32, and _stat64 structures
|
|
79
|
+
|
|
80
|
+
skeys = %W{st_dev st_ino st_mode st_wtf st_nlink st_uid st_gid st_rdev st_size st_ctime st_atime st_mtime}
|
|
81
|
+
svals = buf.unpack("VvvvvvvVVVVV")
|
|
82
|
+
skeys.each_index do |i|
|
|
83
|
+
self.stathash[ skeys[i] ] = svals[i]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
#
|
|
88
|
+
# S_IFMT 0170000 bitmask for the file type bitfields
|
|
89
|
+
# S_IFSOCK 0140000 socket
|
|
90
|
+
# S_IFLNK 0120000 symbolic link
|
|
91
|
+
# S_IFREG 0100000 regular file
|
|
92
|
+
# S_IFBLK 0060000 block device
|
|
93
|
+
# S_IFDIR 0040000 directory
|
|
94
|
+
# S_IFCHR 0020000 character device
|
|
95
|
+
# S_IFIFO 0010000 fifo
|
|
96
|
+
#
|
|
97
|
+
|
|
98
|
+
# this is my own, just a helper...
|
|
99
|
+
def filetype?(mask)
|
|
100
|
+
return true if mode & 0170000 == mask
|
|
101
|
+
return false
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def blockdev?
|
|
105
|
+
filetype?(060000)
|
|
106
|
+
end
|
|
107
|
+
def chardev?
|
|
108
|
+
filetype?(020000)
|
|
109
|
+
end
|
|
110
|
+
def directory?
|
|
111
|
+
filetype?(040000)
|
|
112
|
+
end
|
|
113
|
+
def file?
|
|
114
|
+
filetype?(0100000)
|
|
115
|
+
end
|
|
116
|
+
def pipe?
|
|
117
|
+
filetype?(010000) # ??? fifo?
|
|
118
|
+
end
|
|
119
|
+
def socket?
|
|
120
|
+
filetype(0140000)
|
|
121
|
+
end
|
|
122
|
+
def symlink?
|
|
123
|
+
filetype(0120000)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def ftype
|
|
127
|
+
return @@ftypes[(mode & 0170000) >> 13].dup
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
#
|
|
131
|
+
# S_ISUID 0004000 set UID bit
|
|
132
|
+
# S_ISGID 0002000 set GID bit (see below)
|
|
133
|
+
# S_ISVTX 0001000 sticky bit (see below)
|
|
134
|
+
# S_IRWXU 00700 mask for file owner permissions
|
|
135
|
+
# S_IRUSR 00400 owner has read permission
|
|
136
|
+
# S_IWUSR 00200 owner has write permission
|
|
137
|
+
# S_IXUSR 00100 owner has execute permission
|
|
138
|
+
# S_IRWXG 00070 mask for group permissions
|
|
139
|
+
# S_IRGRP 00040 group has read permission
|
|
140
|
+
# S_IWGRP 00020 group has write permission
|
|
141
|
+
# S_IXGRP 00010 group has execute permission
|
|
142
|
+
# S_IRWXO 00007 mask for permissions for others (not in group)
|
|
143
|
+
# S_IROTH 00004 others have read permission
|
|
144
|
+
# S_IWOTH 00002 others have write permisson
|
|
145
|
+
# S_IXOTH 00001 others have execute permission
|
|
146
|
+
#
|
|
147
|
+
|
|
148
|
+
def perm?(mask)
|
|
149
|
+
return true if mode & mask == mask
|
|
150
|
+
return false
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def setgid?
|
|
154
|
+
perm?(02000)
|
|
155
|
+
end
|
|
156
|
+
def setuid?
|
|
157
|
+
perm?(04000)
|
|
158
|
+
end
|
|
159
|
+
def sticky?
|
|
160
|
+
perm?(01000)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def executable?
|
|
164
|
+
raise NotImplementedError
|
|
165
|
+
end
|
|
166
|
+
def executable_real?
|
|
167
|
+
raise NotImplementedError
|
|
168
|
+
end
|
|
169
|
+
def grpowned?
|
|
170
|
+
raise NotImplementedError
|
|
171
|
+
end
|
|
172
|
+
def owned?
|
|
173
|
+
raise NotImplementedError
|
|
174
|
+
end
|
|
175
|
+
def readable?
|
|
176
|
+
raise NotImplementedError
|
|
177
|
+
end
|
|
178
|
+
def readable_real?
|
|
179
|
+
raise NotImplementedError
|
|
180
|
+
end
|
|
181
|
+
def writeable?
|
|
182
|
+
raise NotImplementedError
|
|
183
|
+
end
|
|
184
|
+
def writeable_real?
|
|
185
|
+
raise NotImplementedError
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
#
|
|
189
|
+
# Return pretty information about a file's permissions.
|
|
190
|
+
#
|
|
191
|
+
def prettymode
|
|
192
|
+
m = mode
|
|
193
|
+
om = '%04o' % m
|
|
194
|
+
perms = ''
|
|
195
|
+
|
|
196
|
+
3.times {
|
|
197
|
+
perms = ((m & 01) == 01 ? 'x' : '-') + perms
|
|
198
|
+
perms = ((m & 02) == 02 ? 'w' : '-') + perms
|
|
199
|
+
perms = ((m & 04) == 04 ? 'r' : '-') + perms
|
|
200
|
+
m >>= 3
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return "#{om}/#{perms}"
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
#
|
|
207
|
+
# Return pretty information about a file.
|
|
208
|
+
#
|
|
209
|
+
def pretty
|
|
210
|
+
" Size: #{size} Blocks: #{blocks} IO Block: #{blksize} Type: #{rdev}\n"\
|
|
211
|
+
"Device: #{dev} Inode: #{ino} Links: #{nlink}\n"\
|
|
212
|
+
" Mode: #{prettymode}\n"\
|
|
213
|
+
" Uid: #{uid} Gid: #{gid}\n"\
|
|
214
|
+
"Access: #{atime}\n"\
|
|
215
|
+
"Modify: #{mtime}\n"\
|
|
216
|
+
"Change: #{ctime}\n"
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
end
|
|
220
|
+
end; end # Post/Rex
|