ruby_smb 3.2.0 → 3.2.1
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 +4 -6
- data/lib/ruby_smb/client.rb +6 -4
- data/lib/ruby_smb/dcerpc/client.rb +6 -4
- data/lib/ruby_smb/dcerpc/icpr.rb +1 -1
- data/lib/ruby_smb/dcerpc/ndr.rb +30 -3
- data/lib/ruby_smb/dcerpc/samr.rb +1 -1
- data/lib/ruby_smb/gss/provider/ntlm.rb +12 -5
- data/lib/ruby_smb/ntlm/client.rb +4 -0
- data/lib/ruby_smb/ntlm/custom/ntlm.rb +19 -0
- data/lib/ruby_smb/ntlm.rb +37 -0
- data/lib/ruby_smb/server/server_client/tree_connect.rb +2 -2
- data/lib/ruby_smb/smb1/pipe.rb +4 -0
- data/lib/ruby_smb/smb2/pipe.rb +4 -0
- data/lib/ruby_smb/utils.rb +15 -0
- data/lib/ruby_smb/version.rb +1 -1
- data/lib/ruby_smb.rb +2 -0
- data.tar.gz.sig +0 -0
- metadata +4 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b1e12b49f282f15459e21c5f16c6a6fc0f1074b107b97d85395d75a8531df1c
|
4
|
+
data.tar.gz: bccbfe2ef2823c390974786165e822eaa2fb7d1e1a96e8171daabbe871c6b324
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc4ba500076138ce97e1dc369733675600c4892669d9b5db815b4d09c1dc1b47efd0068da6cb7530fafdcdfc326d00b42b91937e44ed5fe2fdb9b4e5b37ffd9a
|
7
|
+
data.tar.gz: b851e6cc8f2846b7b6f7c36b01b14adb089c5d75257315940a282793bb62cce5bdf1f944c7ca3c95f75464914e26753f4ce1577ac446deea2c42c5a84986f82e
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -33,17 +33,15 @@ jobs:
|
|
33
33
|
fail-fast: true
|
34
34
|
matrix:
|
35
35
|
ruby:
|
36
|
-
- 2.6
|
37
36
|
- 2.7
|
38
37
|
- 3.0
|
39
38
|
- 3.1
|
40
39
|
os:
|
41
|
-
- ubuntu-
|
42
|
-
- ubuntu-
|
40
|
+
- ubuntu-20.04
|
41
|
+
- ubuntu-latest
|
43
42
|
exclude:
|
44
|
-
- { os: ubuntu-
|
45
|
-
- { os: ubuntu-
|
46
|
-
- { os: ubuntu-22.04, ruby: 3.0 }
|
43
|
+
- { os: ubuntu-latest, ruby: 2.7 }
|
44
|
+
- { os: ubuntu-latest, ruby: 3.0 }
|
47
45
|
test_cmd:
|
48
46
|
- bundle exec rspec
|
49
47
|
|
data/lib/ruby_smb/client.rb
CHANGED
@@ -4,6 +4,7 @@ module RubySMB
|
|
4
4
|
class Client
|
5
5
|
require 'ruby_smb/ntlm'
|
6
6
|
require 'ruby_smb/signing'
|
7
|
+
require 'ruby_smb/utils'
|
7
8
|
require 'ruby_smb/client/negotiation'
|
8
9
|
require 'ruby_smb/client/authentication'
|
9
10
|
require 'ruby_smb/client/tree_connect'
|
@@ -13,6 +14,7 @@ module RubySMB
|
|
13
14
|
require 'ruby_smb/client/encryption'
|
14
15
|
|
15
16
|
include RubySMB::Signing
|
17
|
+
include RubySMB::NTLM
|
16
18
|
include RubySMB::Client::Negotiation
|
17
19
|
include RubySMB::Client::Authentication
|
18
20
|
include RubySMB::Client::TreeConnect
|
@@ -322,7 +324,7 @@ module RubySMB
|
|
322
324
|
@pid = rand(0xFFFF)
|
323
325
|
@domain = domain
|
324
326
|
@local_workstation = local_workstation
|
325
|
-
@password =
|
327
|
+
@password = RubySMB::Utils.safe_encode((password||''), 'utf-8')
|
326
328
|
@sequence_counter = 0
|
327
329
|
@session_id = 0x00
|
328
330
|
@session_key = ''
|
@@ -332,7 +334,7 @@ module RubySMB
|
|
332
334
|
@smb1 = smb1
|
333
335
|
@smb2 = smb2
|
334
336
|
@smb3 = smb3
|
335
|
-
@username =
|
337
|
+
@username = RubySMB::Utils.safe_encode((username||''), 'utf-8')
|
336
338
|
@max_buffer_size = MAX_BUFFER_SIZE
|
337
339
|
# These sizes will be modified during negotiation
|
338
340
|
@server_max_buffer_size = SERVER_MAX_BUFFER_SIZE
|
@@ -415,8 +417,8 @@ module RubySMB
|
|
415
417
|
local_workstation: self.local_workstation, ntlm_flags: NTLM::DEFAULT_CLIENT_FLAGS)
|
416
418
|
@domain = domain
|
417
419
|
@local_workstation = local_workstation
|
418
|
-
@password =
|
419
|
-
@username =
|
420
|
+
@password = RubySMB::Utils.safe_encode((pass||''), 'utf-8')
|
421
|
+
@username = RubySMB::Utils.safe_encode((user||''), 'utf-8')
|
420
422
|
|
421
423
|
@ntlm_client = RubySMB::NTLM::Client.new(
|
422
424
|
@username,
|
@@ -5,14 +5,16 @@ module RubySMB
|
|
5
5
|
class Client
|
6
6
|
require 'bindata'
|
7
7
|
require 'windows_error'
|
8
|
-
require '
|
8
|
+
require 'ruby_smb/ntlm'
|
9
9
|
require 'ruby_smb/dcerpc'
|
10
10
|
require 'ruby_smb/gss'
|
11
11
|
require 'ruby_smb/peer_info'
|
12
|
+
require 'ruby_smb/utils'
|
12
13
|
|
13
14
|
include Dcerpc
|
14
15
|
include Epm
|
15
16
|
include PeerInfo
|
17
|
+
include Utils
|
16
18
|
|
17
19
|
# The default maximum size of a RPC message that the Client accepts (in bytes)
|
18
20
|
MAX_BUFFER_SIZE = 64512
|
@@ -118,15 +120,15 @@ module RubySMB
|
|
118
120
|
@read_timeout = read_timeout
|
119
121
|
@domain = domain
|
120
122
|
@local_workstation = local_workstation
|
121
|
-
@username =
|
122
|
-
@password =
|
123
|
+
@username = RubySMB::Utils.safe_encode(username, 'utf-8')
|
124
|
+
@password = RubySMB::Utils.safe_encode(password, 'utf-8')
|
123
125
|
@max_buffer_size = MAX_BUFFER_SIZE
|
124
126
|
@call_id = 1
|
125
127
|
@ctx_id = 0
|
126
128
|
@auth_ctx_id_base = rand(0xFFFFFFFF)
|
127
129
|
|
128
130
|
unless username.empty? && password.empty?
|
129
|
-
@ntlm_client =
|
131
|
+
@ntlm_client = RubySMB::NTLM::Client.new(
|
130
132
|
@username,
|
131
133
|
@password,
|
132
134
|
workstation: @local_workstation,
|
data/lib/ruby_smb/dcerpc/icpr.rb
CHANGED
@@ -35,7 +35,7 @@ module RubySMB
|
|
35
35
|
def cert_server_request(attributes:, authority:, csr:)
|
36
36
|
cert_server_request_request = CertServerRequestRequest.new(
|
37
37
|
pwsz_authority: authority,
|
38
|
-
pctb_attribs: { pb: (attributes.map { |k,v| "#{k}:#{v}" }.join("\n")
|
38
|
+
pctb_attribs: { pb: (RubySMB::Utils.safe_encode(attributes.map { |k,v| "#{k}:#{v}" }.join("\n"), 'UTF-16le').force_encoding('ASCII-8bit') + "\x00\x00".b) },
|
39
39
|
pctb_request: { pb: csr.to_der }
|
40
40
|
)
|
41
41
|
|
data/lib/ruby_smb/dcerpc/ndr.rb
CHANGED
@@ -247,12 +247,22 @@ module RubySMB::Dcerpc::Ndr
|
|
247
247
|
|
248
248
|
def do_read(io)
|
249
249
|
if is_a?(ConfPlugin) && should_process_max_count?
|
250
|
-
|
250
|
+
max_count = io.readbytes(4).unpack1('L<')
|
251
|
+
BinData.trace_message do |tracer|
|
252
|
+
tracer.trace_obj("#{debug_name}.max_count", max_count.to_s)
|
253
|
+
end
|
254
|
+
set_max_count(max_count)
|
251
255
|
end
|
252
256
|
|
253
257
|
if is_a?(VarPlugin)
|
254
258
|
@offset = io.readbytes(4).unpack('L<').first
|
259
|
+
BinData.trace_message do |tracer|
|
260
|
+
tracer.trace_obj("#{debug_name}.offset", @offset.to_s)
|
261
|
+
end
|
255
262
|
@actual_count = @read_until_index = io.readbytes(4).unpack('L<').first
|
263
|
+
BinData.trace_message do |tracer|
|
264
|
+
tracer.trace_obj("#{debug_name}.actual_count", @actual_count.to_s)
|
265
|
+
end
|
256
266
|
end
|
257
267
|
|
258
268
|
if has_elements_to_read?
|
@@ -523,7 +533,11 @@ module RubySMB::Dcerpc::Ndr
|
|
523
533
|
|
524
534
|
def do_read(io)
|
525
535
|
if should_process_max_count?
|
526
|
-
|
536
|
+
max_count = io.readbytes(4).unpack1('L<')
|
537
|
+
BinData.trace_message do |tracer|
|
538
|
+
tracer.trace_obj("#{debug_name}.max_count", max_count.to_s)
|
539
|
+
end
|
540
|
+
set_max_count(max_count)
|
527
541
|
end
|
528
542
|
super
|
529
543
|
end
|
@@ -582,7 +596,13 @@ module RubySMB::Dcerpc::Ndr
|
|
582
596
|
|
583
597
|
def do_read(io)
|
584
598
|
@offset = io.readbytes(4).unpack('L<').first
|
599
|
+
BinData.trace_message do |tracer|
|
600
|
+
tracer.trace_obj("#{debug_name}.offset", @offset.to_s)
|
601
|
+
end
|
585
602
|
@actual_count = io.readbytes(4).unpack('L<').first
|
603
|
+
BinData.trace_message do |tracer|
|
604
|
+
tracer.trace_obj("#{debug_name}.actual_count", @actual_count.to_s)
|
605
|
+
end
|
586
606
|
super if @actual_count > 0
|
587
607
|
end
|
588
608
|
|
@@ -702,7 +722,11 @@ module RubySMB::Dcerpc::Ndr
|
|
702
722
|
|
703
723
|
def do_read(io)
|
704
724
|
if should_process_max_count?
|
705
|
-
|
725
|
+
max_count = io.readbytes(4).unpack1('L<')
|
726
|
+
BinData.trace_message do |tracer|
|
727
|
+
tracer.trace_obj("#{debug_name}.max_count", max_count.to_s)
|
728
|
+
end
|
729
|
+
set_max_count(max_count)
|
706
730
|
|
707
731
|
# Align the structure according to the alignment rules for the structure
|
708
732
|
if respond_to?(:referent_bytes_align)
|
@@ -1034,6 +1058,9 @@ module RubySMB::Dcerpc::Ndr
|
|
1034
1058
|
end
|
1035
1059
|
else
|
1036
1060
|
@ref_id = io.readbytes(4).unpack('L<').first
|
1061
|
+
BinData.trace_message do |tracer|
|
1062
|
+
tracer.trace_obj("#{debug_name}.ref_id", @ref_id.to_s)
|
1063
|
+
end
|
1037
1064
|
parent_obj = nil
|
1038
1065
|
if parent&.is_a?(ConstructedTypePlugin)
|
1039
1066
|
parent_obj = parent.get_top_level_constructed_type
|
data/lib/ruby_smb/dcerpc/samr.rb
CHANGED
@@ -320,7 +320,7 @@ module RubySMB
|
|
320
320
|
|
321
321
|
def self.encrypt_password(password, key)
|
322
322
|
# see: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/5fe3c4c4-e71b-440d-b2fd-8448bfaf6e04
|
323
|
-
password =
|
323
|
+
password = RubySMB::Utils.safe_encode(password, 'UTF-16LE').force_encoding('ASCII-8bit')
|
324
324
|
buffer = password.rjust(512, "\x00") + [ password.length ].pack('V')
|
325
325
|
salt = SecureRandom.random_bytes(16)
|
326
326
|
key = OpenSSL::Digest::MD5.new(salt + key).digest
|
@@ -18,6 +18,7 @@ module RubySMB
|
|
18
18
|
end
|
19
19
|
|
20
20
|
class Authenticator < Authenticator::Base
|
21
|
+
|
21
22
|
def reset!
|
22
23
|
super
|
23
24
|
@server_challenge = nil
|
@@ -141,7 +142,10 @@ module RubySMB
|
|
141
142
|
case type3_msg.ntlm_version
|
142
143
|
when :ntlmv1
|
143
144
|
my_ntlm_response = Net::NTLM::ntlm_response(
|
144
|
-
ntlm_hash: Net::NTLM::ntlm_hash(
|
145
|
+
ntlm_hash: Net::NTLM::ntlm_hash(
|
146
|
+
RubySMB::Utils.safe_encode(account.password, 'UTF-16LE'),
|
147
|
+
unicode: true
|
148
|
+
),
|
145
149
|
challenge: @server_challenge
|
146
150
|
)
|
147
151
|
matches = my_ntlm_response == type3_msg.ntlm_response
|
@@ -151,9 +155,9 @@ module RubySMB
|
|
151
155
|
their_blob = type3_msg.ntlm_response[digest.digest_length..-1]
|
152
156
|
|
153
157
|
ntlmv2_hash = Net::NTLM.ntlmv2_hash(
|
154
|
-
account.username
|
155
|
-
account.password
|
156
|
-
type3_msg.domain
|
158
|
+
RubySMB::Utils.safe_encode(account.username, 'UTF-16LE'),
|
159
|
+
RubySMB::Utils.safe_encode(account.password, 'UTF-16LE'),
|
160
|
+
RubySMB::Utils.safe_encode(type3_msg.domain, 'UTF-16LE'), # don't use the account domain because of the special '.' value
|
157
161
|
{client_challenge: their_blob[16...24], unicode: true}
|
158
162
|
)
|
159
163
|
|
@@ -305,7 +309,10 @@ module RubySMB
|
|
305
309
|
username = username.downcase
|
306
310
|
domain = @default_domain if domain.nil? || domain == '.'.encode(domain.encoding)
|
307
311
|
domain = domain.downcase
|
308
|
-
@accounts.find
|
312
|
+
@accounts.find do |account|
|
313
|
+
RubySMB::Utils.safe_encode(account.username, username.encoding).downcase == username &&
|
314
|
+
RubySMB::Utils.safe_encode(account.domain, domain.encoding).downcase == domain
|
315
|
+
end
|
309
316
|
end
|
310
317
|
|
311
318
|
#
|
data/lib/ruby_smb/ntlm/client.rb
CHANGED
@@ -51,6 +51,10 @@ module RubySMB::NTLM
|
|
51
51
|
!challenge_message.has_flag?(:UNICODE) && challenge_message.has_flag?(:OEM)
|
52
52
|
end
|
53
53
|
|
54
|
+
def ntlmv2_hash
|
55
|
+
@ntlmv2_hash ||= RubySMB::NTLM.ntlmv2_hash(username, password, domain, {:client_challenge => client_challenge, :unicode => !use_oem_strings?})
|
56
|
+
end
|
57
|
+
|
54
58
|
def calculate_user_session_key!
|
55
59
|
if is_anonymous?
|
56
60
|
# see MS-NLMP section 3.4
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'net/ntlm'
|
2
|
+
|
3
|
+
module Custom
|
4
|
+
module NTLM
|
5
|
+
|
6
|
+
def self.prepended(base)
|
7
|
+
base.singleton_class.send(:prepend, ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def encode_utf16le(str)
|
12
|
+
str.dup.force_encoding('UTF-8').encode(Encoding::UTF_16LE, Encoding::UTF_8).force_encoding('ASCII-8BIT')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Net::NTLM::EncodeUtil.send(:prepend, Custom::NTLM)
|
data/lib/ruby_smb/ntlm.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'ruby_smb/ntlm/custom/ntlm'
|
2
|
+
|
1
3
|
module RubySMB
|
2
4
|
module NTLM
|
3
5
|
# [[MS-NLMP] 2.2.2.5](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/99d90ff4-957f-4c8a-80e4-5bfe5a9a9832)
|
@@ -56,6 +58,41 @@ module RubySMB
|
|
56
58
|
"Version #{major}.#{minor} (Build #{build}); NTLM Current Revision #{ntlm_revision}"
|
57
59
|
end
|
58
60
|
end
|
61
|
+
|
62
|
+
class << self
|
63
|
+
|
64
|
+
# Generate a NTLMv2 Hash
|
65
|
+
# @param [String] user The username
|
66
|
+
# @param [String] password The password
|
67
|
+
# @param [String] target The domain or workstation to authenticate to
|
68
|
+
# @option opt :unicode (false) Unicode encode the domain
|
69
|
+
def ntlmv2_hash(user, password, target, opt={})
|
70
|
+
if Net::NTLM.is_ntlm_hash? password
|
71
|
+
decoded_password = Net::NTLM::EncodeUtil.decode_utf16le(password)
|
72
|
+
ntlmhash = [decoded_password.upcase[33,65]].pack('H32')
|
73
|
+
else
|
74
|
+
ntlmhash = Net::NTLM.ntlm_hash(password, opt)
|
75
|
+
end
|
76
|
+
|
77
|
+
if opt[:unicode]
|
78
|
+
# Uppercase operation on username containing non-ASCII characters
|
79
|
+
# after being unicode encoded with `EncodeUtil.encode_utf16le`
|
80
|
+
# doesn't play well. Upcase should be done before encoding.
|
81
|
+
user_upcase = Net::NTLM::EncodeUtil.decode_utf16le(user).upcase
|
82
|
+
user_upcase = Net::NTLM::EncodeUtil.encode_utf16le(user_upcase)
|
83
|
+
else
|
84
|
+
user_upcase = user.upcase
|
85
|
+
end
|
86
|
+
userdomain = user_upcase + target
|
87
|
+
|
88
|
+
unless opt[:unicode]
|
89
|
+
userdomain = Net::NTLM::EncodeUtil.encode_utf16le(userdomain)
|
90
|
+
end
|
91
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, ntlmhash, userdomain)
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
59
96
|
end
|
60
97
|
end
|
61
98
|
|
@@ -7,7 +7,7 @@ module RubySMB
|
|
7
7
|
# see: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/b062f3e3-1b65-4a9a-854a-0ee432499d8f
|
8
8
|
response = RubySMB::SMB1::Packet::TreeConnectResponse.new
|
9
9
|
|
10
|
-
share_name = request.data_block.path
|
10
|
+
share_name = RubySMB::Utils.safe_encode(request.data_block.path, 'UTF-8').split('\\', 4).last
|
11
11
|
share_provider = @server.shares.transform_keys(&:downcase)[share_name.downcase]
|
12
12
|
if share_provider.nil?
|
13
13
|
logger.warn("Received TREE_CONNECT request for non-existent share: #{share_name}")
|
@@ -49,7 +49,7 @@ module RubySMB
|
|
49
49
|
return response
|
50
50
|
end
|
51
51
|
|
52
|
-
share_name = request.path
|
52
|
+
share_name = RubySMB::Utils.safe_encode(request.path, 'UTF-8').split('\\', 4).last
|
53
53
|
share_provider = @server.shares.transform_keys(&:downcase)[share_name.downcase]
|
54
54
|
|
55
55
|
if share_provider.nil?
|
data/lib/ruby_smb/smb1/pipe.rb
CHANGED
@@ -147,6 +147,10 @@ module RubySMB
|
|
147
147
|
break if dcerpc_response.pdu_header.pfc_flags.last_frag == 1
|
148
148
|
raw_data = read(bytes: @tree.client.max_buffer_size)
|
149
149
|
dcerpc_response = dcerpc_response_from_raw_response(raw_data)
|
150
|
+
if options[:auth_level] &&
|
151
|
+
[RPC_C_AUTHN_LEVEL_PKT_INTEGRITY, RPC_C_AUTHN_LEVEL_PKT_PRIVACY].include?(options[:auth_level])
|
152
|
+
handle_integrity_privacy(dcerpc_response, auth_level: options[:auth_level], auth_type: options[:auth_type])
|
153
|
+
end
|
150
154
|
stub_data << dcerpc_response.stub.to_s
|
151
155
|
end
|
152
156
|
stub_data
|
data/lib/ruby_smb/smb2/pipe.rb
CHANGED
@@ -145,6 +145,10 @@ module RubySMB
|
|
145
145
|
break if dcerpc_response.pdu_header.pfc_flags.last_frag == 1
|
146
146
|
raw_data = read(bytes: @tree.client.max_buffer_size)
|
147
147
|
dcerpc_response = dcerpc_response_from_raw_response(raw_data)
|
148
|
+
if options[:auth_level] &&
|
149
|
+
[RPC_C_AUTHN_LEVEL_PKT_INTEGRITY, RPC_C_AUTHN_LEVEL_PKT_PRIVACY].include?(options[:auth_level])
|
150
|
+
handle_integrity_privacy(dcerpc_response, auth_level: options[:auth_level], auth_type: options[:auth_type])
|
151
|
+
end
|
148
152
|
stub_data << dcerpc_response.stub.to_s
|
149
153
|
end
|
150
154
|
stub_data
|
data/lib/ruby_smb/version.rb
CHANGED
data/lib/ruby_smb.rb
CHANGED
@@ -6,11 +6,13 @@ require 'openssl/ccm'
|
|
6
6
|
require 'openssl/cmac'
|
7
7
|
require 'windows_error'
|
8
8
|
require 'windows_error/nt_status'
|
9
|
+
require 'ruby_smb/ntlm/custom/ntlm'
|
9
10
|
# A packet parsing and manipulation library for the SMB1 and SMB2 protocols
|
10
11
|
#
|
11
12
|
# [[MS-SMB] Server Message Block (SMB) Protocol Version 1](https://msdn.microsoft.com/en-us/library/cc246482.aspx)
|
12
13
|
# [[MS-SMB2] Server Message Block (SMB) Protocol Versions 2 and 3](https://msdn.microsoft.com/en-us/library/cc246482.aspx)
|
13
14
|
module RubySMB
|
15
|
+
require 'ruby_smb/utils'
|
14
16
|
require 'ruby_smb/error'
|
15
17
|
require 'ruby_smb/create_actions'
|
16
18
|
require 'ruby_smb/dispositions'
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_smb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Metasploit Hackers
|
@@ -97,7 +97,7 @@ cert_chain:
|
|
97
97
|
EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
|
98
98
|
9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
|
99
99
|
-----END CERTIFICATE-----
|
100
|
-
date: 2022-
|
100
|
+
date: 2022-11-17 00:00:00.000000000 Z
|
101
101
|
dependencies:
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: redcarpet
|
@@ -493,6 +493,7 @@ files:
|
|
493
493
|
- lib/ruby_smb/nbss/session_request.rb
|
494
494
|
- lib/ruby_smb/ntlm.rb
|
495
495
|
- lib/ruby_smb/ntlm/client.rb
|
496
|
+
- lib/ruby_smb/ntlm/custom/ntlm.rb
|
496
497
|
- lib/ruby_smb/peer_info.rb
|
497
498
|
- lib/ruby_smb/server.rb
|
498
499
|
- lib/ruby_smb/server/cli.rb
|
@@ -673,6 +674,7 @@ files:
|
|
673
674
|
- lib/ruby_smb/smb2/smb2_header.rb
|
674
675
|
- lib/ruby_smb/smb2/tree.rb
|
675
676
|
- lib/ruby_smb/smb_error.rb
|
677
|
+
- lib/ruby_smb/utils.rb
|
676
678
|
- lib/ruby_smb/version.rb
|
677
679
|
- ruby_smb.gemspec
|
678
680
|
- spec/lib/ruby_smb/client_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|