ruby_smb 2.0.2 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/examples/anonymous_auth.rb +3 -3
  5. data/examples/append_file.rb +10 -8
  6. data/examples/authenticate.rb +9 -5
  7. data/examples/delete_file.rb +8 -6
  8. data/examples/enum_registry_key.rb +5 -4
  9. data/examples/enum_registry_values.rb +5 -4
  10. data/examples/list_directory.rb +8 -6
  11. data/examples/negotiate_with_netbios_service.rb +9 -5
  12. data/examples/net_share_enum_all.rb +6 -4
  13. data/examples/pipes.rb +11 -12
  14. data/examples/query_service_status.rb +64 -0
  15. data/examples/read_file.rb +8 -6
  16. data/examples/read_registry_key_value.rb +6 -5
  17. data/examples/rename_file.rb +9 -7
  18. data/examples/tree_connect.rb +7 -5
  19. data/examples/write_file.rb +9 -7
  20. data/lib/ruby_smb/client.rb +72 -43
  21. data/lib/ruby_smb/client/negotiation.rb +1 -0
  22. data/lib/ruby_smb/dcerpc.rb +2 -0
  23. data/lib/ruby_smb/dcerpc/error.rb +3 -0
  24. data/lib/ruby_smb/dcerpc/ndr.rb +209 -44
  25. data/lib/ruby_smb/dcerpc/request.rb +13 -0
  26. data/lib/ruby_smb/dcerpc/rpc_security_attributes.rb +34 -0
  27. data/lib/ruby_smb/dcerpc/rrp_unicode_string.rb +9 -6
  28. data/lib/ruby_smb/dcerpc/svcctl.rb +479 -0
  29. data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb +48 -0
  30. data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb +26 -0
  31. data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb +25 -0
  32. data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb +26 -0
  33. data/lib/ruby_smb/dcerpc/svcctl/control_service_request.rb +26 -0
  34. data/lib/ruby_smb/dcerpc/svcctl/control_service_response.rb +26 -0
  35. data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb +35 -0
  36. data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb +23 -0
  37. data/lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb +31 -0
  38. data/lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb +23 -0
  39. data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb +25 -0
  40. data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb +44 -0
  41. data/lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb +23 -0
  42. data/lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb +27 -0
  43. data/lib/ruby_smb/dcerpc/svcctl/service_status.rb +25 -0
  44. data/lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb +27 -0
  45. data/lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb +25 -0
  46. data/lib/ruby_smb/dcerpc/winreg.rb +98 -17
  47. data/lib/ruby_smb/dcerpc/winreg/create_key_request.rb +73 -0
  48. data/lib/ruby_smb/dcerpc/winreg/create_key_response.rb +36 -0
  49. data/lib/ruby_smb/dcerpc/winreg/enum_key_request.rb +1 -1
  50. data/lib/ruby_smb/dcerpc/winreg/enum_value_request.rb +1 -1
  51. data/lib/ruby_smb/dcerpc/winreg/enum_value_response.rb +1 -1
  52. data/lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb +4 -4
  53. data/lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb +1 -1
  54. data/lib/ruby_smb/dcerpc/winreg/query_value_request.rb +7 -6
  55. data/lib/ruby_smb/dcerpc/winreg/query_value_response.rb +10 -10
  56. data/lib/ruby_smb/dcerpc/winreg/save_key_request.rb +37 -0
  57. data/lib/ruby_smb/dcerpc/winreg/save_key_response.rb +23 -0
  58. data/lib/ruby_smb/dispatcher/base.rb +1 -1
  59. data/lib/ruby_smb/dispatcher/socket.rb +1 -1
  60. data/lib/ruby_smb/field/stringz16.rb +17 -1
  61. data/lib/ruby_smb/nbss/session_header.rb +4 -4
  62. data/lib/ruby_smb/smb1/file.rb +2 -10
  63. data/lib/ruby_smb/smb1/pipe.rb +2 -0
  64. data/lib/ruby_smb/smb2/file.rb +25 -17
  65. data/lib/ruby_smb/smb2/pipe.rb +3 -0
  66. data/lib/ruby_smb/smb2/tree.rb +9 -3
  67. data/lib/ruby_smb/version.rb +1 -1
  68. data/spec/lib/ruby_smb/client_spec.rb +161 -60
  69. data/spec/lib/ruby_smb/dcerpc/ndr_spec.rb +1396 -77
  70. data/spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb +161 -0
  71. data/spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb +49 -12
  72. data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb +191 -0
  73. data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb +38 -0
  74. data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb +30 -0
  75. data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb +38 -0
  76. data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb +39 -0
  77. data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb +38 -0
  78. data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb +78 -0
  79. data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb +38 -0
  80. data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb +59 -0
  81. data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb +38 -0
  82. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb +38 -0
  83. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb +152 -0
  84. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb +30 -0
  85. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb +38 -0
  86. data/spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb +72 -0
  87. data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb +46 -0
  88. data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb +30 -0
  89. data/spec/lib/ruby_smb/dcerpc/svcctl_spec.rb +512 -0
  90. data/spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb +110 -0
  91. data/spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb +44 -0
  92. data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb +0 -4
  93. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb +2 -2
  94. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb +2 -2
  95. data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb +9 -4
  96. data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb +0 -4
  97. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb +17 -17
  98. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb +11 -23
  99. data/spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb +57 -0
  100. data/spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb +22 -0
  101. data/spec/lib/ruby_smb/dcerpc/winreg_spec.rb +215 -41
  102. data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +10 -10
  103. data/spec/lib/ruby_smb/field/stringz16_spec.rb +12 -0
  104. data/spec/lib/ruby_smb/nbss/session_header_spec.rb +4 -11
  105. data/spec/lib/ruby_smb/smb1/pipe_spec.rb +7 -0
  106. data/spec/lib/ruby_smb/smb2/file_spec.rb +60 -6
  107. data/spec/lib/ruby_smb/smb2/pipe_spec.rb +7 -0
  108. data/spec/lib/ruby_smb/smb2/tree_spec.rb +35 -1
  109. metadata +72 -2
  110. metadata.gz.sig +0 -0
@@ -44,5 +44,17 @@ RSpec.describe RubySMB::Field::Stringz16 do
44
44
  io = StringIO.new("A\x00B\x00C\x00D\x00")
45
45
  expect { stringz16.read(io) }.to raise_error(EOFError)
46
46
  end
47
+
48
+ it 'trims the string to #max_length and makes sure it ends with a null terminator' do
49
+ io = StringIO.new("A\x00B\x00C\x00D\x00")
50
+ str = described_class.new(max_length: 6)
51
+ expect(str.read(io).to_binary_s).to eq("A\x00B\x00\x00\x00".b)
52
+ end
53
+
54
+ it 'raises an exception when #max_length is not a multiple of two' do
55
+ io = StringIO.new("A\x00B\x00C\x00D\x00")
56
+ str = described_class.new(max_length: 5)
57
+ expect { str.read(io) }.to raise_error(ArgumentError)
58
+ end
47
59
  end
48
60
  end
@@ -2,8 +2,7 @@ RSpec.describe RubySMB::Nbss::SessionHeader do
2
2
  subject(:session_header) { described_class.new }
3
3
 
4
4
  it { is_expected.to respond_to :session_packet_type }
5
- it { is_expected.to respond_to :flags }
6
- it { is_expected.to respond_to :packet_length }
5
+ it { is_expected.to respond_to :stream_protocol_length }
7
6
 
8
7
  it 'is big endian' do
9
8
  expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :big
@@ -15,15 +14,9 @@ RSpec.describe RubySMB::Nbss::SessionHeader do
15
14
  end
16
15
  end
17
16
 
18
- describe '#flags' do
19
- it 'is a 7-bit Unsigned Integer' do
20
- expect(session_header.flags).to be_a BinData::Bit7
21
- end
22
- end
23
-
24
- describe '#packet_length' do
25
- it 'is a 17-bit Unsigned Integer' do
26
- expect(session_header.packet_length).to be_a BinData::Bit17
17
+ describe '#stream_protocol_length' do
18
+ it 'is a 24-bit Unsigned Integer' do
19
+ expect(session_header.stream_protocol_length).to be_a BinData::Uint24be
27
20
  end
28
21
  end
29
22
  end
@@ -155,6 +155,13 @@ RSpec.describe RubySMB::SMB1::Pipe do
155
155
  expect(pipe.respond_to?(:has_registry_key?)).to be true
156
156
  end
157
157
  end
158
+
159
+ context 'with \'svcctl\' filename' do
160
+ it 'extends svcctl class' do
161
+ pipe = described_class.new(tree: tree, response: nt_create_andx_response, name: 'svcctl')
162
+ expect(pipe.respond_to?(:query_service_config)).to be true
163
+ end
164
+ end
158
165
  end
159
166
 
160
167
  describe '#dcerpc_request' do
@@ -107,6 +107,10 @@ RSpec.describe RubySMB::SMB2::File do
107
107
  it 'sets the offset of the packet' do
108
108
  expect(file.read_packet(offset: 55).offset).to eq 55
109
109
  end
110
+
111
+ it 'sets the credit_charge of the packet' do
112
+ expect(file.read_packet(credit_charge: 3).smb2_header.credit_charge).to eq 3
113
+ end
110
114
  end
111
115
 
112
116
  describe '#read' do
@@ -125,7 +129,7 @@ RSpec.describe RubySMB::SMB2::File do
125
129
  end
126
130
 
127
131
  it 'uses a single packet to read the entire file' do
128
- expect(file).to receive(:read_packet).with(read_length: 108, offset: 0).and_return(small_read)
132
+ expect(file).to receive(:read_packet).with(read_length: 108, offset: 0, credit_charge: 0).and_return(small_read)
129
133
  expect(client).to receive(:send_recv).with(small_read, encrypt: false).and_return 'fake data'
130
134
  expect(RubySMB::SMB2::Packet::ReadResponse).to receive(:read).with('fake data').and_return(small_response)
131
135
  expect(file.read).to eq 'fake data'
@@ -161,14 +165,15 @@ RSpec.describe RubySMB::SMB2::File do
161
165
  }
162
166
 
163
167
  before :example do
168
+ client.server_supports_multi_credit = 1
164
169
  allow(file).to receive(:read_packet)
165
170
  allow(client).to receive(:send_recv)
166
171
  allow(RubySMB::SMB2::Packet::ReadResponse).to receive(:read).and_return(big_response)
167
172
  end
168
173
 
169
- it 'uses a multiple packet to read the file in chunks' do
170
- expect(file).to receive(:read_packet).once.with(read_length: described_class::MAX_PACKET_SIZE, offset: 0).and_return(big_read)
171
- expect(file).to receive(:read_packet).once.with(read_length: described_class::MAX_PACKET_SIZE, offset: described_class::MAX_PACKET_SIZE).and_return(big_read)
174
+ it 'uses multiple packets to read the file in chunks' do
175
+ expect(file).to receive(:read_packet).once.with(read_length: described_class::MAX_PACKET_SIZE, offset: 0, credit_charge: 1).and_return(big_read)
176
+ expect(file).to receive(:read_packet).once.with(read_length: described_class::MAX_PACKET_SIZE, offset: described_class::MAX_PACKET_SIZE, credit_charge: 1).and_return(big_read)
172
177
  expect(client).to receive(:send_recv).twice.and_return 'fake data'
173
178
  expect(RubySMB::SMB2::Packet::ReadResponse).to receive(:read).twice.with('fake data').and_return(big_response)
174
179
  file.read(bytes: (described_class::MAX_PACKET_SIZE * 2))
@@ -184,7 +189,7 @@ RSpec.describe RubySMB::SMB2::File do
184
189
 
185
190
  context 'when the second response is not valid' do
186
191
  it 'raise an InvalidPacket exception' do
187
- allow(file).to receive(:read_packet).with(read_length: described_class::MAX_PACKET_SIZE, offset: described_class::MAX_PACKET_SIZE) do
192
+ allow(file).to receive(:read_packet).with(read_length: described_class::MAX_PACKET_SIZE, offset: described_class::MAX_PACKET_SIZE, credit_charge: 1) do
188
193
  big_response.smb2_header.command = RubySMB::SMB2::Commands::LOGOFF
189
194
  end
190
195
  expect { file.read(bytes: (described_class::MAX_PACKET_SIZE * 2)) }.to raise_error(RubySMB::Error::InvalidPacket)
@@ -193,12 +198,31 @@ RSpec.describe RubySMB::SMB2::File do
193
198
 
194
199
  context 'when the second response status code is not STATUS_SUCCESS' do
195
200
  it 'raise an UnexpectedStatusCode exception' do
196
- allow(file).to receive(:read_packet).with(read_length: described_class::MAX_PACKET_SIZE, offset: described_class::MAX_PACKET_SIZE) do
201
+ allow(file).to receive(:read_packet).with(read_length: described_class::MAX_PACKET_SIZE, offset: described_class::MAX_PACKET_SIZE, credit_charge: 1) do
197
202
  big_response.smb2_header.nt_status = WindowsError::NTStatus::STATUS_INVALID_HANDLE.value
198
203
  end
199
204
  expect { file.read(bytes: (described_class::MAX_PACKET_SIZE * 2)) }.to raise_error(RubySMB::Error::UnexpectedStatusCode)
200
205
  end
201
206
  end
207
+
208
+ context 'when the server does not support multi credits' do
209
+ it 'reads 65536 bytes at a time with no credit charge' do
210
+ client.server_supports_multi_credit = false
211
+ expect(file).to receive(:read_packet).once.with(read_length: 65536, offset: 0, credit_charge: 0).and_return(big_read)
212
+ expect(file).to receive(:read_packet).once.with(read_length: 65536, offset: 65536, credit_charge: 0).and_return(big_read)
213
+ file.read(bytes: (described_class::MAX_PACKET_SIZE * 4))
214
+ end
215
+ end
216
+
217
+ context 'when the server supports multi credits' do
218
+ it 'reads a number of bytes equal to #server_max_read_size, with the expected credit charge' do
219
+ credit_charge = (90000 - 1) / 65536 + 1
220
+ client.server_max_read_size = 90000
221
+ expect(file).to receive(:read_packet).once.with(read_length: 90000, offset: 0, credit_charge: credit_charge).and_return(big_read)
222
+ expect(file).to receive(:read_packet).once.with(read_length: (described_class::MAX_PACKET_SIZE * 4 - 90000), offset: 90000, credit_charge: credit_charge).and_return(big_read)
223
+ file.read(bytes: (described_class::MAX_PACKET_SIZE * 4))
224
+ end
225
+ end
202
226
  end
203
227
  end
204
228
 
@@ -222,6 +246,10 @@ RSpec.describe RubySMB::SMB2::File do
222
246
  it 'sets the buffer on the packet' do
223
247
  expect(file.write_packet(data:'hello').buffer).to eq 'hello'
224
248
  end
249
+
250
+ it 'sets the credit_charge on the packet header' do
251
+ expect(file.write_packet(credit_charge: 5).smb2_header.credit_charge).to eq 5
252
+ end
225
253
  end
226
254
 
227
255
  describe '#write' do
@@ -242,6 +270,11 @@ RSpec.describe RubySMB::SMB2::File do
242
270
  end
243
271
 
244
272
  context 'for a large write' do
273
+ before :example do
274
+ allow(client).to receive(:send_recv).and_return(write_response.to_binary_s)
275
+ client.server_supports_multi_credit = 1
276
+ end
277
+
245
278
  it 'sends multiple packets' do
246
279
  expect(client).to receive(:send_recv).twice.and_return(write_response.to_binary_s)
247
280
  file.write(data: SecureRandom.random_bytes(described_class::MAX_PACKET_SIZE + 1))
@@ -254,6 +287,27 @@ RSpec.describe RubySMB::SMB2::File do
254
287
  expect(client).to receive(:send_recv).twice.with(write_request, encrypt: true).and_return(write_response.to_binary_s)
255
288
  file.write(data: SecureRandom.random_bytes(described_class::MAX_PACKET_SIZE + 1))
256
289
  end
290
+
291
+ context 'when the server does not support multi credits' do
292
+ it 'writes 65536 bytes at a time with no credit charge' do
293
+ client.server_supports_multi_credit = false
294
+ data = SecureRandom.random_bytes(65536 * 2)
295
+ expect(file).to receive(:write_packet).once.with(data: data[0, 65536], offset: 0, credit_charge: 0)
296
+ expect(file).to receive(:write_packet).once.with(data: data[65536, (data.size - 65536)], offset: 65536, credit_charge: 0)
297
+ file.write(data: data)
298
+ end
299
+ end
300
+
301
+ context 'when the server supports multi credits' do
302
+ it 'reads a number of bytes equal to #server_max_write_size, with the expected credit charge' do
303
+ data = SecureRandom.random_bytes(90000 * 2)
304
+ credit_charge = (90000 - 1) / 65536 + 1
305
+ client.server_max_write_size = 90000
306
+ expect(file).to receive(:write_packet).once.with(data: data[0, 90000], offset: 0, credit_charge: credit_charge)
307
+ expect(file).to receive(:write_packet).once.with(data: data[90000, (data.size - 90000)], offset: 90000, credit_charge: credit_charge)
308
+ file.write(data: data)
309
+ end
310
+ end
257
311
  end
258
312
 
259
313
  it 'raises an InvalidPacket exception if the response is not valid' do
@@ -161,6 +161,13 @@ RSpec.describe RubySMB::SMB2::Pipe do
161
161
  expect(pipe.respond_to?(:has_registry_key?)).to be true
162
162
  end
163
163
  end
164
+
165
+ context 'with \'svcctl\' filename' do
166
+ it 'extends svcctl class' do
167
+ pipe = described_class.new(tree: tree, response: create_response, name: 'svcctl')
168
+ expect(pipe.respond_to?(:query_service_config)).to be true
169
+ end
170
+ end
164
171
  end
165
172
 
166
173
  describe '#dcerpc_request' do
@@ -195,7 +195,7 @@ RSpec.describe RubySMB::SMB2::Tree do
195
195
  allow(client).to receive(:send_recv) do |packet|
196
196
  expect(packet.file_information_class).to eq RubySMB::Fscc::FileInformation::FileIdFullDirectoryInformation::CLASS_LEVEL
197
197
  expect(packet.name).to eq '*'.encode('UTF-16LE')
198
- expect(packet.output_length).to eq 65_535
198
+ expect(packet.output_length).to eq 65_536
199
199
  end
200
200
  tree.list
201
201
  end
@@ -288,6 +288,40 @@ RSpec.describe RubySMB::SMB2::Tree do
288
288
  end
289
289
  end
290
290
 
291
+ context 'when the dialect is 0x0202' do
292
+ it 'sets the packet output_length to 65536 and credit_charge header to 0' do
293
+ client.dialect = '0x0202'
294
+ allow(client).to receive(:send_recv) do |packet|
295
+ expect(packet.output_length).to eq(65536)
296
+ expect(packet.smb2_header.credit_charge).to eq(0)
297
+ end
298
+ tree.list
299
+ end
300
+ end
301
+
302
+ context 'when the server does not support multi credits' do
303
+ it 'sets the packet output_length to 65536 and credit_charge header to 0' do
304
+ client.server_supports_multi_credit = false
305
+ allow(client).to receive(:send_recv) do |packet|
306
+ expect(packet.output_length).to eq(65536)
307
+ expect(packet.smb2_header.credit_charge).to eq(0)
308
+ end
309
+ tree.list
310
+ end
311
+ end
312
+
313
+ context 'when the dialect is not 0x0202 and the server supports multi credits' do
314
+ it 'sets the packet output_length to server_max_read_size and credit_charge header to the expected value' do
315
+ client.server_supports_multi_credit = true
316
+ credit_charge = (90000 - 1) / 65536 + 1
317
+ client.server_max_read_size = 90000
318
+ allow(client).to receive(:send_recv) do |packet|
319
+ expect(packet.output_length).to eq(90000)
320
+ expect(packet.smb2_header.credit_charge).to eq(credit_charge)
321
+ end
322
+ tree.list
323
+ end
324
+ end
291
325
  end
292
326
 
293
327
  describe '#open_file' do
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: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -97,7 +97,7 @@ cert_chain:
97
97
  JI/W23RbIRksG2pioMhd4dCXq3FLLlkOV1YfCwWixNB+iIhQPPZVaPNfgPhCn4Dt
98
98
  DeGjje/qA4fkLtRmOtb9PUBq3ToRDE4=
99
99
  -----END CERTIFICATE-----
100
- date: 2020-06-23 00:00:00.000000000 Z
100
+ date: 2020-08-17 00:00:00.000000000 Z
101
101
  dependencies:
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: redcarpet
@@ -267,6 +267,7 @@ files:
267
267
  - examples/negotiate_with_netbios_service.rb
268
268
  - examples/net_share_enum_all.rb
269
269
  - examples/pipes.rb
270
+ - examples/query_service_status.rb
270
271
  - examples/read_file.rb
271
272
  - examples/read_file_encryption.rb
272
273
  - examples/read_registry_key_value.rb
@@ -294,13 +295,34 @@ files:
294
295
  - lib/ruby_smb/dcerpc/ptypes.rb
295
296
  - lib/ruby_smb/dcerpc/request.rb
296
297
  - lib/ruby_smb/dcerpc/response.rb
298
+ - lib/ruby_smb/dcerpc/rpc_security_attributes.rb
297
299
  - lib/ruby_smb/dcerpc/rrp_unicode_string.rb
298
300
  - lib/ruby_smb/dcerpc/srvsvc.rb
299
301
  - lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb
302
+ - lib/ruby_smb/dcerpc/svcctl.rb
303
+ - lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb
304
+ - lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb
305
+ - lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb
306
+ - lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb
307
+ - lib/ruby_smb/dcerpc/svcctl/control_service_request.rb
308
+ - lib/ruby_smb/dcerpc/svcctl/control_service_response.rb
309
+ - lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb
310
+ - lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb
311
+ - lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb
312
+ - lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb
313
+ - lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb
314
+ - lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb
315
+ - lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb
316
+ - lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb
317
+ - lib/ruby_smb/dcerpc/svcctl/service_status.rb
318
+ - lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb
319
+ - lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb
300
320
  - lib/ruby_smb/dcerpc/uuid.rb
301
321
  - lib/ruby_smb/dcerpc/winreg.rb
302
322
  - lib/ruby_smb/dcerpc/winreg/close_key_request.rb
303
323
  - lib/ruby_smb/dcerpc/winreg/close_key_response.rb
324
+ - lib/ruby_smb/dcerpc/winreg/create_key_request.rb
325
+ - lib/ruby_smb/dcerpc/winreg/create_key_response.rb
304
326
  - lib/ruby_smb/dcerpc/winreg/enum_key_request.rb
305
327
  - lib/ruby_smb/dcerpc/winreg/enum_key_response.rb
306
328
  - lib/ruby_smb/dcerpc/winreg/enum_value_request.rb
@@ -314,6 +336,8 @@ files:
314
336
  - lib/ruby_smb/dcerpc/winreg/query_value_request.rb
315
337
  - lib/ruby_smb/dcerpc/winreg/query_value_response.rb
316
338
  - lib/ruby_smb/dcerpc/winreg/regsam.rb
339
+ - lib/ruby_smb/dcerpc/winreg/save_key_request.rb
340
+ - lib/ruby_smb/dcerpc/winreg/save_key_response.rb
317
341
  - lib/ruby_smb/dispatcher.rb
318
342
  - lib/ruby_smb/dispatcher/base.rb
319
343
  - lib/ruby_smb/dispatcher/socket.rb
@@ -503,12 +527,33 @@ files:
503
527
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
504
528
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
505
529
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
530
+ - spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb
506
531
  - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
507
532
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
508
533
  - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
534
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb
535
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb
536
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb
537
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb
538
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb
539
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb
540
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb
541
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb
542
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb
543
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb
544
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb
545
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb
546
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb
547
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb
548
+ - spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb
549
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb
550
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb
551
+ - spec/lib/ruby_smb/dcerpc/svcctl_spec.rb
509
552
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
510
553
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
511
554
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
555
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb
556
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb
512
557
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
513
558
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
514
559
  - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
@@ -522,6 +567,8 @@ files:
522
567
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
523
568
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
524
569
  - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
570
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb
571
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb
525
572
  - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
526
573
  - spec/lib/ruby_smb/dcerpc_spec.rb
527
574
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
@@ -708,12 +755,33 @@ test_files:
708
755
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
709
756
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
710
757
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
758
+ - spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb
711
759
  - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
712
760
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
713
761
  - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
762
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb
763
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb
764
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb
765
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb
766
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb
767
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb
768
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb
769
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb
770
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb
771
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb
772
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb
773
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb
774
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb
775
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb
776
+ - spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb
777
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb
778
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb
779
+ - spec/lib/ruby_smb/dcerpc/svcctl_spec.rb
714
780
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
715
781
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
716
782
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
783
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb
784
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb
717
785
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
718
786
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
719
787
  - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
@@ -727,6 +795,8 @@ test_files:
727
795
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
728
796
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
729
797
  - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
798
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb
799
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb
730
800
  - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
731
801
  - spec/lib/ruby_smb/dcerpc_spec.rb
732
802
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
metadata.gz.sig CHANGED
Binary file