ruby_smb 2.0.2 → 3.0.0
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/verify.yml +46 -0
- data/README.md +0 -1
- data/examples/anonymous_auth.rb +3 -3
- data/examples/append_file.rb +10 -8
- data/examples/auth_capture.rb +71 -0
- data/examples/authenticate.rb +9 -5
- data/examples/delete_file.rb +8 -6
- data/examples/dump_secrets_from_sid.rb +207 -0
- data/examples/enum_domain_users.rb +75 -0
- data/examples/enum_registry_key.rb +5 -4
- data/examples/enum_registry_values.rb +5 -4
- data/examples/get_computer_info.rb +42 -0
- data/examples/list_directory.rb +8 -6
- data/examples/negotiate_with_netbios_service.rb +9 -5
- data/examples/net_share_enum_all.rb +6 -4
- data/examples/pipes.rb +11 -12
- data/examples/query_service_status.rb +102 -0
- data/examples/read_file.rb +8 -6
- data/examples/read_registry_key_value.rb +6 -5
- data/examples/rename_file.rb +9 -7
- data/examples/tree_connect.rb +7 -5
- data/examples/write_file.rb +9 -7
- data/lib/ruby_smb/client/authentication.rb +5 -10
- data/lib/ruby_smb/client/echo.rb +2 -4
- data/lib/ruby_smb/client/negotiation.rb +13 -16
- data/lib/ruby_smb/client/tree_connect.rb +2 -4
- data/lib/ruby_smb/client/utils.rb +16 -10
- data/lib/ruby_smb/client/winreg.rb +1 -1
- data/lib/ruby_smb/client.rb +102 -75
- data/lib/ruby_smb/compression/lznt1.rb +164 -0
- data/lib/ruby_smb/compression.rb +7 -0
- data/lib/ruby_smb/dcerpc/bind.rb +28 -20
- data/lib/ruby_smb/dcerpc/bind_ack.rb +29 -28
- data/lib/ruby_smb/dcerpc/client.rb +542 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_bind_request.rb +24 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_bind_response.rb +26 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_crack_names_request.rb +57 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_crack_names_response.rb +76 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_domain_controller_info_request.rb +46 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_domain_controller_info_response.rb +168 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_extensions.rb +56 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_get_nc_changes_request.rb +121 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_get_nc_changes_response.rb +118 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_unbind_request.rb +24 -0
- data/lib/ruby_smb/dcerpc/drsr/drs_unbind_response.rb +26 -0
- data/lib/ruby_smb/dcerpc/drsr.rb +909 -0
- data/lib/ruby_smb/dcerpc/epm/epm_ept_map_request.rb +26 -0
- data/lib/ruby_smb/dcerpc/epm/epm_ept_map_response.rb +25 -0
- data/lib/ruby_smb/dcerpc/epm/epm_twrt.rb +211 -0
- data/lib/ruby_smb/dcerpc/epm.rb +75 -0
- data/lib/ruby_smb/dcerpc/error.rb +20 -0
- data/lib/ruby_smb/dcerpc/ndr.rb +1204 -80
- data/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request.rb +27 -0
- data/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response.rb +26 -0
- data/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request.rb +27 -0
- data/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response.rb +23 -0
- data/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request.rb +24 -0
- data/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response.rb +24 -0
- data/lib/ruby_smb/dcerpc/netlogon.rb +102 -0
- data/lib/ruby_smb/dcerpc/p_syntax_id_t.rb +4 -3
- data/lib/ruby_smb/dcerpc/pdu_header.rb +7 -7
- data/lib/ruby_smb/dcerpc/ptypes.rb +1 -0
- data/lib/ruby_smb/dcerpc/request.rb +85 -19
- data/lib/ruby_smb/dcerpc/response.rb +45 -10
- data/lib/ruby_smb/dcerpc/rpc_auth3.rb +28 -0
- data/lib/ruby_smb/dcerpc/rpc_security_attributes.rb +34 -0
- data/lib/ruby_smb/dcerpc/rrp_rpc_unicode_string.rb +118 -0
- data/lib/ruby_smb/dcerpc/samr/rpc_sid.rb +150 -0
- data/lib/ruby_smb/dcerpc/samr/samr_close_handle_request.rb +23 -0
- data/lib/ruby_smb/dcerpc/samr/samr_close_handle_response.rb +24 -0
- data/lib/ruby_smb/dcerpc/samr/samr_connect_request.rb +32 -0
- data/lib/ruby_smb/dcerpc/samr/samr_connect_response.rb +23 -0
- data/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request.rb +26 -0
- data/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response.rb +55 -0
- data/lib/ruby_smb/dcerpc/samr/samr_get_alias_membership_request.rb +48 -0
- data/lib/ruby_smb/dcerpc/samr/samr_get_alias_membership_response.rb +38 -0
- data/lib/ruby_smb/dcerpc/samr/samr_get_groups_for_user_request.rb +23 -0
- data/lib/ruby_smb/dcerpc/samr/samr_get_groups_for_user_response.rb +48 -0
- data/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request.rb +24 -0
- data/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response.rb +25 -0
- data/lib/ruby_smb/dcerpc/samr/samr_open_domain_request.rb +27 -0
- data/lib/ruby_smb/dcerpc/samr/samr_open_domain_response.rb +24 -0
- data/lib/ruby_smb/dcerpc/samr/samr_open_user_request.rb +26 -0
- data/lib/ruby_smb/dcerpc/samr/samr_open_user_response.rb +24 -0
- data/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request.rb +23 -0
- data/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response.rb +23 -0
- data/lib/ruby_smb/dcerpc/samr.rb +613 -0
- data/lib/ruby_smb/dcerpc/sec_trailer.rb +26 -0
- data/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb +56 -79
- data/lib/ruby_smb/dcerpc/srvsvc.rb +27 -4
- data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb +36 -0
- data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb +26 -0
- data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb +25 -0
- data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb +26 -0
- data/lib/ruby_smb/dcerpc/svcctl/control_service_request.rb +26 -0
- data/lib/ruby_smb/dcerpc/svcctl/control_service_response.rb +26 -0
- data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb +25 -0
- data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb +23 -0
- data/lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb +23 -0
- data/lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb +23 -0
- data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb +25 -0
- data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb +45 -0
- data/lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb +23 -0
- data/lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb +27 -0
- data/lib/ruby_smb/dcerpc/svcctl/service_status.rb +26 -0
- data/lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb +27 -0
- data/lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb +25 -0
- data/lib/ruby_smb/dcerpc/svcctl.rb +477 -0
- data/lib/ruby_smb/dcerpc/uuid.rb +3 -0
- data/lib/ruby_smb/dcerpc/winreg/close_key_response.rb +2 -2
- data/lib/ruby_smb/dcerpc/winreg/create_key_request.rb +62 -0
- data/lib/ruby_smb/dcerpc/winreg/create_key_response.rb +36 -0
- data/lib/ruby_smb/dcerpc/winreg/enum_key_request.rb +2 -19
- data/lib/ruby_smb/dcerpc/winreg/enum_key_response.rb +3 -20
- data/lib/ruby_smb/dcerpc/winreg/enum_value_request.rb +5 -14
- data/lib/ruby_smb/dcerpc/winreg/enum_value_response.rb +5 -14
- data/lib/ruby_smb/dcerpc/winreg/open_key_request.rb +1 -9
- data/lib/ruby_smb/dcerpc/winreg/open_key_response.rb +4 -3
- data/lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb +6 -7
- data/lib/ruby_smb/dcerpc/winreg/open_root_key_response.rb +2 -2
- data/lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb +1 -1
- data/lib/ruby_smb/dcerpc/winreg/query_info_key_response.rb +9 -18
- data/lib/ruby_smb/dcerpc/winreg/query_value_request.rb +4 -13
- data/lib/ruby_smb/dcerpc/winreg/query_value_response.rb +7 -15
- data/lib/ruby_smb/dcerpc/winreg/regsam.rb +3 -1
- data/lib/ruby_smb/dcerpc/winreg/save_key_request.rb +28 -0
- data/lib/ruby_smb/dcerpc/winreg/save_key_response.rb +23 -0
- data/lib/ruby_smb/dcerpc/winreg.rb +99 -22
- data/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request.rb +26 -0
- data/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response.rb +88 -0
- data/lib/ruby_smb/dcerpc/wkssvc.rb +65 -0
- data/lib/ruby_smb/dcerpc.rb +45 -11
- data/lib/ruby_smb/dialect.rb +45 -0
- data/lib/ruby_smb/dispatcher/base.rb +1 -1
- data/lib/ruby_smb/dispatcher/socket.rb +2 -2
- data/lib/ruby_smb/error.rb +21 -5
- data/lib/ruby_smb/field/file_time.rb +1 -1
- data/lib/ruby_smb/field/string16.rb +5 -1
- data/lib/ruby_smb/field/stringz16.rb +17 -1
- data/lib/ruby_smb/generic_packet.rb +11 -1
- data/lib/ruby_smb/gss/provider/authenticator.rb +42 -0
- data/lib/ruby_smb/gss/provider/ntlm.rb +303 -0
- data/lib/ruby_smb/gss/provider.rb +35 -0
- data/lib/ruby_smb/gss.rb +56 -63
- data/lib/ruby_smb/nbss/session_header.rb +4 -4
- data/lib/ruby_smb/ntlm.rb +61 -0
- data/lib/ruby_smb/server/server_client/negotiation.rb +156 -0
- data/lib/ruby_smb/server/server_client/session_setup.rb +82 -0
- data/lib/ruby_smb/server/server_client.rb +162 -0
- data/lib/ruby_smb/server.rb +54 -0
- data/lib/ruby_smb/signing.rb +59 -0
- data/lib/ruby_smb/smb1/file.rb +10 -25
- data/lib/ruby_smb/smb1/packet/negotiate_response.rb +11 -11
- data/lib/ruby_smb/smb1/packet/negotiate_response_extended.rb +1 -1
- data/lib/ruby_smb/smb1/packet/session_setup_request.rb +1 -1
- data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +0 -1
- data/lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb +0 -1
- data/lib/ruby_smb/smb1/packet/trans2/open2_response.rb +1 -2
- data/lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb +1 -13
- data/lib/ruby_smb/smb1/pipe.rb +12 -6
- data/lib/ruby_smb/smb1/tree.rb +13 -9
- data/lib/ruby_smb/smb2/file.rb +33 -33
- data/lib/ruby_smb/smb2/negotiate_context.rb +18 -2
- data/lib/ruby_smb/smb2/packet/compression_transform_header.rb +4 -0
- data/lib/ruby_smb/smb2/packet/negotiate_request.rb +9 -0
- data/lib/ruby_smb/smb2/packet/negotiate_response.rb +0 -1
- data/lib/ruby_smb/smb2/packet/session_setup_response.rb +2 -2
- data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +1 -1
- data/lib/ruby_smb/smb2/pipe.rb +13 -6
- data/lib/ruby_smb/smb2/tree.rb +21 -11
- data/lib/ruby_smb/smb2.rb +3 -1
- data/lib/ruby_smb/version.rb +1 -1
- data/lib/ruby_smb.rb +5 -3
- data/spec/lib/ruby_smb/client_spec.rb +199 -86
- data/spec/lib/ruby_smb/compression/lznt1_spec.rb +32 -0
- data/spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb +69 -41
- data/spec/lib/ruby_smb/dcerpc/bind_spec.rb +75 -21
- data/spec/lib/ruby_smb/dcerpc/client_spec.rb +714 -0
- data/spec/lib/ruby_smb/dcerpc/drsr_spec.rb +2169 -0
- data/spec/lib/ruby_smb/dcerpc/ndr_spec.rb +3977 -239
- data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request_spec.rb +69 -0
- data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response_spec.rb +53 -0
- data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request_spec.rb +69 -0
- data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response_spec.rb +37 -0
- data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request_spec.rb +45 -0
- data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response_spec.rb +37 -0
- data/spec/lib/ruby_smb/dcerpc/p_syntax_id_t_spec.rb +18 -4
- data/spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb +27 -1
- data/spec/lib/ruby_smb/dcerpc/request_spec.rb +76 -11
- data/spec/lib/ruby_smb/dcerpc/response_spec.rb +99 -9
- data/spec/lib/ruby_smb/dcerpc/rpc_auth3_spec.rb +75 -0
- data/spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb +162 -0
- data/spec/lib/ruby_smb/dcerpc/rrp_rpc_unicode_string_spec.rb +340 -0
- data/spec/lib/ruby_smb/dcerpc/samr/rpc_sid_spec.rb +116 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_request_spec.rb +40 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_response_spec.rb +48 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_connect_request_spec.rb +56 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_connect_response_spec.rb +47 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request_spec.rb +63 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response_spec.rb +265 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request_spec.rb +52 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response_spec.rb +36 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_request_spec.rb +56 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_response_spec.rb +48 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request_spec.rb +48 -0
- data/spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response_spec.rb +42 -0
- data/spec/lib/ruby_smb/dcerpc/samr_spec.rb +420 -0
- data/spec/lib/ruby_smb/dcerpc/sec_trailer_spec.rb +92 -0
- data/spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb +149 -110
- data/spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb +21 -17
- data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb +168 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb +30 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb +39 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb +68 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb +53 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb +152 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb +30 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb +76 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb +47 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb +30 -0
- data/spec/lib/ruby_smb/dcerpc/svcctl_spec.rb +508 -0
- data/spec/lib/ruby_smb/dcerpc/uuid_spec.rb +15 -23
- data/spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb +2 -2
- data/spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb +73 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb +44 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb +4 -56
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb +4 -56
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb +10 -34
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb +10 -34
- data/spec/lib/ruby_smb/dcerpc/winreg/open_key_request_spec.rb +2 -26
- data/spec/lib/ruby_smb/dcerpc/winreg/open_key_response_spec.rb +2 -2
- data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb +17 -20
- data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_response_spec.rb +2 -2
- data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb +0 -4
- data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_response_spec.rb +20 -44
- data/spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb +8 -32
- data/spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb +18 -42
- data/spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb +4 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb +45 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb +22 -0
- data/spec/lib/ruby_smb/dcerpc/winreg_spec.rb +219 -62
- data/spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request_spec.rb +43 -0
- data/spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response_spec.rb +410 -0
- data/spec/lib/ruby_smb/dcerpc/wkssvc_spec.rb +70 -0
- data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +10 -10
- data/spec/lib/ruby_smb/error_spec.rb +34 -5
- data/spec/lib/ruby_smb/field/string16_spec.rb +22 -0
- data/spec/lib/ruby_smb/field/stringz16_spec.rb +12 -0
- data/spec/lib/ruby_smb/generic_packet_spec.rb +7 -0
- data/spec/lib/ruby_smb/gss/provider/ntlm/account_spec.rb +32 -0
- data/spec/lib/ruby_smb/gss/provider/ntlm/authenticator_spec.rb +101 -0
- data/spec/lib/ruby_smb/gss/provider/ntlm/os_version_spec.rb +32 -0
- data/spec/lib/ruby_smb/gss/provider/ntlm_spec.rb +113 -0
- data/spec/lib/ruby_smb/nbss/session_header_spec.rb +4 -11
- data/spec/lib/ruby_smb/server/server_client_spec.rb +156 -0
- data/spec/lib/ruby_smb/server_spec.rb +32 -0
- data/spec/lib/ruby_smb/smb1/file_spec.rb +2 -4
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_response_spec.rb +0 -1
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_response_spec.rb +0 -1
- data/spec/lib/ruby_smb/smb1/packet/trans2/open2_response_spec.rb +0 -5
- data/spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_response_spec.rb +0 -6
- data/spec/lib/ruby_smb/smb1/pipe_spec.rb +20 -14
- data/spec/lib/ruby_smb/smb1/tree_spec.rb +22 -0
- data/spec/lib/ruby_smb/smb2/file_spec.rb +61 -9
- data/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb +2 -2
- data/spec/lib/ruby_smb/smb2/pipe_spec.rb +20 -14
- data/spec/lib/ruby_smb/smb2/tree_spec.rb +58 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/bin_helper.rb +9 -0
- data.tar.gz.sig +0 -0
- metadata +229 -23
- metadata.gz.sig +0 -0
- data/.travis.yml +0 -6
- data/lib/ruby_smb/client/signing.rb +0 -64
- data/lib/ruby_smb/dcerpc/rrp_unicode_string.rb +0 -35
- data/spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb +0 -98
|
@@ -2,103 +2,80 @@ module RubySMB
|
|
|
2
2
|
module Dcerpc
|
|
3
3
|
module Srvsvc
|
|
4
4
|
|
|
5
|
-
#https://
|
|
5
|
+
# [2.2.1.1 SRVSVC_HANDLE](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-srvs/5f8329ee-1965-4ea1-ad35-3b29fbb63232)
|
|
6
|
+
class SrvsvcHandle < Ndr::NdrWideStringzPtr; end
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
# [2.2.4.23 SHARE_INFO_1](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-srvs/fc69f110-998d-4c16-9667-514e22fdd80b)
|
|
9
|
+
class ShareInfo1Element < Ndr::NdrStruct
|
|
10
|
+
default_parameters byte_align: 4
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
ndr_wide_stringz_ptr :shi1_netname
|
|
13
|
+
ndr_uint32 :shi1_type
|
|
14
|
+
ndr_wide_stringz_ptr :shi1_remark
|
|
15
|
+
end
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
class ShareInfo1 < Ndr::NdrConfArray
|
|
18
|
+
default_parameters type: :share_info1_element
|
|
19
|
+
end
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
uint32 :actual_count, initial_value: -> {max_count}
|
|
18
|
-
stringz16 :server_unc, pad_front: false, read_length: -> { actual_count * 2 },
|
|
19
|
-
initial_value: -> {"\\\\#{host.encode('utf-8')}".encode('utf-16le')}
|
|
21
|
+
class LpshareInfo1 < ShareInfo1
|
|
22
|
+
extend Ndr::PointerClassPlugin
|
|
23
|
+
end
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
# [2.2.4.33 SHARE_INFO_1_CONTAINER](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-srvs/919abd5d-87d9-4ffa-b4b1-632a66053bc6)
|
|
26
|
+
class ShareInfo1Container < Ndr::NdrStruct
|
|
27
|
+
default_parameters byte_align: 4
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
uint32 :pointer_to_array, initial_value: 0
|
|
29
|
+
ndr_uint32 :entries_read
|
|
30
|
+
lpshare_info1 :buffer
|
|
31
|
+
end
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
class LpshareInfo1Container < ShareInfo1Container
|
|
34
|
+
extend Ndr::PointerClassPlugin
|
|
35
|
+
end
|
|
30
36
|
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
# [2.2.4.38 SHARE_ENUM_STRUCT](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-srvs/79ee052e-e16b-4ec5-b4b7-e99777c26eca)
|
|
38
|
+
class LpshareEnumStruct < Ndr::NdrStruct
|
|
39
|
+
hide :switch_value
|
|
40
|
+
default_parameters byte_align: 4
|
|
33
41
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def pad_length
|
|
40
|
-
offset = (server_unc.abs_offset + server_unc.to_binary_s.length) % 4
|
|
41
|
-
(4 - offset) % 4
|
|
42
|
+
ndr_uint32 :level, initial_value: 1
|
|
43
|
+
ndr_uint32 :switch_value, initial_value: :level
|
|
44
|
+
choice :share_info, selection: :level, byte_align: 4 do
|
|
45
|
+
lpshare_info1_container 1, initial_value: { entries_read: 0, buffer: :null }
|
|
42
46
|
end
|
|
47
|
+
end
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
res = response.dup
|
|
49
|
-
win_error = res.slice!(-4, 4).unpack("V")[0]
|
|
50
|
-
|
|
51
|
-
if win_error != 0
|
|
52
|
-
raise RuntimeError, "Invalid DCERPC response: win_error = #{win_error}"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Remove unused data
|
|
56
|
-
res.slice!(0, 12) # level, CTR header, Reference ID of CTR
|
|
57
|
-
share_count = res.slice!(0, 4).unpack("V")[0]
|
|
58
|
-
res.slice!(0, 4) # Reference ID of CTR1
|
|
59
|
-
share_max_count = res.slice!(0, 4).unpack("V")[0]
|
|
60
|
-
|
|
61
|
-
if share_max_count != share_count
|
|
62
|
-
raise RuntimeError, "Invalid DCERPC response: count != count max (#{share_count}/#{share_max_count})"
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# ReferenceID / Type / ReferenceID of Comment
|
|
66
|
-
types = res.slice!(0, share_count * 12).scan(/.{12}/n).map { |a| a[4, 2].unpack("v")[0] }
|
|
67
|
-
|
|
68
|
-
share_count.times do |t|
|
|
69
|
-
length, offset, max_length = res.slice!(0, 12).unpack("VVV")
|
|
70
|
-
if offset != 0
|
|
71
|
-
raise RuntimeError, "Invalid DCERPC response: offset != 0 (#{offset})"
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
if length != max_length
|
|
75
|
-
raise RuntimeError, "Invalid DCERPC response: length !=max_length (#{length}/#{max_length})"
|
|
76
|
-
end
|
|
77
|
-
name = res.slice!(0, 2 * length).gsub('\x00', '')
|
|
78
|
-
res.slice!(0, 2) if length % 2 == 1 # pad
|
|
79
|
-
|
|
80
|
-
comment_length, comment_offset, comment_max_length = res.slice!(0, 12).unpack("VVV")
|
|
49
|
+
# [3.1.4.8 NetrShareEnum (Opnum 15)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-srvs/c4a98e7b-d416-439c-97bd-4d9f52f8ba52)
|
|
50
|
+
class NetShareEnumAllRequest < BinData::Record
|
|
51
|
+
attr_reader :opnum
|
|
81
52
|
|
|
82
|
-
|
|
83
|
-
raise RuntimeError, "Invalid DCERPC response: comment_offset != 0 (#{comment_offset})"
|
|
84
|
-
end
|
|
53
|
+
endian :little
|
|
85
54
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
55
|
+
srvsvc_handle :server_name
|
|
56
|
+
lpshare_enum_struct :info_struct
|
|
57
|
+
ndr_uint32 :prefered_maximum_length, initial_value: 0xFFFFFFFF
|
|
58
|
+
ndr_uint32_ptr :resume_handle, initial_value: 0
|
|
89
59
|
|
|
90
|
-
|
|
60
|
+
def initialize_instance
|
|
61
|
+
super
|
|
62
|
+
@opnum = NET_SHARE_ENUM_ALL
|
|
63
|
+
end
|
|
64
|
+
end
|
|
91
65
|
|
|
92
|
-
|
|
66
|
+
class NetShareEnumAllResponse < BinData::Record
|
|
67
|
+
attr_reader :opnum
|
|
93
68
|
|
|
94
|
-
|
|
95
|
-
s_type = ['DISK', 'PRINTER', 'DEVICE', 'IPC', 'SPECIAL', 'TEMPORARY'][types[t]].gsub("\x00", "")
|
|
96
|
-
comment = comment.gsub("\x00", "")
|
|
69
|
+
endian :little
|
|
97
70
|
|
|
98
|
-
|
|
99
|
-
|
|
71
|
+
lpshare_enum_struct :info_struct
|
|
72
|
+
ndr_uint32 :total_entries
|
|
73
|
+
ndr_uint32_ptr :resume_handle
|
|
74
|
+
ndr_uint32 :error_status
|
|
100
75
|
|
|
101
|
-
|
|
76
|
+
def initialize_instance
|
|
77
|
+
super
|
|
78
|
+
@opnum = NET_SHARE_ENUM_ALL
|
|
102
79
|
end
|
|
103
80
|
end
|
|
104
81
|
end
|
|
@@ -9,16 +9,39 @@ module RubySMB
|
|
|
9
9
|
# Operation numbers
|
|
10
10
|
NET_SHARE_ENUM_ALL = 0xF
|
|
11
11
|
|
|
12
|
+
# [2.2.2.4 Share Types](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-srvs/6069f8c0-c93f-43a0-a5b4-7ed447eb4b84)
|
|
13
|
+
SHARE_TYPES = {
|
|
14
|
+
0x00000000 => 'DISK',
|
|
15
|
+
0x00000001 => 'PRINTER',
|
|
16
|
+
0x00000002 => 'DEVICE',
|
|
17
|
+
0x00000003 => 'IPC',
|
|
18
|
+
0x02000000 => 'CLUSTER_FS',
|
|
19
|
+
0x04000000 => 'CLUSTER_SOFS',
|
|
20
|
+
0x08000000 => 'CLUSTER_DFS'
|
|
21
|
+
}
|
|
22
|
+
STYPE_SPECIAL = 0x80000000
|
|
23
|
+
STYPE_TEMPORARY = 0x40000000
|
|
24
|
+
|
|
12
25
|
require 'ruby_smb/dcerpc/srvsvc/net_share_enum_all'
|
|
13
26
|
|
|
14
27
|
def net_share_enum_all(host)
|
|
28
|
+
host = "\\\\#{host}" unless host.start_with?('\\\\')
|
|
15
29
|
bind(endpoint: RubySMB::Dcerpc::Srvsvc)
|
|
16
30
|
|
|
17
|
-
net_share_enum_all_request_packet = RubySMB::Dcerpc::Srvsvc::
|
|
18
|
-
|
|
31
|
+
net_share_enum_all_request_packet = RubySMB::Dcerpc::Srvsvc::NetShareEnumAllRequest.new(server_name: host)
|
|
32
|
+
raw_response = dcerpc_request(net_share_enum_all_request_packet)
|
|
19
33
|
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
response = RubySMB::Dcerpc::Srvsvc::NetShareEnumAllResponse.read(raw_response)
|
|
35
|
+
response.info_struct.share_info.buffer.map do |share|
|
|
36
|
+
type = [SHARE_TYPES[share.shi1_type & 0x0FFFFFFF]]
|
|
37
|
+
type << 'SPECIAL' unless share.shi1_type & STYPE_SPECIAL == 0
|
|
38
|
+
type << 'TEMPORARY' unless share.shi1_type & STYPE_TEMPORARY == 0
|
|
39
|
+
{
|
|
40
|
+
name: share.shi1_netname.encode('UTF-8'),
|
|
41
|
+
type: type.join('|'),
|
|
42
|
+
comment: share.shi1_remark.encode('UTF-8')
|
|
43
|
+
}
|
|
44
|
+
end
|
|
22
45
|
end
|
|
23
46
|
end
|
|
24
47
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.11 RChangeServiceConfigW (Opnum 11)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/61ea7ed0-c49d-4152-a164-b4830f16c8a4)
|
|
8
|
+
class ChangeServiceConfigWRequest < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
sc_rpc_handle :h_service
|
|
14
|
+
ndr_uint32 :dw_service_type
|
|
15
|
+
ndr_uint32 :dw_start_type
|
|
16
|
+
ndr_uint32 :dw_error_control
|
|
17
|
+
ndr_wide_string_ptr :lp_binary_path_name
|
|
18
|
+
ndr_wide_string_ptr :lp_load_order_group
|
|
19
|
+
ndr_uint32_ptr :dw_tag_id
|
|
20
|
+
ndr_conf_array :lp_dependencies, type: :ndr_uint8
|
|
21
|
+
ndr_uint32 :dw_depend_size, value: -> { self.lp_dependencies.size }
|
|
22
|
+
ndr_wide_string_ptr :lp_service_start_name
|
|
23
|
+
ndr_conf_array :lp_password, type: :ndr_uint8
|
|
24
|
+
ndr_uint32 :dw_pw_size, value: -> { self.lp_password.size }
|
|
25
|
+
ndr_wide_string_ptr :lp_display_name
|
|
26
|
+
|
|
27
|
+
def initialize_instance
|
|
28
|
+
super
|
|
29
|
+
@opnum = CHANGE_SERVICE_CONFIG_W
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.11 RChangeServiceConfigW (Opnum 11)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/61ea7ed0-c49d-4152-a164-b4830f16c8a4)
|
|
8
|
+
class ChangeServiceConfigWResponse < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
ndr_uint32_ptr :dw_tag_id
|
|
14
|
+
ndr_uint32 :error_status
|
|
15
|
+
|
|
16
|
+
def initialize_instance
|
|
17
|
+
super
|
|
18
|
+
@opnum = CHANGE_SERVICE_CONFIG_W
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.1 RCloseServiceHandle (Opnum 0)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/a2a4e174-09fb-4e55-bad3-f77c4b13245c)
|
|
8
|
+
class CloseServiceHandleRequest < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
sc_rpc_handle :h_sc_object
|
|
14
|
+
|
|
15
|
+
def initialize_instance
|
|
16
|
+
super
|
|
17
|
+
@opnum = CLOSE_SERVICE_HANDLE
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.1 RCloseServiceHandle (Opnum 0)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/a2a4e174-09fb-4e55-bad3-f77c4b13245c)
|
|
8
|
+
class CloseServiceHandleResponse < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
sc_rpc_handle :h_sc_object
|
|
14
|
+
ndr_uint32 :error_status
|
|
15
|
+
|
|
16
|
+
def initialize_instance
|
|
17
|
+
super
|
|
18
|
+
@opnum = CLOSE_SERVICE_HANDLE
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.2 RControlService (Opnum 1)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/e1c478be-117f-4512-9b67-17c20a48af97)
|
|
8
|
+
class ControlServiceRequest < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
sc_rpc_handle :h_service
|
|
14
|
+
ndr_uint32 :dw_control
|
|
15
|
+
|
|
16
|
+
def initialize_instance
|
|
17
|
+
super
|
|
18
|
+
@opnum = CONTROL_SERVICE
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.2 RControlService (Opnum 1)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/e1c478be-117f-4512-9b67-17c20a48af97)
|
|
8
|
+
class ControlServiceResponse < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
service_status :lp_service_status
|
|
14
|
+
ndr_uint32 :error_status
|
|
15
|
+
|
|
16
|
+
def initialize_instance
|
|
17
|
+
super
|
|
18
|
+
@opnum = CONTROL_SERVICE
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module RubySMB
|
|
2
|
+
module Dcerpc
|
|
3
|
+
module Svcctl
|
|
4
|
+
|
|
5
|
+
class SvcctlHandleW < Ndr::NdrWideStringzPtr; end
|
|
6
|
+
|
|
7
|
+
# [3.1.4.15 ROpenSCManagerW (Opnum 15)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/dc84adb3-d51d-48eb-820d-ba1c6ca5faf2)
|
|
8
|
+
class OpenSCManagerWRequest < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
svcctl_handle_w :lp_machine_name
|
|
14
|
+
ndr_wide_stringz_ptr :lp_database_name
|
|
15
|
+
ndr_uint32 :dw_desired_access
|
|
16
|
+
|
|
17
|
+
def initialize_instance
|
|
18
|
+
super
|
|
19
|
+
@opnum = OPEN_SC_MANAGER_W
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module RubySMB
|
|
2
|
+
module Dcerpc
|
|
3
|
+
module Svcctl
|
|
4
|
+
|
|
5
|
+
# [3.1.4.15 ROpenSCManagerW (Opnum 15)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/dc84adb3-d51d-48eb-820d-ba1c6ca5faf2)
|
|
6
|
+
class OpenSCManagerWResponse < BinData::Record
|
|
7
|
+
attr_reader :opnum
|
|
8
|
+
|
|
9
|
+
endian :little
|
|
10
|
+
|
|
11
|
+
sc_rpc_handle :lp_sc_handle
|
|
12
|
+
ndr_uint32 :error_status
|
|
13
|
+
|
|
14
|
+
def initialize_instance
|
|
15
|
+
super
|
|
16
|
+
@opnum = OPEN_SC_MANAGER_W
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module RubySMB
|
|
2
|
+
module Dcerpc
|
|
3
|
+
module Svcctl
|
|
4
|
+
|
|
5
|
+
# [3.1.4.16 ROpenServiceW (Opnum 16)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/6d0a4225-451b-4132-894d-7cef7aecfd2d)
|
|
6
|
+
class OpenServiceWRequest < BinData::Record
|
|
7
|
+
attr_reader :opnum
|
|
8
|
+
|
|
9
|
+
endian :little
|
|
10
|
+
|
|
11
|
+
sc_rpc_handle :lp_sc_handle
|
|
12
|
+
ndr_conf_var_wide_stringz :lp_service_name
|
|
13
|
+
ndr_uint32 :dw_desired_access
|
|
14
|
+
|
|
15
|
+
def initialize_instance
|
|
16
|
+
super
|
|
17
|
+
@opnum = OPEN_SERVICE_W
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module RubySMB
|
|
2
|
+
module Dcerpc
|
|
3
|
+
module Svcctl
|
|
4
|
+
|
|
5
|
+
# [3.1.4.16 ROpenServiceW (Opnum 16)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/6d0a4225-451b-4132-894d-7cef7aecfd2d)
|
|
6
|
+
class OpenServiceWResponse < BinData::Record
|
|
7
|
+
attr_reader :opnum
|
|
8
|
+
|
|
9
|
+
endian :little
|
|
10
|
+
|
|
11
|
+
sc_rpc_handle :lp_sc_handle
|
|
12
|
+
ndr_uint32 :error_status
|
|
13
|
+
|
|
14
|
+
def initialize_instance
|
|
15
|
+
super
|
|
16
|
+
@opnum = OPEN_SC_MANAGER_W
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module RubySMB
|
|
2
|
+
module Dcerpc
|
|
3
|
+
module Svcctl
|
|
4
|
+
|
|
5
|
+
# [3.1.4.17 RQueryServiceConfigW (Opnum 17)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/89e2d5b1-19cf-44ca-969f-38eea9fe7f3c)
|
|
6
|
+
class QueryServiceConfigWRequest < BinData::Record
|
|
7
|
+
attr_reader :opnum
|
|
8
|
+
|
|
9
|
+
endian :little
|
|
10
|
+
|
|
11
|
+
sc_rpc_handle :h_service
|
|
12
|
+
ndr_uint32 :cb_buf_size
|
|
13
|
+
|
|
14
|
+
def initialize_instance
|
|
15
|
+
super
|
|
16
|
+
@opnum = QUERY_SERVICE_CONFIG_W
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
class LpBoundedDword8k < RubySMB::Dcerpc::Ndr::NdrUint32; end
|
|
8
|
+
|
|
9
|
+
# [2.2.15 QUERY_SERVICE_CONFIGW](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/97200665-5631-42ea-9917-6f9b41f02391)
|
|
10
|
+
class QueryServiceConfigW < RubySMB::Dcerpc::Ndr::NdrStruct
|
|
11
|
+
default_parameters byte_align: 4
|
|
12
|
+
endian :little
|
|
13
|
+
|
|
14
|
+
ndr_uint32 :dw_service_type
|
|
15
|
+
ndr_uint32 :dw_start_type
|
|
16
|
+
ndr_uint32 :dw_error_control
|
|
17
|
+
ndr_wide_string_ptr :lp_binary_path_name
|
|
18
|
+
ndr_wide_string_ptr :lp_load_order_group
|
|
19
|
+
ndr_uint32 :dw_tag_id
|
|
20
|
+
ndr_wide_string_ptr :lp_dependencies
|
|
21
|
+
ndr_wide_string_ptr :lp_service_start_name
|
|
22
|
+
ndr_wide_string_ptr :lp_display_name
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# [3.1.4.17 RQueryServiceConfigW (Opnum 17)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/89e2d5b1-19cf-44ca-969f-38eea9fe7f3c)
|
|
27
|
+
class QueryServiceConfigWResponse < BinData::Record
|
|
28
|
+
attr_reader :opnum
|
|
29
|
+
|
|
30
|
+
endian :little
|
|
31
|
+
|
|
32
|
+
query_service_config_w :lp_service_config
|
|
33
|
+
lp_bounded_dword8k :pcb_bytes_needed
|
|
34
|
+
ndr_uint32 :error_status
|
|
35
|
+
|
|
36
|
+
def initialize_instance
|
|
37
|
+
super
|
|
38
|
+
@opnum = QUERY_SERVICE_CONFIG_W
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module RubySMB
|
|
2
|
+
module Dcerpc
|
|
3
|
+
module Svcctl
|
|
4
|
+
|
|
5
|
+
# [3.1.4.7 RQueryServiceStatus (Opnum 6)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/cf94d915-b4e1-40e5-872b-a9cb3ad09b46)
|
|
6
|
+
class QueryServiceStatusRequest < BinData::Record
|
|
7
|
+
attr_reader :opnum
|
|
8
|
+
|
|
9
|
+
endian :little
|
|
10
|
+
|
|
11
|
+
sc_rpc_handle :h_service
|
|
12
|
+
|
|
13
|
+
def initialize_instance
|
|
14
|
+
super
|
|
15
|
+
@opnum = QUERY_SERVICE_STATUS
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.7 RQueryServiceStatus (Opnum 6)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/cf94d915-b4e1-40e5-872b-a9cb3ad09b46)
|
|
8
|
+
class QueryServiceStatusResponse < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
service_status :lp_service_status
|
|
14
|
+
ndr_uint32 :error_status
|
|
15
|
+
|
|
16
|
+
def initialize_instance
|
|
17
|
+
super
|
|
18
|
+
@opnum = QUERY_SERVICE_STATUS
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [2.2.47 SERVICE_STATUS](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/4e91ff36-ab5f-49ed-a43d-a308e72b0b3c)
|
|
8
|
+
class ServiceStatus < Ndr::NdrStruct
|
|
9
|
+
default_parameter byte_align: 4
|
|
10
|
+
endian :little
|
|
11
|
+
|
|
12
|
+
ndr_uint32 :dw_service_type
|
|
13
|
+
ndr_uint32 :dw_current_state
|
|
14
|
+
ndr_uint32 :dw_controls_accepted
|
|
15
|
+
ndr_uint32 :dw_win32_exit_code
|
|
16
|
+
ndr_uint32 :dw_service_specific_exit_code
|
|
17
|
+
ndr_uint32 :dw_check_point
|
|
18
|
+
ndr_uint32 :dw_wait_hint
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.19 RStartServiceW (Opnum 19)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/d9be95a2-cf01-4bdc-b30f-6fe4b37ada16)
|
|
8
|
+
class StartServiceWRequest < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
sc_rpc_handle :h_service
|
|
14
|
+
ndr_uint32 :argc
|
|
15
|
+
ndr_conf_array :argv, type: :ndr_wide_string_ptr
|
|
16
|
+
|
|
17
|
+
def initialize_instance
|
|
18
|
+
super
|
|
19
|
+
@opnum = START_SERVICE_W
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ruby_smb/dcerpc/ndr'
|
|
2
|
+
|
|
3
|
+
module RubySMB
|
|
4
|
+
module Dcerpc
|
|
5
|
+
module Svcctl
|
|
6
|
+
|
|
7
|
+
# [3.1.4.19 RStartServiceW (Opnum 19)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/d9be95a2-cf01-4bdc-b30f-6fe4b37ada16)
|
|
8
|
+
class StartServiceWResponse < BinData::Record
|
|
9
|
+
attr_reader :opnum
|
|
10
|
+
|
|
11
|
+
endian :little
|
|
12
|
+
|
|
13
|
+
ndr_uint32 :error_status
|
|
14
|
+
|
|
15
|
+
def initialize_instance
|
|
16
|
+
super
|
|
17
|
+
@opnum = START_SERVICE_W
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|