@@ -44,14 +44,24 @@ def initialize(info = {})
44
44
register_options (
45
45
[
46
46
OptString . new ( 'USER' , [ true , 'The Domain User' ] ) ,
47
- OptInt . new ( 'USER_SID' , [ true , 'The Domain User SID, Ex: 1000' ] ) ,
48
47
OptString . new ( 'PASSWORD' , [ true , 'The Domain User password' ] ) ,
49
48
OptString . new ( 'DOMAIN' , [ true , 'The Domain Ex: DEMO.LOCAL' ] ) ,
50
- OptString . new ( 'DOMAIN_SID ' , [ true , 'The Domain SID Ex: S-1-5-21-1755879683-3641577184-3486455962' ] )
49
+ OptString . new ( 'USER_SID ' , [ true , 'The Domain User SID, Ex: S-1-5-21-1755879683-3641577184-3486455962-1000' ] )
51
50
] , self . class )
52
51
end
53
52
54
53
def run
54
+ print_status ( "Validating options..." )
55
+
56
+ unless datastore [ 'USER_SID' ] =~ /^S-(\d +-){6}\d +$/
57
+ print_error ( "Invalid USER_SID. Ex: S-1-5-21-1755879683-3641577184-3486455962-1000" )
58
+ return
59
+ end
60
+
61
+ user_sid_arr = datastore [ 'USER_SID' ] . split ( '-' )
62
+ domain_sid = user_sid_arr [ 0 , user_sid_arr . length - 1 ] . join ( '-' )
63
+ user_rid = user_sid_arr [ user_sid_arr . length - 1 ] . to_i
64
+
55
65
print_status ( "#{ peer } - Connecting with the KDC..." )
56
66
connect
57
67
@@ -97,8 +107,8 @@ def run
97
107
pac = build_pac (
98
108
client_name : datastore [ 'USER' ] ,
99
109
group_ids : groups ,
100
- domain_id : datastore [ 'DOMAIN_SID' ] ,
101
- user_id : datastore [ 'USER_SID' ] ,
110
+ domain_id : domain_sid ,
111
+ user_id : user_rid ,
102
112
realm : datastore [ 'DOMAIN' ] ,
103
113
logon_time : logon_time ,
104
114
checksum_type : Rex ::Proto ::Kerberos ::Crypto ::RSA_MD5
0 commit comments