smbRpc 0.0.3

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.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +11 -0
  3. data/examples/enumLsa.rb +44 -0
  4. data/examples/enumSmbPipe.rb +16 -0
  5. data/lib/smbRpc.rb +33 -0
  6. data/lib/smbRpc/epmapper.rb +13 -0
  7. data/lib/smbRpc/epmapper/constants.rb +28 -0
  8. data/lib/smbRpc/epmapper/epmLookup.rb +98 -0
  9. data/lib/smbRpc/lsarpc.rb +22 -0
  10. data/lib/smbRpc/lsarpc/close.rb +48 -0
  11. data/lib/smbRpc/lsarpc/constants.rb +54 -0
  12. data/lib/smbRpc/lsarpc/enumerateAccounts.rb +55 -0
  13. data/lib/smbRpc/lsarpc/enumeratePrivilegesAccount.rb +49 -0
  14. data/lib/smbRpc/lsarpc/lookupNames.rb +74 -0
  15. data/lib/smbRpc/lsarpc/lookupPrivilegeName.rb +37 -0
  16. data/lib/smbRpc/lsarpc/lookupSids.rb +96 -0
  17. data/lib/smbRpc/lsarpc/openAccount.rb +49 -0
  18. data/lib/smbRpc/lsarpc/openPolicy.rb +52 -0
  19. data/lib/smbRpc/lsarpc/queryInformationPolicy.rb +92 -0
  20. data/lib/smbRpc/lsarpc/querySecurityObject.rb +75 -0
  21. data/lib/smbRpc/rpc.rb +5 -0
  22. data/lib/smbRpc/rpc/connection.rb +34 -0
  23. data/lib/smbRpc/rpc/constants.rb +64 -0
  24. data/lib/smbRpc/rpc/endpoints.rb +38 -0
  25. data/lib/smbRpc/rpc/ndrep.rb +24 -0
  26. data/lib/smbRpc/rpc/pdu.rb +40 -0
  27. data/lib/smbRpc/samr.rb +40 -0
  28. data/lib/smbRpc/samr/addMemberToAlias.rb +43 -0
  29. data/lib/smbRpc/samr/addMemberToGroup.rb +36 -0
  30. data/lib/smbRpc/samr/changePasswordUser.rb +64 -0
  31. data/lib/smbRpc/samr/closeHandle.rb +50 -0
  32. data/lib/smbRpc/samr/connect.rb +46 -0
  33. data/lib/smbRpc/samr/constants.rb +114 -0
  34. data/lib/smbRpc/samr/createAliasInDomain.rb +45 -0
  35. data/lib/smbRpc/samr/createGroupInDomain.rb +46 -0
  36. data/lib/smbRpc/samr/createUserInDomain.rb +48 -0
  37. data/lib/smbRpc/samr/deleteAlias.rb +35 -0
  38. data/lib/smbRpc/samr/deleteGroup.rb +35 -0
  39. data/lib/smbRpc/samr/deleteUser.rb +35 -0
  40. data/lib/smbRpc/samr/enumerateAliasesInDomain.rb +61 -0
  41. data/lib/smbRpc/samr/enumerateDomainsInSamServer.rb +52 -0
  42. data/lib/smbRpc/samr/enumerateGroupsInDomain.rb +60 -0
  43. data/lib/smbRpc/samr/enumerateUsersInDomain.rb +67 -0
  44. data/lib/smbRpc/samr/getMembersInAlias.rb +41 -0
  45. data/lib/smbRpc/samr/getMembersInGroup.rb +45 -0
  46. data/lib/smbRpc/samr/lookupDomainInSamServer.rb +41 -0
  47. data/lib/smbRpc/samr/lookupIdsInDomain.rb +52 -0
  48. data/lib/smbRpc/samr/lookupNamesInDomain.rb +55 -0
  49. data/lib/smbRpc/samr/openAlias.rb +39 -0
  50. data/lib/smbRpc/samr/openDomain.rb +48 -0
  51. data/lib/smbRpc/samr/openGroup.rb +39 -0
  52. data/lib/smbRpc/samr/openUser.rb +39 -0
  53. data/lib/smbRpc/samr/queryInformationUser.rb +182 -0
  54. data/lib/smbRpc/samr/removeMemberFromAlias.rb +43 -0
  55. data/lib/smbRpc/samr/removeMemberFromGroup.rb +34 -0
  56. data/lib/smbRpc/samr/setInformationUser.rb +53 -0
  57. data/lib/smbRpc/srvsvc.rb +12 -0
  58. data/lib/smbRpc/srvsvc/netShareEnum.rb +104 -0
  59. data/lib/smbRpc/srvsvc/serverGetInfo.rb +57 -0
  60. data/lib/smbRpc/svcctl.rb +20 -0
  61. data/lib/smbRpc/svcctl/closeService.rb +48 -0
  62. data/lib/smbRpc/svcctl/constants.rb +88 -0
  63. data/lib/smbRpc/svcctl/controlService.rb +48 -0
  64. data/lib/smbRpc/svcctl/createService.rb +68 -0
  65. data/lib/smbRpc/svcctl/deleteService.rb +31 -0
  66. data/lib/smbRpc/svcctl/enumServicesStatus.rb +96 -0
  67. data/lib/smbRpc/svcctl/openScm.rb +37 -0
  68. data/lib/smbRpc/svcctl/openService.rb +36 -0
  69. data/lib/smbRpc/svcctl/queryServiceConfig.rb +67 -0
  70. data/lib/smbRpc/svcctl/startService.rb +35 -0
  71. data/lib/smbRpc/updateRuby_smb.rb +3 -0
  72. data/lib/smbRpc/updateRuby_smb/client.rb +29 -0
  73. data/lib/smbRpc/updateRuby_smb/dcerpc.rb +30 -0
  74. data/lib/smbRpc/updateRuby_smb/ioctl_request.rb +53 -0
  75. data/lib/smbRpc/updateString.rb +3 -0
  76. data/lib/smbRpc/updateString/raise_not_error_success.rb +11 -0
  77. data/lib/smbRpc/updateString/to_des_ecb_lm.rb +34 -0
  78. data/smbRpc.gemspec +16 -0
  79. metadata +148 -0
@@ -0,0 +1,50 @@
1
+
2
+ module SmbRpc
3
+ class Samr < Rpc
4
+
5
+ class SamrCloseHandleReq < BinData::Record
6
+ endian :little
7
+ request :request
8
+ string :samHandle, :length => 20
9
+ def initialize_instance
10
+ super
11
+ samHandle.value = get_parameter(:handle)
12
+ request.pduHead.frag_length = self.num_bytes
13
+ request.opnum.value = 1 #SamrCloseHandle
14
+ end
15
+ end
16
+
17
+ class SamrCloseHandleRes < BinData::Record
18
+ endian :little
19
+ request :request
20
+ string :samHandle, :length => 20
21
+ uint32 :windowsError
22
+ end
23
+
24
+ def closeDomain()
25
+ if !@domainHandle.nil?
26
+ samrCloseHandleReq = SamrCloseHandleReq.new(handle:@domainHandle)
27
+ samrCloseHandleRes = @file.ioctl_send_recv(samrCloseHandleReq).buffer
28
+ samrCloseHandleRes.raise_not_error_success("closeDomain")
29
+ samrCloseHandleRes = SamrCloseHandleRes.read(samrCloseHandleRes)
30
+ @domainHandle = nil
31
+ end
32
+ end
33
+
34
+ def closeServer()
35
+ if !@serverHandle.nil?
36
+ samrCloseHandleReq = SamrCloseHandleReq.new(handle:@serverHandle)
37
+ samrCloseHandleRes = @file.ioctl_send_recv(samrCloseHandleReq).buffer
38
+ samrCloseHandleRes.raise_not_error_success("closeServer")
39
+ samrCloseHandleRes = SamrCloseHandleRes.read(samrCloseHandleRes)
40
+ @serverHandle = nil
41
+ end
42
+ end
43
+
44
+ def close()
45
+ closeDomain()
46
+ closeServer()
47
+ super
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,46 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrConnectReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ uint32 :ref_id_unc, :value => 1
8
+ conformantandVaryingStrings :serverName
9
+ uint32 :desiredAccess
10
+ uint32 :inVersion, :value => 1
11
+ uint32 :switch, :value => :inVersion #only version available, may as well use normal SamrConnect
12
+ uint32 :revision, :value => 3
13
+ uint32 :supportedFeatures
14
+
15
+ def initialize_instance
16
+ super
17
+ serverName.str = "\\\\#{get_parameter(:srvName)}\x00".bytes.pack("v*")
18
+ desiredAccess.value = get_parameter(:access)
19
+ request.pduHead.frag_length = self.num_bytes
20
+ request.opnum.value = 64 #SamrConnect5
21
+ end
22
+ end
23
+
24
+ class SamrConnectRes < BinData::Record
25
+ endian :little
26
+ request :request
27
+ uint32 :outVersion
28
+ uint32 :switch
29
+ uint32 :revision
30
+ uint32 :supportedFeatures
31
+ string :serverHandle, :length => 20
32
+ uint32 :windowsError
33
+ end
34
+
35
+ def connect5(serverName:@ip, desiredAccess:SAMR_COMMON_ACCESS_MASK["MAXIMUM_ALLOWED"])
36
+ samrConnectReq = SamrConnectReq.new(:srvName=> serverName, access:desiredAccess)
37
+ samrConnectRes = @file.ioctl_send_recv(samrConnectReq).buffer
38
+ samrConnectRes.raise_not_error_success("SamConnect")
39
+ samrConnectRes = SamrConnectRes.read(samrConnectRes)
40
+ @serverHandle = samrConnectRes.serverHandle
41
+ return self
42
+ end
43
+
44
+ end
45
+ end
46
+
@@ -0,0 +1,114 @@
1
+ SAMR_SERVER_ACCESS_MASK = {
2
+ "SAM_SERVER_CONNECT" => 0x00000001,
3
+ "SAM_SERVER_SHUTDOWN" => 0x00000002,
4
+ "SAM_SERVER_INITIALIZE" => 0x00000004,
5
+ "SAM_SERVER_CREATE_DOMAIN" => 0x00000008,
6
+ "SAM_SERVER_ENUMERATE_DOMAINS" => 0x00000010,
7
+ "SAM_SERVER_LOOKUP_DOMAIN" => 0x00000020,
8
+ "SAM_SERVER_ALL_ACCESS" => 0x000F003F,
9
+ "SAM_SERVER_READ" => 0x00020010,
10
+ "SAM_SERVER_WRITE" => 0x0002000E,
11
+ "SAM_SERVER_EXECUTE" => 0x00020021
12
+ }
13
+
14
+ #https://msdn.microsoft.com/en-us/library/cc230294.aspx
15
+ SAMR_COMMON_ACCESS_MASK = {
16
+ "GENERIC_READ" => 0x80000000,
17
+ "GENERIC_WRITE" => 0x4000000,
18
+ "GENERIC_EXECUTE" => 0x20000000,
19
+ "GENERIC_ALL" => 0x10000000,
20
+ "SYNCHRONIZE" => 0x00100000,
21
+ "DELETE" => 0x00010000,
22
+ "READ_CONTROL" => 0x00020000,
23
+ "WRITE_DAC" => 0x00040000,
24
+ "WRITE_OWNER" => 0x00080000,
25
+ "ACCESS_SYSTEM_SECURITY" => 0x01000000,
26
+ "MAXIMUM_ALLOWED" => 0x02000000
27
+ }
28
+
29
+ SAMR_USER_ACCOUNT = {
30
+ "USER_ACCOUNT_DISABLED" => 0x00000001, #account is not enabled for authentication.
31
+ "USER_HOME_DIRECTORY_REQUIRED" => 0x00000002, #homeDirectory attribute is required.
32
+ "USER_PASSWORD_NOT_REQUIRED" => 0x00000004, #password-length policy does not apply to this user.
33
+ "USER_TEMP_DUPLICATE_ACCOUNT" => 0x00000008, #This bit is ignored by clients and servers.
34
+ "USER_NORMAL_ACCOUNT" => 0x00000010, #user is not a computer object
35
+ "USER_MNS_LOGON_ACCOUNT" => 0x00000020, #This bit is ignored by clients and servers
36
+ "USER_INTERDOMAIN_TRUST_ACCOUNT" => 0x00000040, #object represents a trust object.
37
+ "USER_WORKSTATION_TRUST_ACCOUNT" => 0x00000080, #object is a member workstation or server.
38
+ "USER_SERVER_TRUST_ACCOUNT" => 0x00000100, #object is a DC
39
+ "USER_DONT_EXPIRE_PASSWORD" => 0x00000200, #maximum-password-age policy does not apply to this user.
40
+ "USER_ACCOUNT_AUTO_LOCKED" => 0x00000400, #account has been locked out
41
+ "USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED" => 0x00000800, #cleartext password is to be persisted
42
+ "USER_SMARTCARD_REQUIRED" => 0x00001000, #user can authenticate only with a smart card
43
+ "USER_TRUSTED_FOR_DELEGATION" => 0x00002000, #used by the Kerberos protocol, "OK as Delegate" ticket flag is to be set
44
+ "USER_NOT_DELEGATED" => 0x00004000, #used by the Kerberos protocol. TGTs and service tickets obtained by this account
45
+ #are not marked as forwardable or proxiable
46
+ "USER_USE_DES_KEY_ONLY" => 0x00008000, #used by the Kerberos protocol. only des-cbc-md5 or des-cbc-crc keys
47
+ "USER_DONT_REQUIRE_PREAUTH" => 0x00010000, #used by the Kerberos protocol. the account is not required pre-authentication data
48
+ "USER_PASSWORD_EXPIRED" => 0x00020000, #password age on the user has exceeded the maximum password age policy
49
+ "USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION" => 0x00040000, #used by the Kerberos protocol, in [MS-KILE] section 3.3.1.1.
50
+ "USER_NO_AUTH_DATA_REQUIRED" => 0x00080000, #used by the Kerberos protocol. when the KDC is issuing a service ticket
51
+ #the privilege attribute certificate (PAC) is not to be included
52
+ "USER_PARTIAL_SECRETS_ACCOUNT" => 0x00100000, #Specifies that the object is a read-only domain controller (RODC).
53
+ "USER_USE_AES_KEYS" => 0x00200000 #This bit is ignored by clients and servers.
54
+ }
55
+
56
+ #https://msdn.microsoft.com/en-us/library/cc245770.aspx
57
+ SAMR_CREATE_USER_ACCOUNT = {
58
+ "USER_NORMAL_ACCOUNT" => 0x00000010, #user is not a computer object
59
+ "USER_WORKSTATION_TRUST_ACCOUNT" => 0x00000080, #object is a member workstation or server.
60
+ "USER_SERVER_TRUST_ACCOUNT" => 0x00000100 #object is a DC
61
+ }
62
+
63
+ #https://msdn.microsoft.com/en-us/library/cc245525.aspx
64
+
65
+ SAMR_USER_ACCESS_MASK = {
66
+ "USER_READ_GENERAL" => 0x00000001,
67
+ "USER_READ_PREFERENCES" => 0x00000002,
68
+ "USER_WRITE_PREFERENCES" => 0x00000004,
69
+ "USER_READ_LOGON" => 0x00000008,
70
+ "USER_READ_ACCOUNT" => 0x00000010,
71
+ "USER_WRITE_ACCOUNT" => 0x00000020,
72
+ "USER_CHANGE_PASSWORD" => 0x00000040,
73
+ "USER_FORCE_PASSWORD_CHANGE" => 0x00000080,
74
+ "USER_LIST_GROUPS" => 0x00000100,
75
+ "USER_READ_GROUP_INFORMATION" => 0x00000200,
76
+ "USER_WRITE_GROUP_INFORMATION" => 0x00000400,
77
+ "USER_ALL_ACCESS" => 0x000F07FF,
78
+ "USER_READ" => 0x0002031A,
79
+ "USER_WRITE" => 0x00020044,
80
+ "USER_EXECUTE" => 0x00020041
81
+ }
82
+
83
+ SAMR_GROUP_ACCESS_MASK = {
84
+ "GROUP_READ_INFORMATION" => 0x00000001,
85
+ "GROUP_WRITE_ACCOUNT" => 0x00000002,
86
+ "GROUP_ADD_MEMBER" => 0x00000004,
87
+ "GROUP_REMOVE_MEMBER" => 0x00000008,
88
+ "GROUP_LIST_MEMBERS" => 0x00000010,
89
+ "GROUP_ALL_ACCESS" => 0x000F001F,
90
+ "GROUP_READ" => 0x00020010,
91
+ "GROUP_WRITE" => 0x0002000E,
92
+ "GROUP_EXECUTE" => 0x00020001
93
+ }
94
+ SAMR_ALIAS_ACCESS_MASK = {
95
+ "ALIAS_ADD_MEMBER" => 0x00000001,
96
+ "ALIAS_REMOVE_MEMBER" => 0x00000002,
97
+ "ALIAS_LIST_MEMBERS" => 0x00000004,
98
+ "ALIAS_READ_INFORMATION" => 0x00000008,
99
+ "ALIAS_WRITE_ACCOUNT" => 0x00000010,
100
+ "ALIAS_ALL_ACCESS" => 0x000F001F,
101
+ "ALIAS_READ" => 0x00020004,
102
+ "ALIAS_WRITE" => 0x00020013,
103
+ "ALIAS_EXECUTE" => 0x00020008
104
+ }
105
+ SAMR_ENUM_USER_INFORMATION_CLASS = {
106
+ "UserAccountInformation" => 5,
107
+ "UserInternal1Information" => 18
108
+ }
109
+
110
+ SAMR_SE_GROUP_ATTRIBUTES = {
111
+ "SE_GROUP_MANDATORY" => 0x00000001,
112
+ "SE_GROUP_ENABLED_BY_DEFAULT" => 0x00000002,
113
+ "SE_GROUP_ENABLED" => 0x00000004
114
+ }
@@ -0,0 +1,45 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrCreateAliasInDomainReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ string :domainHandle, :length => 20
8
+ rpc_unicode_string :accountName #declared in lsarpc/lsaQueryInformationPolicy.rb
9
+ conformantandVaryingStrings :accountNameNdr
10
+ uint32 :desiredAccess
11
+
12
+ def initialize_instance
13
+ super
14
+ domainHandle.value = get_parameter(:handle)
15
+ accountNameNdr.str = get_parameter(:aliasName).bytes.pack("v*")
16
+ numBytes = accountNameNdr.actual_count * 2
17
+ accountName.len.value = numBytes
18
+ accountName.maximumLength.value = numBytes
19
+ desiredAccess.value = get_parameter(:access)
20
+
21
+ request.pduHead.frag_length = self.num_bytes
22
+ request.opnum.value = 14 #SamrCreateAliasInDomain
23
+ end
24
+ end
25
+
26
+ class SamrCreateAliasInDomainRes < BinData::Record
27
+ endian :little
28
+ request :request
29
+ string :aliasHandle, :length => 20
30
+ uint32 :relativeId
31
+ uint32 :windowsError
32
+ end
33
+
34
+ def createAliasInDomain(name:, desiredAccess:SAMR_ALIAS_ACCESS_MASK["ALIAS_ALL_ACCESS"])
35
+ samrCreateAliasInDomainReq = SamrCreateAliasInDomainReq.new(aliasName:name, access:desiredAccess, handle:@domainHandle)
36
+ samrCreateAliasInDomainRes = @file.ioctl_send_recv(samrCreateAliasInDomainReq).buffer
37
+ samrCreateAliasInDomainRes.raise_not_error_success("createAliasInDomain")
38
+ samrCreateAliasInDomainRes = SamrCreateAliasInDomainRes.read(samrCreateAliasInDomainRes)
39
+ @aliasHandle = samrCreateAliasInDomainRes.aliasHandle
40
+ return self
41
+ end
42
+
43
+ end
44
+ end
45
+
@@ -0,0 +1,46 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrCreateGroupInDomainReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ string :domainHandle, :length => 20
8
+ rpc_unicode_string :name #declared in lsarpc/lsaQueryInformationPolicy.rb
9
+ conformantandVaryingStrings :nameNdr
10
+ uint32 :desiredAccess
11
+
12
+ def initialize_instance
13
+ super
14
+ domainHandle.value = get_parameter(:handle)
15
+ nameNdr.str = get_parameter(:groupName).bytes.pack("v*")
16
+ numBytes = nameNdr.actual_count * 2
17
+ name.len.value = numBytes
18
+ name.maximumLength.value = numBytes
19
+ desiredAccess.value = get_parameter(:access)
20
+
21
+ request.pduHead.frag_length = self.num_bytes
22
+ request.opnum.value = 10 #SamrCreateGroupInDomain
23
+ end
24
+ end
25
+
26
+ class SamrCreateGroupInDomainRes < BinData::Record
27
+ endian :little
28
+ request :request
29
+ string :groupHandle, :length => 20
30
+ uint32 :relativeId
31
+ uint32 :windowsError
32
+ end
33
+
34
+ def createGroupInDomain(name:, desiredAccess:SAMR_GROUP_ACCESS_MASK["GROUP_ALL_ACCESS"])
35
+ samrCreateGroupInDomainReq = SamrCreateGroupInDomainReq.new(groupName:name, access:desiredAccess, handle:@domainHandle)
36
+
37
+ samrCreateGroupInDomainRes = @file.ioctl_send_recv(samrCreateGroupInDomainReq).buffer
38
+ samrCreateGroupInDomainRes.raise_not_error_success("createGroupInDomainRes")
39
+ samrCreateGroupInDomainRes = SamrCreateGroupInDomainRes.read(samrCreateGroupInDomainRes)
40
+ @groupHandle = samrCreateGroupInDomainRes.groupHandle
41
+ return self
42
+ end
43
+
44
+ end
45
+ end
46
+
@@ -0,0 +1,48 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrCreateUser2InDomainReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ string :domainHandle, :length => 20
8
+ rpc_unicode_string :name #declared in lsarpc/lsaQueryInformationPolicy.rb
9
+ conformantandVaryingStrings :nameNdr
10
+ uint32 :accountType
11
+ uint32 :desiredAccess
12
+
13
+ def initialize_instance
14
+ super
15
+ domainHandle.value = get_parameter(:handle)
16
+ nameNdr.str = get_parameter(:accName).bytes.pack("v*")
17
+ numBytes = nameNdr.actual_count * 2
18
+ name.len.value = numBytes
19
+ name.maximumLength.value = numBytes
20
+ accountType.value = get_parameter(:accType)
21
+ desiredAccess.value = get_parameter(:access)
22
+ request.pduHead.frag_length = self.num_bytes
23
+ request.opnum.value = 50 #SamrCreateUser2InDomain
24
+ end
25
+ end
26
+
27
+ class SamrCreateUser2InDomainRes < BinData::Record
28
+ endian :little
29
+ request :request
30
+ string :userHandle, :length => 20
31
+ uint32 :grantedAccess
32
+ uint32 :relativeId
33
+ uint32 :windowsError
34
+ end
35
+
36
+ def createUserInDomain(name:, accountType:SAMR_CREATE_USER_ACCOUNT["USER_NORMAL_ACCOUNT"],
37
+ desiredAccess:SAMR_USER_ACCESS_MASK["USER_ALL_ACCESS"])
38
+ samrCreateUser2InDomainReq = SamrCreateUser2InDomainReq.new(accName:name, accType:accountType, access:desiredAccess, handle:@domainHandle)
39
+ samrCreateUser2InDomainRes = @file.ioctl_send_recv(samrCreateUser2InDomainReq).buffer
40
+ samrCreateUser2InDomainRes.raise_not_error_success("createUserInDomain")
41
+ samrCreateUser2InDomainRes = SamrCreateUser2InDomainRes.read(samrCreateUser2InDomainRes)
42
+ @userHandle = samrCreateUser2InDomainRes.userHandle
43
+ return self
44
+ end
45
+
46
+ end
47
+ end
48
+
@@ -0,0 +1,35 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrDeleteAliasReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ string :aliasHandle, :length => 20
8
+
9
+ def initialize_instance
10
+ super
11
+ aliasHandle.value = get_parameter(:handle)
12
+ request.pduHead.frag_length = self.num_bytes
13
+ request.opnum.value = 30 #SamrDeleteAlias
14
+ end
15
+ end
16
+
17
+ class SamrDeleteAliasRes < BinData::Record
18
+ endian :little
19
+ request :request
20
+ string :aliasHandle, :length => 20
21
+ uint32 :windowsError
22
+ end
23
+
24
+ def deleteAlias
25
+ samrDeleteAliasReq = SamrDeleteAliasReq.new(handle:@aliasHandle)
26
+ samrDeleteAliasRes = @file.ioctl_send_recv(samrDeleteAliasReq).buffer
27
+ samrDeleteAliasRes.raise_not_error_success("deleteAlias")
28
+ samrDeleteAliasRes = SamrDeleteAliasRes.read(samrDeleteAliasRes)
29
+ @aliasHandle = nil
30
+ return 0
31
+ end
32
+
33
+ end
34
+ end
35
+
@@ -0,0 +1,35 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrDeleteGroupReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ string :groupHandle, :length => 20
8
+
9
+ def initialize_instance
10
+ super
11
+ groupHandle.value = get_parameter(:handle)
12
+ request.pduHead.frag_length = self.num_bytes
13
+ request.opnum.value = 23 #SamrDeleteGroup
14
+ end
15
+ end
16
+
17
+ class SamrDeleteGroupRes < BinData::Record
18
+ endian :little
19
+ request :request
20
+ string :groupHandle, :length => 20
21
+ uint32 :windowsError
22
+ end
23
+
24
+ def deleteGroup
25
+ samrDeleteGroupReq = SamrDeleteGroupReq.new(handle:@groupHandle)
26
+ samrDeleteGroupRes = @file.ioctl_send_recv(samrDeleteGroupReq).buffer
27
+ samrDeleteGroupRes.raise_not_error_success("deleteGroup")
28
+ samrDeleteGroupRes = SamrDeleteGroupRes.read(samrDeleteGroupRes)
29
+ @groupHandle = nil
30
+ return 0
31
+ end
32
+
33
+ end
34
+ end
35
+
@@ -0,0 +1,35 @@
1
+ module SmbRpc
2
+ class Samr < Rpc
3
+
4
+ class SamrDeleteUserReq < BinData::Record
5
+ endian :little
6
+ request :request
7
+ string :userHandle, :length => 20
8
+
9
+ def initialize_instance
10
+ super
11
+ userHandle.value = get_parameter(:handle)
12
+ request.pduHead.frag_length = self.num_bytes
13
+ request.opnum.value = 35 #SamrDeleteUser
14
+ end
15
+ end
16
+
17
+ class SamrDeleteUserRes < BinData::Record
18
+ endian :little
19
+ request :request
20
+ string :userHandle, :length => 20
21
+ uint32 :windowsError
22
+ end
23
+
24
+ def deleteUser
25
+ samrDeleteUserReq = SamrDeleteUserReq.new(handle:@userHandle)
26
+ samrDeleteUserRes = @file.ioctl_send_recv(samrDeleteUserReq).buffer
27
+ samrDeleteUserRes.raise_not_error_success("deleteUser")
28
+ samrDeleteUserRes = SamrDeleteUserRes.read(samrDeleteUserRes)
29
+ @userHandle = samrDeleteUserRes.userHandle
30
+ return 0
31
+ end
32
+
33
+ end
34
+ end
35
+