ruby_smb 1.0.5 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.travis.yml +4 -1
  5. data/README.md +35 -47
  6. data/examples/enum_registry_key.rb +28 -0
  7. data/examples/enum_registry_values.rb +30 -0
  8. data/examples/pipes.rb +2 -1
  9. data/examples/read_registry_key_value.rb +32 -0
  10. data/lib/ruby_smb.rb +0 -1
  11. data/lib/ruby_smb/client.rb +2 -0
  12. data/lib/ruby_smb/client/winreg.rb +46 -0
  13. data/lib/ruby_smb/dcerpc.rb +38 -0
  14. data/lib/ruby_smb/dcerpc/bind.rb +2 -2
  15. data/lib/ruby_smb/dcerpc/bind_ack.rb +2 -2
  16. data/lib/ruby_smb/dcerpc/error.rb +3 -0
  17. data/lib/ruby_smb/dcerpc/ndr.rb +95 -16
  18. data/lib/ruby_smb/dcerpc/pdu_header.rb +1 -1
  19. data/lib/ruby_smb/dcerpc/request.rb +28 -9
  20. data/lib/ruby_smb/dcerpc/rrp_unicode_string.rb +35 -0
  21. data/lib/ruby_smb/dcerpc/srvsvc.rb +10 -0
  22. data/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb +9 -0
  23. data/lib/ruby_smb/dcerpc/winreg.rb +340 -0
  24. data/lib/ruby_smb/dcerpc/winreg/close_key_request.rb +24 -0
  25. data/lib/ruby_smb/dcerpc/winreg/close_key_response.rb +27 -0
  26. data/lib/ruby_smb/dcerpc/winreg/enum_key_request.rb +45 -0
  27. data/lib/ruby_smb/dcerpc/winreg/enum_key_response.rb +42 -0
  28. data/lib/ruby_smb/dcerpc/winreg/enum_value_request.rb +39 -0
  29. data/lib/ruby_smb/dcerpc/winreg/enum_value_response.rb +36 -0
  30. data/lib/ruby_smb/dcerpc/winreg/open_key_request.rb +34 -0
  31. data/lib/ruby_smb/dcerpc/winreg/open_key_response.rb +25 -0
  32. data/lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb +43 -0
  33. data/lib/ruby_smb/dcerpc/winreg/open_root_key_response.rb +35 -0
  34. data/lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb +27 -0
  35. data/lib/ruby_smb/dcerpc/winreg/query_info_key_response.rb +40 -0
  36. data/lib/ruby_smb/dcerpc/winreg/query_value_request.rb +39 -0
  37. data/lib/ruby_smb/dcerpc/winreg/query_value_response.rb +57 -0
  38. data/lib/ruby_smb/dcerpc/winreg/regsam.rb +40 -0
  39. data/lib/ruby_smb/smb1/file.rb +2 -0
  40. data/lib/ruby_smb/smb1/pipe.rb +78 -2
  41. data/lib/ruby_smb/smb2/packet/error_packet.rb +2 -4
  42. data/lib/ruby_smb/smb2/pipe.rb +89 -2
  43. data/lib/ruby_smb/version.rb +1 -1
  44. data/ruby_smb.gemspec +3 -3
  45. data/spec/lib/ruby_smb/client_spec.rb +148 -0
  46. data/spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb +2 -2
  47. data/spec/lib/ruby_smb/dcerpc/bind_spec.rb +2 -2
  48. data/spec/lib/ruby_smb/dcerpc/ndr_spec.rb +410 -0
  49. data/spec/lib/ruby_smb/dcerpc/request_spec.rb +50 -7
  50. data/spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb +98 -0
  51. data/spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb +13 -0
  52. data/spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb +60 -0
  53. data/spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb +28 -0
  54. data/spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb +36 -0
  55. data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb +108 -0
  56. data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb +97 -0
  57. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb +94 -0
  58. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb +82 -0
  59. data/spec/lib/ruby_smb/dcerpc/winreg/open_key_request_spec.rb +74 -0
  60. data/spec/lib/ruby_smb/dcerpc/winreg/open_key_response_spec.rb +35 -0
  61. data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb +90 -0
  62. data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_response_spec.rb +38 -0
  63. data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb +39 -0
  64. data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_response_spec.rb +113 -0
  65. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb +88 -0
  66. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb +150 -0
  67. data/spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb +32 -0
  68. data/spec/lib/ruby_smb/dcerpc/winreg_spec.rb +710 -0
  69. data/spec/lib/ruby_smb/dcerpc_spec.rb +81 -0
  70. data/spec/lib/ruby_smb/smb1/file_spec.rb +9 -1
  71. data/spec/lib/ruby_smb/smb1/pipe_spec.rb +210 -148
  72. data/spec/lib/ruby_smb/smb2/packet/error_packet_spec.rb +3 -24
  73. data/spec/lib/ruby_smb/smb2/pipe_spec.rb +256 -145
  74. metadata +66 -9
  75. metadata.gz.sig +0 -0
  76. data/lib/ruby_smb/smb1/dcerpc.rb +0 -72
  77. data/lib/ruby_smb/smb2/dcerpc.rb +0 -75
metadata CHANGED
@@ -1,9 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_smb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Metasploit Hackers
7
8
  - David Maloney
8
9
  - James Lee
9
10
  - Dev Mohanty
@@ -91,7 +92,7 @@ cert_chain:
91
92
  G+Hmcg1v810agasPdoydE0RTVZgEOOMoQ07qu7JFXVWZ9ZQpHT7qJATWL/b2csFG
92
93
  8mVuTXnyJOKRJA==
93
94
  -----END CERTIFICATE-----
94
- date: 2018-10-25 00:00:00.000000000 Z
95
+ date: 2019-06-27 00:00:00.000000000 Z
95
96
  dependencies:
96
97
  - !ruby/object:Gem::Dependency
97
98
  name: redcarpet
@@ -207,10 +208,7 @@ dependencies:
207
208
  version: '0'
208
209
  description: ''
209
210
  email:
210
- - DMaloney@rapid7.com
211
- - egypt@metasploit.com
212
- - dev_mohanty@rapid7.com
213
- - paristvinternet-github@yahoo.com
211
+ - msfdev@metasploit.com
214
212
  executables: []
215
213
  extensions: []
216
214
  extra_rdoc_files: []
@@ -229,12 +227,15 @@ files:
229
227
  - examples/append_file.rb
230
228
  - examples/authenticate.rb
231
229
  - examples/delete_file.rb
230
+ - examples/enum_registry_key.rb
231
+ - examples/enum_registry_values.rb
232
232
  - examples/list_directory.rb
233
233
  - examples/negotiate.rb
234
234
  - examples/negotiate_with_netbios_service.rb
235
235
  - examples/net_share_enum_all.rb
236
236
  - examples/pipes.rb
237
237
  - examples/read_file.rb
238
+ - examples/read_registry_key_value.rb
238
239
  - examples/rename_file.rb
239
240
  - examples/tree_connect.rb
240
241
  - examples/write_file.rb
@@ -246,6 +247,7 @@ files:
246
247
  - lib/ruby_smb/client/signing.rb
247
248
  - lib/ruby_smb/client/tree_connect.rb
248
249
  - lib/ruby_smb/client/utils.rb
250
+ - lib/ruby_smb/client/winreg.rb
249
251
  - lib/ruby_smb/dcerpc.rb
250
252
  - lib/ruby_smb/dcerpc/bind.rb
251
253
  - lib/ruby_smb/dcerpc/bind_ack.rb
@@ -256,9 +258,26 @@ files:
256
258
  - lib/ruby_smb/dcerpc/ptypes.rb
257
259
  - lib/ruby_smb/dcerpc/request.rb
258
260
  - lib/ruby_smb/dcerpc/response.rb
261
+ - lib/ruby_smb/dcerpc/rrp_unicode_string.rb
259
262
  - lib/ruby_smb/dcerpc/srvsvc.rb
260
263
  - lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb
261
264
  - lib/ruby_smb/dcerpc/uuid.rb
265
+ - lib/ruby_smb/dcerpc/winreg.rb
266
+ - lib/ruby_smb/dcerpc/winreg/close_key_request.rb
267
+ - lib/ruby_smb/dcerpc/winreg/close_key_response.rb
268
+ - lib/ruby_smb/dcerpc/winreg/enum_key_request.rb
269
+ - lib/ruby_smb/dcerpc/winreg/enum_key_response.rb
270
+ - lib/ruby_smb/dcerpc/winreg/enum_value_request.rb
271
+ - lib/ruby_smb/dcerpc/winreg/enum_value_response.rb
272
+ - lib/ruby_smb/dcerpc/winreg/open_key_request.rb
273
+ - lib/ruby_smb/dcerpc/winreg/open_key_response.rb
274
+ - lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb
275
+ - lib/ruby_smb/dcerpc/winreg/open_root_key_response.rb
276
+ - lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb
277
+ - lib/ruby_smb/dcerpc/winreg/query_info_key_response.rb
278
+ - lib/ruby_smb/dcerpc/winreg/query_value_request.rb
279
+ - lib/ruby_smb/dcerpc/winreg/query_value_response.rb
280
+ - lib/ruby_smb/dcerpc/winreg/regsam.rb
262
281
  - lib/ruby_smb/dispatcher.rb
263
282
  - lib/ruby_smb/dispatcher/base.rb
264
283
  - lib/ruby_smb/dispatcher/socket.rb
@@ -324,7 +343,6 @@ files:
324
343
  - lib/ruby_smb/smb1/commands.rb
325
344
  - lib/ruby_smb/smb1/create_actions.rb
326
345
  - lib/ruby_smb/smb1/data_block.rb
327
- - lib/ruby_smb/smb1/dcerpc.rb
328
346
  - lib/ruby_smb/smb1/dialect.rb
329
347
  - lib/ruby_smb/smb1/file.rb
330
348
  - lib/ruby_smb/smb1/oplock_levels.rb
@@ -402,7 +420,6 @@ files:
402
420
  - lib/ruby_smb/smb2/bit_field/smb2_security_mode_single.rb
403
421
  - lib/ruby_smb/smb2/commands.rb
404
422
  - lib/ruby_smb/smb2/create_context.rb
405
- - lib/ruby_smb/smb2/dcerpc.rb
406
423
  - lib/ruby_smb/smb2/file.rb
407
424
  - lib/ruby_smb/smb2/info_type.rb
408
425
  - lib/ruby_smb/smb2/packet.rb
@@ -441,12 +458,32 @@ files:
441
458
  - spec/lib/ruby_smb/client_spec.rb
442
459
  - spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
443
460
  - spec/lib/ruby_smb/dcerpc/bind_spec.rb
461
+ - spec/lib/ruby_smb/dcerpc/ndr_spec.rb
444
462
  - spec/lib/ruby_smb/dcerpc/p_syntax_id_t_spec.rb
445
463
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
446
464
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
447
465
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
466
+ - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
448
467
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
468
+ - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
449
469
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
470
+ - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
471
+ - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
472
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
473
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
474
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
475
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb
476
+ - spec/lib/ruby_smb/dcerpc/winreg/open_key_request_spec.rb
477
+ - spec/lib/ruby_smb/dcerpc/winreg/open_key_response_spec.rb
478
+ - spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb
479
+ - spec/lib/ruby_smb/dcerpc/winreg/open_root_key_response_spec.rb
480
+ - spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb
481
+ - spec/lib/ruby_smb/dcerpc/winreg/query_info_key_response_spec.rb
482
+ - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
483
+ - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
484
+ - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
485
+ - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
486
+ - spec/lib/ruby_smb/dcerpc_spec.rb
450
487
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
451
488
  - spec/lib/ruby_smb/dispatcher/socket_spec.rb
452
489
  - spec/lib/ruby_smb/field/extended_attribute_flag_spec.rb
@@ -605,7 +642,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
605
642
  requirements:
606
643
  - - ">="
607
644
  - !ruby/object:Gem::Version
608
- version: 2.2.0
645
+ version: 2.3.0
609
646
  required_rubygems_version: !ruby/object:Gem::Requirement
610
647
  requirements:
611
648
  - - ">="
@@ -621,12 +658,32 @@ test_files:
621
658
  - spec/lib/ruby_smb/client_spec.rb
622
659
  - spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
623
660
  - spec/lib/ruby_smb/dcerpc/bind_spec.rb
661
+ - spec/lib/ruby_smb/dcerpc/ndr_spec.rb
624
662
  - spec/lib/ruby_smb/dcerpc/p_syntax_id_t_spec.rb
625
663
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
626
664
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
627
665
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
666
+ - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
628
667
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
668
+ - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
629
669
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
670
+ - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
671
+ - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
672
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
673
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
674
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
675
+ - spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb
676
+ - spec/lib/ruby_smb/dcerpc/winreg/open_key_request_spec.rb
677
+ - spec/lib/ruby_smb/dcerpc/winreg/open_key_response_spec.rb
678
+ - spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb
679
+ - spec/lib/ruby_smb/dcerpc/winreg/open_root_key_response_spec.rb
680
+ - spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb
681
+ - spec/lib/ruby_smb/dcerpc/winreg/query_info_key_response_spec.rb
682
+ - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
683
+ - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
684
+ - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
685
+ - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
686
+ - spec/lib/ruby_smb/dcerpc_spec.rb
630
687
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
631
688
  - spec/lib/ruby_smb/dispatcher/socket_spec.rb
632
689
  - spec/lib/ruby_smb/field/extended_attribute_flag_spec.rb
metadata.gz.sig CHANGED
Binary file
@@ -1,72 +0,0 @@
1
- module RubySMB
2
- module SMB1
3
- module Dcerpc
4
-
5
- def net_share_enum_all(host)
6
- bind(endpoint: RubySMB::Dcerpc::Srvsvc)
7
-
8
- response = request(RubySMB::Dcerpc::Srvsvc::NET_SHARE_ENUM_ALL, host: host)
9
-
10
- shares = RubySMB::Dcerpc::Srvsvc::NetShareEnumAll.parse_response(response.stub.to_binary_s)
11
- shares.map{|s|{name: s[0], type: s[1], comment: s[2]}}
12
- end
13
-
14
- def bind(options={})
15
- bind_req = RubySMB::Dcerpc::Bind.new(options)
16
- write(data: bind_req.to_binary_s)
17
- @size = 1024
18
- dcerpc_raw_response = read()
19
- begin
20
- dcerpc_response = RubySMB::Dcerpc::BindAck.read(dcerpc_raw_response)
21
- rescue IOError
22
- raise RubySMB::Dcerpc::Error::InvalidPacket, "Error reading the DCERPC response"
23
- end
24
- unless dcerpc_response.pdu_header.ptype == RubySMB::Dcerpc::PTypes::BIND_ACK
25
- raise RubySMB::Dcerpc::Error::BindError, "Not a BindAck packet"
26
- end
27
-
28
- res_list = dcerpc_response.p_result_list
29
- if res_list.n_results == 0 ||
30
- res_list.p_results[0].result != RubySMB::Dcerpc::BindAck::ACCEPTANCE
31
- raise RubySMB::Dcerpc::Error::BindError,
32
- "Bind Failed (Result: #{res_list.p_results[0].result}, Reason: #{res_list.p_results[0].reason})"
33
- end
34
- dcerpc_response
35
- end
36
-
37
- def request(opnum, options={})
38
- dcerpc_request = RubySMB::Dcerpc::Request.new({ :opnum => opnum }, options)
39
- request = RubySMB::SMB1::Packet::Trans::TransactNmpipeRequest.new(options)
40
- @tree.set_header_fields(request)
41
- request.set_fid(@fid)
42
- request.data_block.trans_data.write_data = dcerpc_request.to_binary_s
43
-
44
- trans_nmpipe_raw_response = @tree.client.send_recv(request)
45
- trans_nmpipe_response = RubySMB::SMB1::Packet::Trans::TransactNmpipeResponse.read(trans_nmpipe_raw_response)
46
- unless trans_nmpipe_response.valid?
47
- raise RubySMB::Error::InvalidPacket.new(
48
- expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
49
- expected_cmd: RubySMB::SMB1::Packet::Trans::TransactNmpipeResponse::COMMAND,
50
- received_proto: trans_nmpipe_response.smb_header.protocol,
51
- received_cmd: trans_nmpipe_response.smb_header.command
52
- )
53
- end
54
- unless trans_nmpipe_response.status_code == WindowsError::NTStatus::STATUS_SUCCESS
55
- raise RubySMB::Error::UnexpectedStatusCode, trans_nmpipe_response.status_code.name
56
- end
57
-
58
- begin
59
- dcerpc_response = RubySMB::Dcerpc::Response.read(trans_nmpipe_response.data_block.trans_data.read_data)
60
- rescue IOError
61
- raise RubySMB::Dcerpc::Error::InvalidPacket, "Error reading the DCERPC response"
62
- end
63
- unless dcerpc_response.pdu_header.ptype == RubySMB::Dcerpc::PTypes::RESPONSE
64
- raise RubySMB::Dcerpc::Error::InvalidPacket, "Not a Response packet"
65
- end
66
- dcerpc_response
67
- end
68
-
69
- end
70
- end
71
- end
72
-
@@ -1,75 +0,0 @@
1
- module RubySMB
2
- module SMB2
3
- module Dcerpc
4
-
5
- def net_share_enum_all(host)
6
- bind(endpoint: RubySMB::Dcerpc::Srvsvc)
7
-
8
- response = request(RubySMB::Dcerpc::Srvsvc::NET_SHARE_ENUM_ALL, host: host)
9
-
10
- shares = RubySMB::Dcerpc::Srvsvc::NetShareEnumAll.parse_response(response.stub.to_binary_s)
11
- shares.map{|s|{name: s[0], type: s[1], comment: s[2]}}
12
- end
13
-
14
- def bind(options={})
15
- bind_req = RubySMB::Dcerpc::Bind.new(options)
16
- write(data: bind_req.to_binary_s)
17
- @size = 1024
18
- dcerpc_raw_response = read()
19
- begin
20
- dcerpc_response = RubySMB::Dcerpc::BindAck.read(dcerpc_raw_response)
21
- rescue IOError
22
- raise RubySMB::Dcerpc::Error::InvalidPacket, "Error reading the DCERPC response"
23
- end
24
- unless dcerpc_response.pdu_header.ptype == RubySMB::Dcerpc::PTypes::BIND_ACK
25
- raise RubySMB::Dcerpc::Error::BindError, "Not a BindAck packet"
26
- end
27
-
28
- res_list = dcerpc_response.p_result_list
29
- if res_list.n_results == 0 ||
30
- res_list.p_results[0].result != RubySMB::Dcerpc::BindAck::ACCEPTANCE
31
- raise RubySMB::Dcerpc::Error::BindError,
32
- "Bind Failed (Result: #{res_list.p_results[0].result}, Reason: #{res_list.p_results[0].reason})"
33
- end
34
- dcerpc_response
35
- end
36
-
37
- def request(opnum, options={})
38
- dcerpc_request = RubySMB::Dcerpc::Request.new({ :opnum => opnum }, options)
39
- ioctl_response = ioctl_send_recv(dcerpc_request, options)
40
- begin
41
- dcerpc_response = RubySMB::Dcerpc::Response.read(ioctl_response.output_data)
42
- rescue IOError
43
- raise RubySMB::Dcerpc::Error::InvalidPacket, "Error reading the DCERPC response"
44
- end
45
- unless dcerpc_response.pdu_header.ptype == RubySMB::Dcerpc::PTypes::RESPONSE
46
- raise RubySMB::Dcerpc::Error::InvalidPacket, "Not a Response packet"
47
- end
48
- dcerpc_response
49
- end
50
-
51
- def ioctl_send_recv(action, options={})
52
- request = set_header_fields(RubySMB::SMB2::Packet::IoctlRequest.new(options))
53
- request.ctl_code = 0x0011C017
54
- request.flags.is_fsctl = 0x00000001
55
- request.buffer = action.to_binary_s
56
- ioctl_raw_response = @tree.client.send_recv(request)
57
- ioctl_response = RubySMB::SMB2::Packet::IoctlResponse.read(ioctl_raw_response)
58
- unless ioctl_response.valid?
59
- raise RubySMB::Error::InvalidPacket.new(
60
- expected_proto: RubySMB::SMB2::SMB2_PROTOCOL_ID,
61
- expected_cmd: RubySMB::SMB2::Packet::IoctlRequest::COMMAND,
62
- received_proto: ioctl_response.smb2_header.protocol,
63
- received_cmd: ioctl_response.smb2_header.command
64
- )
65
- end
66
- unless ioctl_response.status_code == WindowsError::NTStatus::STATUS_SUCCESS
67
- raise RubySMB::Error::UnexpectedStatusCode, ioctl_response.status_code.name
68
- end
69
- ioctl_response
70
- end
71
-
72
- end
73
- end
74
- end
75
-