rubyntlm 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -3
- data/.rspec +2 -2
- data/.travis.yml +13 -12
- data/CHANGELOG.md +118 -6
- data/Gemfile +3 -3
- data/LICENSE +19 -19
- data/Rakefile +25 -22
- data/lib/net/ntlm.rb +266 -266
- data/lib/net/ntlm/blob.rb +28 -28
- data/lib/net/ntlm/channel_binding.rb +65 -65
- data/lib/net/ntlm/client.rb +65 -65
- data/lib/net/ntlm/client/session.rb +237 -237
- data/lib/net/ntlm/encode_util.rb +48 -48
- data/lib/net/ntlm/exceptions.rb +14 -14
- data/lib/net/ntlm/field.rb +34 -34
- data/lib/net/ntlm/field_set.rb +129 -129
- data/lib/net/ntlm/int16_le.rb +25 -25
- data/lib/net/ntlm/int32_le.rb +24 -24
- data/lib/net/ntlm/int64_le.rb +25 -25
- data/lib/net/ntlm/message.rb +129 -129
- data/lib/net/ntlm/message/type0.rb +16 -16
- data/lib/net/ntlm/message/type1.rb +18 -18
- data/lib/net/ntlm/message/type2.rb +102 -102
- data/lib/net/ntlm/message/type3.rb +131 -131
- data/lib/net/ntlm/security_buffer.rb +47 -47
- data/lib/net/ntlm/string.rb +34 -34
- data/lib/net/ntlm/target_info.rb +89 -89
- data/lib/net/ntlm/version.rb +11 -11
- data/rubyntlm.gemspec +29 -28
- data/spec/lib/net/ntlm/blob_spec.rb +16 -16
- data/spec/lib/net/ntlm/channel_binding_spec.rb +17 -17
- data/spec/lib/net/ntlm/client/session_spec.rb +68 -68
- data/spec/lib/net/ntlm/client_spec.rb +64 -64
- data/spec/lib/net/ntlm/encode_util_spec.rb +16 -16
- data/spec/lib/net/ntlm/field_set_spec.rb +33 -33
- data/spec/lib/net/ntlm/field_spec.rb +34 -34
- data/spec/lib/net/ntlm/int16_le_spec.rb +17 -17
- data/spec/lib/net/ntlm/int32_le_spec.rb +18 -18
- data/spec/lib/net/ntlm/int64_le_spec.rb +18 -18
- data/spec/lib/net/ntlm/message/type0_spec.rb +20 -20
- data/spec/lib/net/ntlm/message/type1_spec.rb +131 -131
- data/spec/lib/net/ntlm/message/type2_spec.rb +132 -132
- data/spec/lib/net/ntlm/message/type3_spec.rb +225 -225
- data/spec/lib/net/ntlm/message_spec.rb +16 -16
- data/spec/lib/net/ntlm/security_buffer_spec.rb +64 -64
- data/spec/lib/net/ntlm/string_spec.rb +72 -72
- data/spec/lib/net/ntlm/target_info_spec.rb +76 -76
- data/spec/lib/net/ntlm/version_spec.rb +27 -27
- data/spec/lib/net/ntlm_spec.rb +127 -127
- data/spec/spec_helper.rb +22 -22
- data/spec/support/certificates/sha_256_hash.pem +19 -19
- data/spec/support/shared/examples/net/ntlm/field_shared.rb +25 -25
- data/spec/support/shared/examples/net/ntlm/fieldset_shared.rb +239 -239
- data/spec/support/shared/examples/net/ntlm/int_shared.rb +43 -43
- data/spec/support/shared/examples/net/ntlm/message_shared.rb +35 -35
- metadata +17 -3
@@ -1,225 +1,225 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::Message::Type3 do
|
4
|
-
|
5
|
-
fields = [
|
6
|
-
{ :name => :sign, :class => Net::NTLM::String, :value => Net::NTLM::SSP_SIGN, :active => true },
|
7
|
-
{ :name => :type, :class => Net::NTLM::Int32LE, :value => 3, :active => true },
|
8
|
-
{ :name => :lm_response, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
9
|
-
{ :name => :ntlm_response, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
10
|
-
{ :name => :domain, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
11
|
-
{ :name => :user, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
12
|
-
{ :name => :workstation, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
13
|
-
{ :name => :session_key, :class => Net::NTLM::SecurityBuffer, :value => '', :active => false },
|
14
|
-
{ :name => :flag, :class => Net::NTLM::Int32LE, :value => 0, :active => false },
|
15
|
-
]
|
16
|
-
flags = []
|
17
|
-
it_behaves_like 'a fieldset', fields
|
18
|
-
it_behaves_like 'a message', flags
|
19
|
-
|
20
|
-
describe '.parse' do
|
21
|
-
subject(:message) { described_class.parse(data) }
|
22
|
-
|
23
|
-
context 'with NTLMv2 data' do
|
24
|
-
let(:data) do
|
25
|
-
# Captured NTLMSSP blob from smbclient with username 'administrator'
|
26
|
-
# and a blank password, i.e.:
|
27
|
-
# smbclient -U 'administrator%' -L //192.168.100.140/
|
28
|
-
[
|
29
|
-
'4e544c4d53535000030000001800180040000000c400c4005800000012001200' \
|
30
|
-
'1c0100001a001a002e0100001a001a0048010000100010006201000015820860' \
|
31
|
-
'ced203d860b80c7350050754b238202a8c1c63134f0ae0f086a3fb147e8b2f9f' \
|
32
|
-
'de3ef1b1b43c83dc010100000000000080512dba020ed0011c5bc2c8339fd29a' \
|
33
|
-
'0000000002001e00570049004e002d00420035004a004e003300520048004700' \
|
34
|
-
'46003300310001001e00570049004e002d00420035004a004e00330052004800' \
|
35
|
-
'470046003300310004001e00570049004e002d00420035004a004e0033005200' \
|
36
|
-
'4800470046003300310003001e00570049004e002d00420035004a004e003300' \
|
37
|
-
'52004800470046003300310007000800a209e5ba020ed0010000000057004f00' \
|
38
|
-
'52004b00470052004f0055005000610064006d0069006e006900730074007200' \
|
39
|
-
'610074006f0072004100550053002d004c004500450054002d00310030003300' \
|
40
|
-
'31007036615cd6d9b19a685ded4312311cd7'
|
41
|
-
].pack('H*')
|
42
|
-
end
|
43
|
-
|
44
|
-
let(:server_challenge) { ['f588469dc96fe809'].pack('H*') }
|
45
|
-
|
46
|
-
it 'should set the magic' do
|
47
|
-
expect(message.sign).to eql(Net::NTLM::SSP_SIGN)
|
48
|
-
end
|
49
|
-
it 'should set the type' do
|
50
|
-
expect(message.type).to eq(3)
|
51
|
-
end
|
52
|
-
it 'should set the LM response' do
|
53
|
-
lm_response = ['ced203d860b80c7350050754b238202a8c1c63134f0ae0f0'].pack('H*')
|
54
|
-
expect(message.lm_response).to eq(lm_response)
|
55
|
-
end
|
56
|
-
it 'should set the NTLM response' do
|
57
|
-
ntlm_response = [
|
58
|
-
'86a3fb147e8b2f9fde3ef1b1b43c83dc010100000000000080512dba020ed001' \
|
59
|
-
'1c5bc2c8339fd29a0000000002001e00570049004e002d00420035004a004e00' \
|
60
|
-
'330052004800470046003300310001001e00570049004e002d00420035004a00' \
|
61
|
-
'4e00330052004800470046003300310004001e00570049004e002d0042003500' \
|
62
|
-
'4a004e00330052004800470046003300310003001e00570049004e002d004200' \
|
63
|
-
'35004a004e00330052004800470046003300310007000800a209e5ba020ed001' \
|
64
|
-
'00000000'
|
65
|
-
].pack('H*')
|
66
|
-
expect(message.ntlm_response).to eq(ntlm_response)
|
67
|
-
end
|
68
|
-
it 'should set the user' do
|
69
|
-
# administrator
|
70
|
-
user = ['610064006d0069006e006900730074007200610074006f007200'].pack('H*')
|
71
|
-
expect(message.user).to eq(user)
|
72
|
-
end
|
73
|
-
it 'should set the domain' do
|
74
|
-
# WORKGROUP
|
75
|
-
domain = ['57004f0052004b00470052004f0055005000'].pack('H*')
|
76
|
-
expect(message.domain).to eq(domain)
|
77
|
-
end
|
78
|
-
it 'should set the workstation' do
|
79
|
-
# AUS-LEET-1031
|
80
|
-
workstation = ['4100550053002d004c004500450054002d003100300033003100'].pack('H*')
|
81
|
-
expect(message.workstation).to eq(workstation)
|
82
|
-
end
|
83
|
-
it 'should set the session key' do
|
84
|
-
session_key = ['7036615cd6d9b19a685ded4312311cd7'].pack('H*')
|
85
|
-
expect(message.session_key).to eq(session_key)
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'should set the flags' do
|
89
|
-
expect(message.flag).to eq(0x60088215)
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'should NOT set the OS version structure' do
|
93
|
-
expect(message.os_version).to be_nil
|
94
|
-
end
|
95
|
-
|
96
|
-
describe '#blank_password?' do
|
97
|
-
it 'should be true' do
|
98
|
-
expect(message.blank_password?(server_challenge)).to be true
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
describe '#ntlm_version' do
|
103
|
-
let(:ver) { message.ntlm_version }
|
104
|
-
it 'should be :ntlmv2' do
|
105
|
-
expect(ver).to eq(:ntlmv2)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
# http://davenport.sourceforge.net/ntlm.html#appendixC7
|
112
|
-
context 'NTLM2 Session Response Authentication; NTLM2 Signing and Sealing Using the 128-bit NTLM2 Session Response User Session Key With Key Exchange Negotiated' do
|
113
|
-
|
114
|
-
let(:data) do
|
115
|
-
[
|
116
|
-
'4e544c4d5353500003000000180018006000000018001800780000000c000c00' \
|
117
|
-
'40000000080008004c0000000c000c00540000001000100090000000358288e0' \
|
118
|
-
'54004500530054004e00540074006500730074004d0045004d00420045005200' \
|
119
|
-
'404d1b6f6915258000000000000000000000000000000000ea8cc49f24da157f' \
|
120
|
-
'13436637f77693d8b992d619e584c7ee727a5240822ec7af4e9100c43e6fee7f'
|
121
|
-
].pack('H*')
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'should set the LM response' do
|
125
|
-
lm_response = ['404d1b6f6915258000000000000000000000000000000000'].pack('H*')
|
126
|
-
expect(message.lm_response).to eq(lm_response)
|
127
|
-
end
|
128
|
-
it 'should set the NTLM response' do
|
129
|
-
ntlm_response = [ 'ea8cc49f24da157f13436637f77693d8b992d619e584c7ee' ].pack('H*')
|
130
|
-
expect(message.ntlm_response).to eq(ntlm_response)
|
131
|
-
end
|
132
|
-
it 'should set the domain' do
|
133
|
-
# TESTNT
|
134
|
-
domain = ['54004500530054004e005400'].pack('H*')
|
135
|
-
expect(message.domain).to eq(domain)
|
136
|
-
end
|
137
|
-
it 'should set the user' do
|
138
|
-
# test
|
139
|
-
user = ['7400650073007400'].pack('H*')
|
140
|
-
expect(message.user).to eq(user)
|
141
|
-
end
|
142
|
-
it 'should set the workstation' do
|
143
|
-
# MEMBER
|
144
|
-
workstation = ['4d0045004d00420045005200'].pack('H*')
|
145
|
-
expect(message.workstation).to eq(workstation)
|
146
|
-
end
|
147
|
-
it 'should set the session key' do
|
148
|
-
session_key = ['727a5240822ec7af4e9100c43e6fee7f'].pack('H*')
|
149
|
-
expect(message.session_key).to eq(session_key)
|
150
|
-
end
|
151
|
-
|
152
|
-
let(:server_challenge) { ['677f1c557a5ee96c'].pack('H*') }
|
153
|
-
describe '#password?' do
|
154
|
-
it 'should be true for "test1234"' do
|
155
|
-
expect(message.password?('test1234', server_challenge)).to be true
|
156
|
-
end
|
157
|
-
end
|
158
|
-
describe '#blank_password?' do
|
159
|
-
it 'should be false' do
|
160
|
-
expect(message.blank_password?(server_challenge)).to be false
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe '#ntlm_version' do
|
165
|
-
let(:ver) { message.ntlm_version }
|
166
|
-
it 'should be :ntlm2_session' do
|
167
|
-
expect(ver).to eq(:ntlm2_session)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
# http://davenport.sourceforge.net/ntlm.html#appendixC9
|
174
|
-
context 'NTLMv2 Authentication; NTLM1 Signing and Sealing Using the 40-bit NTLMv2 User Session Key' do
|
175
|
-
let(:data) do
|
176
|
-
[
|
177
|
-
'4e544c4d5353500003000000180018006000000076007600780000000c000c00' \
|
178
|
-
'40000000080008004c0000000c000c005400000000000000ee00000035828000' \
|
179
|
-
'54004500530054004e00540074006500730074004d0045004d00420045005200' \
|
180
|
-
'5d55a02b60a40526ac9a1e4d15fa45a0f2e6329726c598e8f77c67dad00b9321' \
|
181
|
-
'6242b197fe6addfa0101000000000000502db638677bc301f2e6329726c598e8' \
|
182
|
-
'0000000002000c0054004500530054004e00540001000c004d0045004d004200' \
|
183
|
-
'4500520003001e006d0065006d006200650072002e0074006500730074002e00' \
|
184
|
-
'63006f006d000000000000000000'
|
185
|
-
].pack 'H*'
|
186
|
-
end
|
187
|
-
|
188
|
-
it 'should set the NTLM response' do
|
189
|
-
ntlm_response = [
|
190
|
-
'f77c67dad00b93216242b197fe6addfa0101000000000000502db638677bc301' \
|
191
|
-
'f2e6329726c598e80000000002000c0054004500530054004e00540001000c00' \
|
192
|
-
'4d0045004d0042004500520003001e006d0065006d006200650072002e007400' \
|
193
|
-
'6500730074002e0063006f006d000000000000000000'
|
194
|
-
].pack 'H*'
|
195
|
-
expect(message.ntlm_response).to eq(ntlm_response)
|
196
|
-
end
|
197
|
-
|
198
|
-
it 'should set the domain' do
|
199
|
-
# TESTNT
|
200
|
-
domain = ['54004500530054004e005400'].pack('H*')
|
201
|
-
expect(message.domain).to eq(domain)
|
202
|
-
end
|
203
|
-
it 'should set the user' do
|
204
|
-
# test
|
205
|
-
user = ['7400650073007400'].pack('H*')
|
206
|
-
expect(message.user).to eq(user)
|
207
|
-
end
|
208
|
-
it 'should set the workstation' do
|
209
|
-
# MEMBER
|
210
|
-
workstation = ['4d0045004d00420045005200'].pack('H*')
|
211
|
-
expect(message.workstation).to eq(workstation)
|
212
|
-
end
|
213
|
-
|
214
|
-
describe '#ntlm_version' do
|
215
|
-
let(:ver) { message.ntlm_version }
|
216
|
-
it 'should be :ntlmv2' do
|
217
|
-
expect(ver).to eq(:ntlmv2)
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
end
|
222
|
-
|
223
|
-
end
|
224
|
-
|
225
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::Message::Type3 do
|
4
|
+
|
5
|
+
fields = [
|
6
|
+
{ :name => :sign, :class => Net::NTLM::String, :value => Net::NTLM::SSP_SIGN, :active => true },
|
7
|
+
{ :name => :type, :class => Net::NTLM::Int32LE, :value => 3, :active => true },
|
8
|
+
{ :name => :lm_response, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
9
|
+
{ :name => :ntlm_response, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
10
|
+
{ :name => :domain, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
11
|
+
{ :name => :user, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
12
|
+
{ :name => :workstation, :class => Net::NTLM::SecurityBuffer, :value => '', :active => true },
|
13
|
+
{ :name => :session_key, :class => Net::NTLM::SecurityBuffer, :value => '', :active => false },
|
14
|
+
{ :name => :flag, :class => Net::NTLM::Int32LE, :value => 0, :active => false },
|
15
|
+
]
|
16
|
+
flags = []
|
17
|
+
it_behaves_like 'a fieldset', fields
|
18
|
+
it_behaves_like 'a message', flags
|
19
|
+
|
20
|
+
describe '.parse' do
|
21
|
+
subject(:message) { described_class.parse(data) }
|
22
|
+
|
23
|
+
context 'with NTLMv2 data' do
|
24
|
+
let(:data) do
|
25
|
+
# Captured NTLMSSP blob from smbclient with username 'administrator'
|
26
|
+
# and a blank password, i.e.:
|
27
|
+
# smbclient -U 'administrator%' -L //192.168.100.140/
|
28
|
+
[
|
29
|
+
'4e544c4d53535000030000001800180040000000c400c4005800000012001200' \
|
30
|
+
'1c0100001a001a002e0100001a001a0048010000100010006201000015820860' \
|
31
|
+
'ced203d860b80c7350050754b238202a8c1c63134f0ae0f086a3fb147e8b2f9f' \
|
32
|
+
'de3ef1b1b43c83dc010100000000000080512dba020ed0011c5bc2c8339fd29a' \
|
33
|
+
'0000000002001e00570049004e002d00420035004a004e003300520048004700' \
|
34
|
+
'46003300310001001e00570049004e002d00420035004a004e00330052004800' \
|
35
|
+
'470046003300310004001e00570049004e002d00420035004a004e0033005200' \
|
36
|
+
'4800470046003300310003001e00570049004e002d00420035004a004e003300' \
|
37
|
+
'52004800470046003300310007000800a209e5ba020ed0010000000057004f00' \
|
38
|
+
'52004b00470052004f0055005000610064006d0069006e006900730074007200' \
|
39
|
+
'610074006f0072004100550053002d004c004500450054002d00310030003300' \
|
40
|
+
'31007036615cd6d9b19a685ded4312311cd7'
|
41
|
+
].pack('H*')
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:server_challenge) { ['f588469dc96fe809'].pack('H*') }
|
45
|
+
|
46
|
+
it 'should set the magic' do
|
47
|
+
expect(message.sign).to eql(Net::NTLM::SSP_SIGN)
|
48
|
+
end
|
49
|
+
it 'should set the type' do
|
50
|
+
expect(message.type).to eq(3)
|
51
|
+
end
|
52
|
+
it 'should set the LM response' do
|
53
|
+
lm_response = ['ced203d860b80c7350050754b238202a8c1c63134f0ae0f0'].pack('H*')
|
54
|
+
expect(message.lm_response).to eq(lm_response)
|
55
|
+
end
|
56
|
+
it 'should set the NTLM response' do
|
57
|
+
ntlm_response = [
|
58
|
+
'86a3fb147e8b2f9fde3ef1b1b43c83dc010100000000000080512dba020ed001' \
|
59
|
+
'1c5bc2c8339fd29a0000000002001e00570049004e002d00420035004a004e00' \
|
60
|
+
'330052004800470046003300310001001e00570049004e002d00420035004a00' \
|
61
|
+
'4e00330052004800470046003300310004001e00570049004e002d0042003500' \
|
62
|
+
'4a004e00330052004800470046003300310003001e00570049004e002d004200' \
|
63
|
+
'35004a004e00330052004800470046003300310007000800a209e5ba020ed001' \
|
64
|
+
'00000000'
|
65
|
+
].pack('H*')
|
66
|
+
expect(message.ntlm_response).to eq(ntlm_response)
|
67
|
+
end
|
68
|
+
it 'should set the user' do
|
69
|
+
# administrator
|
70
|
+
user = ['610064006d0069006e006900730074007200610074006f007200'].pack('H*')
|
71
|
+
expect(message.user).to eq(user)
|
72
|
+
end
|
73
|
+
it 'should set the domain' do
|
74
|
+
# WORKGROUP
|
75
|
+
domain = ['57004f0052004b00470052004f0055005000'].pack('H*')
|
76
|
+
expect(message.domain).to eq(domain)
|
77
|
+
end
|
78
|
+
it 'should set the workstation' do
|
79
|
+
# AUS-LEET-1031
|
80
|
+
workstation = ['4100550053002d004c004500450054002d003100300033003100'].pack('H*')
|
81
|
+
expect(message.workstation).to eq(workstation)
|
82
|
+
end
|
83
|
+
it 'should set the session key' do
|
84
|
+
session_key = ['7036615cd6d9b19a685ded4312311cd7'].pack('H*')
|
85
|
+
expect(message.session_key).to eq(session_key)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should set the flags' do
|
89
|
+
expect(message.flag).to eq(0x60088215)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should NOT set the OS version structure' do
|
93
|
+
expect(message.os_version).to be_nil
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#blank_password?' do
|
97
|
+
it 'should be true' do
|
98
|
+
expect(message.blank_password?(server_challenge)).to be true
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '#ntlm_version' do
|
103
|
+
let(:ver) { message.ntlm_version }
|
104
|
+
it 'should be :ntlmv2' do
|
105
|
+
expect(ver).to eq(:ntlmv2)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
# http://davenport.sourceforge.net/ntlm.html#appendixC7
|
112
|
+
context 'NTLM2 Session Response Authentication; NTLM2 Signing and Sealing Using the 128-bit NTLM2 Session Response User Session Key With Key Exchange Negotiated' do
|
113
|
+
|
114
|
+
let(:data) do
|
115
|
+
[
|
116
|
+
'4e544c4d5353500003000000180018006000000018001800780000000c000c00' \
|
117
|
+
'40000000080008004c0000000c000c00540000001000100090000000358288e0' \
|
118
|
+
'54004500530054004e00540074006500730074004d0045004d00420045005200' \
|
119
|
+
'404d1b6f6915258000000000000000000000000000000000ea8cc49f24da157f' \
|
120
|
+
'13436637f77693d8b992d619e584c7ee727a5240822ec7af4e9100c43e6fee7f'
|
121
|
+
].pack('H*')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should set the LM response' do
|
125
|
+
lm_response = ['404d1b6f6915258000000000000000000000000000000000'].pack('H*')
|
126
|
+
expect(message.lm_response).to eq(lm_response)
|
127
|
+
end
|
128
|
+
it 'should set the NTLM response' do
|
129
|
+
ntlm_response = [ 'ea8cc49f24da157f13436637f77693d8b992d619e584c7ee' ].pack('H*')
|
130
|
+
expect(message.ntlm_response).to eq(ntlm_response)
|
131
|
+
end
|
132
|
+
it 'should set the domain' do
|
133
|
+
# TESTNT
|
134
|
+
domain = ['54004500530054004e005400'].pack('H*')
|
135
|
+
expect(message.domain).to eq(domain)
|
136
|
+
end
|
137
|
+
it 'should set the user' do
|
138
|
+
# test
|
139
|
+
user = ['7400650073007400'].pack('H*')
|
140
|
+
expect(message.user).to eq(user)
|
141
|
+
end
|
142
|
+
it 'should set the workstation' do
|
143
|
+
# MEMBER
|
144
|
+
workstation = ['4d0045004d00420045005200'].pack('H*')
|
145
|
+
expect(message.workstation).to eq(workstation)
|
146
|
+
end
|
147
|
+
it 'should set the session key' do
|
148
|
+
session_key = ['727a5240822ec7af4e9100c43e6fee7f'].pack('H*')
|
149
|
+
expect(message.session_key).to eq(session_key)
|
150
|
+
end
|
151
|
+
|
152
|
+
let(:server_challenge) { ['677f1c557a5ee96c'].pack('H*') }
|
153
|
+
describe '#password?' do
|
154
|
+
it 'should be true for "test1234"' do
|
155
|
+
expect(message.password?('test1234', server_challenge)).to be true
|
156
|
+
end
|
157
|
+
end
|
158
|
+
describe '#blank_password?' do
|
159
|
+
it 'should be false' do
|
160
|
+
expect(message.blank_password?(server_challenge)).to be false
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe '#ntlm_version' do
|
165
|
+
let(:ver) { message.ntlm_version }
|
166
|
+
it 'should be :ntlm2_session' do
|
167
|
+
expect(ver).to eq(:ntlm2_session)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
# http://davenport.sourceforge.net/ntlm.html#appendixC9
|
174
|
+
context 'NTLMv2 Authentication; NTLM1 Signing and Sealing Using the 40-bit NTLMv2 User Session Key' do
|
175
|
+
let(:data) do
|
176
|
+
[
|
177
|
+
'4e544c4d5353500003000000180018006000000076007600780000000c000c00' \
|
178
|
+
'40000000080008004c0000000c000c005400000000000000ee00000035828000' \
|
179
|
+
'54004500530054004e00540074006500730074004d0045004d00420045005200' \
|
180
|
+
'5d55a02b60a40526ac9a1e4d15fa45a0f2e6329726c598e8f77c67dad00b9321' \
|
181
|
+
'6242b197fe6addfa0101000000000000502db638677bc301f2e6329726c598e8' \
|
182
|
+
'0000000002000c0054004500530054004e00540001000c004d0045004d004200' \
|
183
|
+
'4500520003001e006d0065006d006200650072002e0074006500730074002e00' \
|
184
|
+
'63006f006d000000000000000000'
|
185
|
+
].pack 'H*'
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'should set the NTLM response' do
|
189
|
+
ntlm_response = [
|
190
|
+
'f77c67dad00b93216242b197fe6addfa0101000000000000502db638677bc301' \
|
191
|
+
'f2e6329726c598e80000000002000c0054004500530054004e00540001000c00' \
|
192
|
+
'4d0045004d0042004500520003001e006d0065006d006200650072002e007400' \
|
193
|
+
'6500730074002e0063006f006d000000000000000000'
|
194
|
+
].pack 'H*'
|
195
|
+
expect(message.ntlm_response).to eq(ntlm_response)
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'should set the domain' do
|
199
|
+
# TESTNT
|
200
|
+
domain = ['54004500530054004e005400'].pack('H*')
|
201
|
+
expect(message.domain).to eq(domain)
|
202
|
+
end
|
203
|
+
it 'should set the user' do
|
204
|
+
# test
|
205
|
+
user = ['7400650073007400'].pack('H*')
|
206
|
+
expect(message.user).to eq(user)
|
207
|
+
end
|
208
|
+
it 'should set the workstation' do
|
209
|
+
# MEMBER
|
210
|
+
workstation = ['4d0045004d00420045005200'].pack('H*')
|
211
|
+
expect(message.workstation).to eq(workstation)
|
212
|
+
end
|
213
|
+
|
214
|
+
describe '#ntlm_version' do
|
215
|
+
let(:ver) { message.ntlm_version }
|
216
|
+
it 'should be :ntlmv2' do
|
217
|
+
expect(ver).to eq(:ntlmv2)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::Message do
|
4
|
-
|
5
|
-
fields = []
|
6
|
-
flags = [
|
7
|
-
:UNICODE,
|
8
|
-
:OEM,
|
9
|
-
:REQUEST_TARGET,
|
10
|
-
:NTLM,
|
11
|
-
:ALWAYS_SIGN,
|
12
|
-
:NTLM2_KEY
|
13
|
-
]
|
14
|
-
it_behaves_like 'a fieldset', fields
|
15
|
-
it_behaves_like 'a message', flags
|
16
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::Message do
|
4
|
+
|
5
|
+
fields = []
|
6
|
+
flags = [
|
7
|
+
:UNICODE,
|
8
|
+
:OEM,
|
9
|
+
:REQUEST_TARGET,
|
10
|
+
:NTLM,
|
11
|
+
:ALWAYS_SIGN,
|
12
|
+
:NTLM2_KEY
|
13
|
+
]
|
14
|
+
it_behaves_like 'a fieldset', fields
|
15
|
+
it_behaves_like 'a message', flags
|
16
|
+
|
17
17
|
end
|