Skip to content

Commit c1a44c8

Browse files
authored
Land rapid7#18359, Forge ticket fix
2 parents ea3b8e9 + 5c93b38 commit c1a44c8

File tree

9 files changed

+164
-47
lines changed

9 files changed

+164
-47
lines changed

lib/msf/core/exploit/remote/kerberos/client/pac.rb

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def build_pa_pac_request(opts = {})
3838
# @option opts [String] :domain_id the domain SID Ex: S-1-5-21-1755879683-3641577184-3486455962
3939
# @option opts [Time] :logon_time
4040
# @option opts[String] :checksum_enc_key Encryption key for calculating the checksum
41+
# @option opts[Boolean] :is_golden Include requestor and pac attributes in the PAC (needed for golden tickets; not for silver)
4142
# @return [Rex::Proto::Kerberos::Pac::Krb5Pac]
4243
# @see Rex::Proto::Kerberos::Pac::Krb5PacLogonInfo
4344
# @see Rex::Proto::Kerberos::Pac::Krb5PacClientInfo
@@ -55,6 +56,7 @@ def build_pac(opts = {})
5556
logon_time = opts[:logon_time] || Time.now
5657
checksum_type = opts[:checksum_type] || Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5
5758
ticket_checksum = opts[:ticket_checksum] || nil
59+
is_golden = opts.fetch(:is_golden) { true }
5860

5961
validation_info = Rex::Proto::Kerberos::Pac::Krb5ValidationInfo.new(
6062
logon_time: logon_time,
@@ -86,6 +88,14 @@ def build_pac(opts = {})
8688
name: user_name
8789
)
8890

91+
if is_golden
92+
pac_requestor = Rex::Proto::Kerberos::Pac::Krb5PacRequestor.new(
93+
user_sid: "#{domain_id}-#{user_id}"
94+
)
95+
96+
pac_attributes = Rex::Proto::Kerberos::Pac::Krb5PacAttributes.new
97+
end
98+
8999
server_checksum = Rex::Proto::Kerberos::Pac::Krb5PacServerChecksum.new(
90100
signature_type: checksum_type
91101
)
@@ -96,10 +106,20 @@ def build_pac(opts = {})
96106

97107
pac_elements = [
98108
logon_info,
99-
client_info,
100-
server_checksum,
101-
priv_srv_checksum
109+
client_info
102110
]
111+
112+
if is_golden
113+
# These PAC elements are required for golden tickets in post-October 2022 systems
114+
pac_elements.append(
115+
pac_requestor,
116+
pac_attributes)
117+
end
118+
119+
pac_elements.append(
120+
server_checksum,
121+
priv_srv_checksum
122+
)
103123
pac_elements << ticket_checksum unless ticket_checksum.nil?
104124

105125
pac_type = Rex::Proto::Kerberos::Pac::Krb5Pac.new

lib/msf/core/exploit/remote/kerberos/ticket.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module Ticket
1212
# @param [Array<String>] extra_sids An array of extra sids, Ex: `['S-1-5-etc-etc-519']`
1313
def forge_ticket(enc_key:, enc_type:, start_time:, end_time:, sname:, flags:,
1414
domain:, username:, user_id: Rex::Proto::Kerberos::Pac::DEFAULT_ADMIN_RID,
15-
domain_sid:, extra_sids: [], session_key: nil, ticket_checksum: false)
15+
domain_sid:, extra_sids: [], session_key: nil, ticket_checksum: false, is_golden: true)
1616
sname_principal = create_principal(sname)
1717
cname_principal = create_principal(username)
1818
group_ids = [
@@ -57,7 +57,8 @@ def forge_ticket(enc_key:, enc_type:, start_time:, end_time:, sname:, flags:,
5757
domain_id: domain_sid,
5858
extra_sids: extra_sids,
5959
flags: flags,
60-
create_ticket_checksum: ticket_checksum
60+
create_ticket_checksum: ticket_checksum,
61+
is_golden: is_golden
6162
}
6263

6364
ticket_enc_part = create_enc_ticket_part(opts: opts)

lib/rex/proto/kerberos/credential_cache/krb5_ccache_presenter.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,23 @@ def present_upn_and_dns_information(upn_and_dns_info)
324324
output.join("\n")
325325
end
326326

327+
def present_pac_requestor(pac_requestor)
328+
output = []
329+
output << 'Pac Requestor:'
330+
output << "SID: #{pac_requestor.user_sid}".indent(2)
331+
output.join("\n")
332+
end
333+
334+
def present_pac_attributes(pac_attributes)
335+
output = []
336+
output << 'Pac Attributes:'
337+
output << "Flag length: #{pac_attributes.flags_length}".indent(2)
338+
output << "Flags: #{pac_attributes.flags}".indent(2)
339+
attribute_attributes = Rex::Proto::Kerberos::Pac::PacAttributesFlags.read([pac_attributes.flags].pack('N'))
340+
output << print_bin_data_model(attribute_attributes, bit_length: 32).to_s.indent(4)
341+
output.join("\n")
342+
end
343+
327344
# @param [Rex::Proto::Kerberos::Pac::Krb5PacInfoBuffer] info_buffer
328345
# @return [String] A human readable representation of a Pac Info Buffer
329346
def present_pac_info_buffer(info_buffer)
@@ -340,6 +357,10 @@ def present_pac_info_buffer(info_buffer)
340357
present_priv_server_checksum(pac_element)
341358
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::USER_PRINCIPAL_NAME_AND_DNS_INFORMATION
342359
present_upn_and_dns_information(pac_element)
360+
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::PAC_REQUESTOR
361+
present_pac_requestor(pac_element)
362+
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::PAC_ATTRIBUTES
363+
present_pac_attributes(pac_element)
343364
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::TICKET_CHECKSUM
344365
present_ticket_checksum(pac_element)
345366
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::FULL_PAC_CHECKSUM

lib/rex/proto/kerberos/pac.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ module Pac
2020
# XXX: Does not include some of the newer SE_GROUP_* flags
2121
SE_GROUP_ALL = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED
2222

23+
PAC_WAS_GIVEN_IMPLICITLY = 0x00000001
24+
2325
USER_NORMAL_ACCOUNT = 0x00000010
2426
USER_DONT_EXPIRE_PASSWORD = 0x00000200
2527
PAC_LOGON_INFO = 1

lib/rex/proto/kerberos/pac/krb5_pac.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,50 @@ class Krb5ClientInfo < BinData::Record
286286
string16 :name, read_length: :name_length
287287
end
288288

289+
# https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/c34adc61-80e1-4920-8923-22ef5054c4b2
290+
class Krb5PacRequestor < BinData::Record
291+
endian :little
292+
# @!attribute [r] ul_type
293+
# @return [Integer] Describes the type of data present in the buffer
294+
virtual :ul_type, value: Krb5PacElementType::PAC_REQUESTOR
295+
296+
# @!attribute [rw] user_sid
297+
# @return [RPC_SID] SID of the requesting user
298+
ms_dtyp_sid :user_sid
299+
end
300+
301+
# https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/1c7aeadb-8ca4-4050-ae98-0e9834bdd81d
302+
class Krb5PacAttributes < BinData::Record
303+
endian :little
304+
# @!attribute [r] ul_type
305+
# @return [Integer] Describes the type of data present in the buffer
306+
virtual :ul_type, value: Krb5PacElementType::PAC_ATTRIBUTES
307+
308+
# @!attribute [rw] flags_length
309+
# @return [Integer] Length of the flags field, in bits
310+
uint32 :flags_length, initial_value: 2
311+
312+
# @!attribute [rw] flags
313+
# @return [Integer] Attribute flags
314+
uint32 :flags, initial_value: PAC_WAS_GIVEN_IMPLICITLY
315+
end
316+
317+
class PacAttributesFlags < BinData::Record
318+
endian :big
319+
320+
30.times do
321+
bit1 :"_reserved_#{self.fields.length}"
322+
end
323+
324+
# @!attribute [rw] pac_was_requested
325+
# @return [BinData::Bit1] The client requested the PAC
326+
bit1 :pac_was_requested
327+
328+
# @!attribute [rw] pac_was_given_implicitly
329+
# @return [BinData::Bit1] The client did not request or decline a PAC and was given one implicitly
330+
bit1 :pac_was_given_implicitly
331+
end
332+
289333
class Krb5SignatureType < BinData::Uint32le
290334
# @param [Integer] val The checksum value
291335
# @see Rex::Proto::Kerberos::Crypto::Checksum
@@ -777,6 +821,8 @@ class Krb5PacElement < BinData::Choice
777821
krb5_full_pac_checksum Krb5PacElementType::FULL_PAC_CHECKSUM
778822
krb5_pac_credential_info Krb5PacElementType::CREDENTIAL_INFORMATION, data_length: :data_length
779823
krb5_upn_dns_info Krb5PacElementType::USER_PRINCIPAL_NAME_AND_DNS_INFORMATION
824+
krb5_pac_requestor Krb5PacElementType::PAC_REQUESTOR
825+
krb5_pac_attributes Krb5PacElementType::PAC_ATTRIBUTES
780826
unknown_pac_element :default, data_length: :data_length, selection: :selection
781827
end
782828

modules/auxiliary/admin/kerberos/forge_ticket.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def run
7878

7979
private
8080

81-
def forge_ccache(sname:, flags:)
81+
def forge_ccache(sname:, flags:, is_golden:)
8282
enc_key, enc_type = get_enc_key_and_type
8383

8484
start_time = Time.now.utc
@@ -97,7 +97,8 @@ def forge_ccache(sname:, flags:)
9797
domain_sid: datastore['DOMAIN_SID'],
9898
extra_sids: extra_sids,
9999
session_key: datastore['SessionKey'].blank? ? nil : datastore['SessionKey'].strip,
100-
ticket_checksum: datastore['IncludeTicketChecksum']
100+
ticket_checksum: datastore['IncludeTicketChecksum'],
101+
is_golden: is_golden
101102
)
102103

103104
Msf::Exploit::Remote::Kerberos::Ticket::Storage.store_ccache(ccache, framework_module: self)
@@ -113,15 +114,15 @@ def forge_silver
113114
validate_key!
114115
sname = datastore['SPN'].split('/', 2)
115116
flags = Rex::Proto::Kerberos::Model::TicketFlags.from_flags(silver_ticket_flags)
116-
forge_ccache(sname: sname, flags: flags)
117+
forge_ccache(sname: sname, flags: flags, is_golden: false)
117118
end
118119

119120
def forge_golden
120121
validate_sid!
121122
validate_key!
122123
sname = ['krbtgt', datastore['DOMAIN'].upcase]
123124
flags = Rex::Proto::Kerberos::Model::TicketFlags.from_flags(golden_ticket_flags)
124-
forge_ccache(sname: sname, flags: flags)
125+
forge_ccache(sname: sname, flags: flags, is_golden: true)
125126
end
126127

127128
def get_enc_key_and_type

spec/lib/msf/core/exploit/remote/kerberos/client/pac_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
it "creates a PAC-TYPE with default checksum type" do
3333
pac = subject.build_pac
34-
expect(pac.pac_info_buffers[3].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5)
34+
expect(pac.pac_info_buffers[5].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5)
3535
end
3636

3737
it "creates a PAC-TYPE with default data in buffers" do
@@ -47,7 +47,7 @@
4747

4848
it "creates a PAC-TYPE with provided checksum type" do
4949
pac = subject.build_pac(pac_opts)
50-
expect(pac.pac_info_buffers[3].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5)
50+
expect(pac.pac_info_buffers[5].buffer.pac_element.signature_type).to eq(Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5)
5151
end
5252

5353
it "creates a PAC-TYPE with provided data in buffers" do

spec/lib/msf/core/exploit/remote/kerberos/ticket_spec.rb

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,13 @@
172172
let(:create_ticket_checksum) { false }
173173
let(:session_key) { nil }
174174
let(:pac_type) do
175-
"\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
176-
"\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
177-
"\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
178-
"\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
179-
"\x38\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
175+
"\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
176+
"\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
177+
"\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
178+
"\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
179+
"\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
180+
"\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
181+
"\x80\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
180182
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
181183
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
182184
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
@@ -206,9 +208,12 @@
206208
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
207209
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
208210
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
209-
"\x76\xff\xff\xff\xe3\x66\x46\xb2\x9b\xf0\x22\xa5\xd5\x82\x19\x0b" \
210-
"\x9c\x59\x9c\xd2\x00\x00\x00\x00\x76\xff\xff\xff\x7b\xe9\xe6\x68" \
211-
"\xc4\x78\x95\x24\xf1\x76\xa0\xf6\x94\x5f\xec\x6d\x00\x00\x00\x00"
211+
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
212+
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
213+
"\x02\x00\x00\x00\x01\x00\x00\x00\x76\xff\xff\xff\x7d\xc5\xca\xfe" \
214+
"\x2e\xa0\x7d\xa2\x58\xce\x80\xfb\xf8\x59\x49\xd4\x00\x00\x00\x00" \
215+
"\x76\xff\xff\xff\x93\xf8\x1c\xd8\x40\x44\xe5\x9c\xb6\xa4\x32\x89" \
216+
"\x57\x06\xed\x28\x00\x00\x00\x00"
212217
end
213218
it_behaves_like 'ticket'
214219
end
@@ -221,11 +226,13 @@
221226
let(:create_ticket_checksum) { false }
222227
let(:session_key) { nil }
223228
let(:pac_type) do
224-
"\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
225-
"\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
226-
"\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
227-
"\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
228-
"\x30\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
229+
"\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
230+
"\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
231+
"\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
232+
"\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
233+
"\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
234+
"\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
235+
"\x78\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
229236
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
230237
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
231238
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
@@ -255,8 +262,11 @@
255262
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
256263
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
257264
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
258-
"\x0f\x00\x00\x00\x0f\x49\x9f\xd3\xeb\x9d\xfc\x5b\x86\x25\x72\xe3" \
259-
"\x0f\x00\x00\x00\x26\x37\x7a\x68\xa4\x72\xac\x01\x62\x9f\xa9\xbf"
265+
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
266+
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
267+
"\x02\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00\xab\xf1\x31\xb6" \
268+
"\x87\x35\xf2\xce\x2e\xc7\x84\xc8\x0f\x00\x00\x00\x0e\x69\xae\x48" \
269+
"\x7c\x3b\x8b\xbe\xbe\x08\x88\x3d"
260270
end
261271
it_behaves_like 'ticket'
262272
end
@@ -269,11 +279,13 @@
269279
let(:create_ticket_checksum) { false }
270280
let(:session_key) { nil }
271281
let(:pac_type) do
272-
"\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
273-
"\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
274-
"\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
275-
"\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
276-
"\x30\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
282+
"\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
283+
"\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
284+
"\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
285+
"\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
286+
"\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
287+
"\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
288+
"\x78\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
277289
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
278290
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
279291
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
@@ -303,8 +315,11 @@
303315
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
304316
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
305317
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
306-
"\x10\x00\x00\x00\x92\x88\x0a\x6e\x0b\xa1\x64\xb9\xfe\x1b\xde\x8d" \
307-
"\x10\x00\x00\x00\x01\x21\x93\xa3\x32\x80\xe3\x90\x9c\x78\x70\x9f"
318+
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
319+
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
320+
"\x02\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x99\x45\x39\x47" \
321+
"\x17\x85\xf7\x6f\x20\x8b\x78\x52\x10\x00\x00\x00\x8c\xce\x2d\x98" \
322+
"\xda\x1f\x71\x51\x42\x16\x0d\x97"
308323
end
309324
it_behaves_like 'ticket'
310325
end
@@ -319,12 +334,14 @@
319334
let(:ticket_checksum_sig) { "\xb0\x90\x67\x70\xea\xf4\x9b\x43\x39\x30\x96\x70\x14\x40\xb2\x24" }
320335

321336
let(:pac_type) do
322-
"\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
323-
"\x58\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
324-
"\x10\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
325-
"\x30\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
326-
"\x48\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x14\x00\x00\x00" \
327-
"\x60\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
337+
"\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
338+
"\x78\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
339+
"\x30\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
340+
"\x50\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
341+
"\x70\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
342+
"\x78\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
343+
"\x90\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x14\x00\x00\x00" \
344+
"\xa8\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
328345
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
329346
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
330347
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
@@ -354,11 +371,13 @@
354371
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
355372
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
356373
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
357-
"\x76\xff\xff\xff\x17\x0a\x13\xd5\xd0\x9d\x70\x7c\xf5\x6c\xb5\xae" \
358-
"\xe4\x31\xae\x65\x00\x00\x00\x00\x76\xff\xff\xff\xb1\x93\x5e\xb2" \
359-
"\xf0\x91\x4f\x10\xb6\x8d\xc7\xe4\x9d\xa4\x32\x13\x00\x00\x00\x00" \
360-
"\x76\xff\xff\xff\xb0\x90\x67\x70\xea\xf4\x9b\x43\x39\x30\x96\x70" \
361-
"\x14\x40\xb2\x24\x00\x00\x00\x00"
374+
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
375+
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
376+
"\x02\x00\x00\x00\x01\x00\x00\x00\x76\xff\xff\xff\x3a\xa0\x8f\xb0" \
377+
"\x6d\x3e\x90\xc0\xd1\xd3\x2d\xdf\xd3\x42\xa9\x16\x00\x00\x00\x00" \
378+
"\x76\xff\xff\xff\x80\x77\x5b\x5d\x07\x80\x22\xab\x65\x01\x67\xd1" \
379+
"\x66\xed\x9d\x80\x00\x00\x00\x00\x76\xff\xff\xff\xb0\x90\x67\x70" \
380+
"\xea\xf4\x9b\x43\x39\x30\x96\x70\x14\x40\xb2\x24\x00\x00\x00\x00"
362381
end
363382

364383
it_behaves_like 'ticket'

0 commit comments

Comments
 (0)