packetgen-plugin-smb 0.2.0 → 0.3.0

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/packetgen-plugin-smb.rb +7 -5
  3. data/lib/packetgen/plugin/gssapi.rb +125 -0
  4. data/lib/packetgen/plugin/smb.rb +26 -32
  5. data/lib/packetgen/plugin/smb/blocks.rb +2 -2
  6. data/lib/packetgen/plugin/smb/browser.rb +3 -3
  7. data/lib/packetgen/plugin/smb/browser/domain_announcement.rb +3 -3
  8. data/lib/packetgen/plugin/smb/browser/host_announcement.rb +4 -4
  9. data/lib/packetgen/plugin/smb/browser/local_master_announcement.rb +3 -3
  10. data/lib/packetgen/plugin/smb/close.rb +9 -59
  11. data/lib/packetgen/plugin/smb/close/request.rb +45 -0
  12. data/lib/packetgen/plugin/smb/close/response.rb +36 -0
  13. data/lib/packetgen/plugin/smb/filetime.rb +10 -9
  14. data/lib/packetgen/plugin/smb/nt_create_and_x.rb +9 -264
  15. data/lib/packetgen/plugin/smb/ntcreateandx/request.rb +159 -0
  16. data/lib/packetgen/plugin/smb/ntcreateandx/response.rb +128 -0
  17. data/lib/packetgen/plugin/smb/string.rb +4 -4
  18. data/lib/packetgen/plugin/smb/trans.rb +9 -190
  19. data/lib/packetgen/plugin/smb/trans/request.rb +121 -0
  20. data/lib/packetgen/plugin/smb/trans/response.rb +94 -0
  21. data/lib/packetgen/plugin/smb2.rb +181 -0
  22. data/lib/packetgen/plugin/smb2/base.rb +31 -0
  23. data/lib/packetgen/plugin/smb2/error.rb +50 -0
  24. data/lib/packetgen/plugin/smb2/guid.rb +68 -0
  25. data/lib/packetgen/plugin/smb2/negotiate.rb +22 -0
  26. data/lib/packetgen/plugin/smb2/negotiate/context.rb +131 -0
  27. data/lib/packetgen/plugin/smb2/negotiate/request.rb +166 -0
  28. data/lib/packetgen/plugin/smb2/negotiate/response.rb +190 -0
  29. data/lib/packetgen/plugin/smb2/session_setup.rb +21 -0
  30. data/lib/packetgen/plugin/smb2/session_setup/request.rb +98 -0
  31. data/lib/packetgen/plugin/smb2/session_setup/response.rb +69 -0
  32. data/lib/packetgen/plugin/smb_version.rb +1 -1
  33. data/packetgen-plugin-smb.gemspec +2 -1
  34. metadata +42 -4
@@ -0,0 +1,21 @@
1
+ # This file is part of packetgen-plugin-smb.
2
+ # See https://github.com/sdaubert/packetgen-plugin-smb for more informations
3
+ # Copyright (C) 2018 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
8
+ require_relative 'guid'
9
+
10
+ module PacketGen::Plugin
11
+ class SMB2
12
+ # Namespace for SESSION SETUP related classes
13
+ # @author Sylvain Daubert
14
+ module SessionSetup; end
15
+ end
16
+ end
17
+
18
+ require_relative 'session_setup/request'
19
+ require_relative 'session_setup/response'
20
+
21
+ PacketGen::Plugin::SMB2.bind_command 'session_setup'
@@ -0,0 +1,98 @@
1
+ # This file is part of packetgen-plugin-smb.
2
+ # See https://github.com/sdaubert/packetgen-plugin-smb for more informations
3
+ # Copyright (C) 2018 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
8
+ module PacketGen::Plugin
9
+ class SMB2
10
+ module SessionSetup
11
+ # SMB2 SessionSetup request structure
12
+ # 0 1 2 3
13
+ # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
14
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
15
+ # | StructureSize | Flags | SecurityMode |
16
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
17
+ # | Capabilities |
18
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
19
+ # | Channel |
20
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
21
+ # | BufferOffset | BufferLength |
22
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
23
+ # | PreviousSessionId |
24
+ # + +
25
+ # | |
26
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
27
+ # | Buffer (variable) |
28
+ # + +
29
+ # | ... |
30
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31
+ # @author Sylvain Daubert
32
+ class Request < Base
33
+ # Security modes
34
+ SECURITY_MODES = Negotiate::Request::SECURITY_MODES
35
+
36
+ # @!attribute structure_size
37
+ # 16-bit session setup request structure size. Should be 25.
38
+ # @return [Integer]
39
+ define_field :structure_size, PacketGen::Types::Int16le, default: 25
40
+ # @!attribute flags
41
+ # 8-bit flags for SMB 3 dialect.
42
+ # @return [Integer]
43
+ define_field :flags, PacketGen::Types::Int8
44
+ # @!attribute flags_rsv
45
+ # @return [Integer]
46
+ # @!attribute flags_binding?
47
+ # @return [Boolean]
48
+ define_bit_fields_on :flags, :flags_rsv, 7, :flags_binding
49
+ # @!attribute security_mode
50
+ # 16-bit security mode field.
51
+ # @return [Integer]
52
+ define_field :security_mode, PacketGen::Types::Int8Enum, enum: SECURITY_MODES
53
+ # @!attribute capabilities
54
+ # 32-bit capabilities field.
55
+ # @return [Integer]
56
+ define_field :capabilities, PacketGen::Types::Int32le
57
+ # @!attribute cap_rsv
58
+ # 31-bit reserved field
59
+ # @return [Boolean]
60
+ # @!attribute cap_dfs
61
+ # Indicates if Distributed File system (DFS) is supported
62
+ # @return [Boolean]
63
+ define_bit_fields_on :capabilities, :cap_rsv, 31, :cap_dfs
64
+ # @!attribute channel
65
+ # 32-bit reserved field
66
+ # @return [Integer]
67
+ define_field :channel, PacketGen::Types::Int32le
68
+ # @!attribute buffer_offset
69
+ # The offset, from the beginning of the SMB2 header of the {#buffer}.
70
+ # @return [Integer]
71
+ define_field :buffer_offset, PacketGen::Types::Int16le, default: SMB2::HEADER_SIZE + 6 * 4
72
+ # @!attribute buffer_length
73
+ # The length of the {#buffer} field.
74
+ # @return [Integer]
75
+ define_field :buffer_length, PacketGen::Types::Int16le
76
+ # @!attribute prev_session_id
77
+ # 64-bit previously established session id
78
+ # @return [Integer]
79
+ define_field :prev_session_id, PacketGen::Types::Int64le
80
+ # @!attribute buffer
81
+ # @return [GSSAPI]
82
+ define_field :buffer, GSSAPI, token: :response
83
+
84
+ # Calculate and set {#buffer_length} field.
85
+ # @return [void]
86
+ def calc_length
87
+ self.buffer_length = buffer.sz
88
+ end
89
+
90
+ # Protocol name
91
+ # @return [String]
92
+ def protocol_name
93
+ 'SMB2::SessionSetup::Request'
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,69 @@
1
+ # This file is part of packetgen-plugin-smb.
2
+ # See https://github.com/sdaubert/packetgen-plugin-smb for more informations
3
+ # Copyright (C) 2018 Sylvain Daubert <sylvain.daubert@laposte.net>
4
+ # This program is published under MIT license.
5
+
6
+ # frozen_string_literal: true
7
+
8
+ module PacketGen::Plugin
9
+ class SMB2
10
+ module SessionSetup
11
+ # SMB2 SessionSetup request structure
12
+ # 0 1 2 3
13
+ # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
14
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
15
+ # | StructureSize | Flags |
16
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
17
+ # | BufferOffset | BufferLength |
18
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
19
+ # | Buffer (variable) |
20
+ # + +
21
+ # | ... |
22
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
23
+ # @author Sylvain Daubert
24
+ class Response < Base
25
+ # @!attribute structure_size
26
+ # 16-bit session setup request structure size. Should be 9.
27
+ # @return [Integer]
28
+ define_field :structure_size, PacketGen::Types::Int16le, default: 9
29
+ # @!attribute flags
30
+ # 16-bit session flags
31
+ # @return [Integer]
32
+ define_field :flags, PacketGen::Types::Int16le
33
+ # @!attribute flags_rsv
34
+ # 13-bit reserved field
35
+ # @return [Integer]
36
+ # @!attribute flags_encrypt_data?
37
+ # @return [Boolean]
38
+ # @!attribute flags_is_null?
39
+ # @return [Boolean]
40
+ # @!attribute flags_is_guest?
41
+ # @return [Boolean]
42
+ define_bit_fields_on :flags, :flags_rsv, 13,:flags_encrypt_data, :flags_is_null, :flags_is_guest
43
+ # @!attribute buffer_offset
44
+ # The offset, from the beginning of the SMB2 header of the {#buffer}.
45
+ # @return [Integer]
46
+ define_field :buffer_offset, PacketGen::Types::Int16le, default: SMB2::HEADER_SIZE + 8
47
+ # @!attribute buffer_length
48
+ # The length of the {#buffer} field.
49
+ # @return [Integer]
50
+ define_field :buffer_length, PacketGen::Types::Int16le
51
+ # @!attribute buffer
52
+ # @return [GSSAPI]
53
+ define_field :buffer, GSSAPI, token: :response
54
+
55
+ # Calculate and set {#buffer_length} field.
56
+ # @return [void]
57
+ def calc_length
58
+ self.buffer_length = buffer.sz
59
+ end
60
+
61
+ # Protocol name
62
+ # @return [String]
63
+ def protocol_name
64
+ 'SMB2::SessionSetup::Response'
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,5 +1,5 @@
1
1
  module PacketGen
2
2
  module Plugin
3
- SMB_VERSION = "0.2.0"
3
+ SMB_VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.required_ruby_version = '>= 2.3.0'
21
21
 
22
- spec.add_dependency 'packetgen', '~>2.8', '>= 2.8.4'
22
+ spec.add_dependency 'packetgen', '~>2.8', '>= 2.8.7'
23
+ spec.add_dependency 'rasn1', '~>0.6', '>= 0.6.7'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.16'
25
26
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packetgen-plugin-smb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Daubert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-02 00:00:00.000000000 Z
11
+ date: 2018-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: packetgen
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '2.8'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 2.8.4
22
+ version: 2.8.7
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,27 @@ dependencies:
29
29
  version: '2.8'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 2.8.4
32
+ version: 2.8.7
33
+ - !ruby/object:Gem::Dependency
34
+ name: rasn1
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.6'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.6.7
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.6'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.6.7
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: bundler
35
55
  requirement: !ruby/object:Gem::Requirement
@@ -115,6 +135,7 @@ files:
115
135
  - README.md
116
136
  - Rakefile
117
137
  - lib/packetgen-plugin-smb.rb
138
+ - lib/packetgen/plugin/gssapi.rb
118
139
  - lib/packetgen/plugin/smb.rb
119
140
  - lib/packetgen/plugin/smb/blocks.rb
120
141
  - lib/packetgen/plugin/smb/browser.rb
@@ -122,10 +143,27 @@ files:
122
143
  - lib/packetgen/plugin/smb/browser/host_announcement.rb
123
144
  - lib/packetgen/plugin/smb/browser/local_master_announcement.rb
124
145
  - lib/packetgen/plugin/smb/close.rb
146
+ - lib/packetgen/plugin/smb/close/request.rb
147
+ - lib/packetgen/plugin/smb/close/response.rb
125
148
  - lib/packetgen/plugin/smb/filetime.rb
126
149
  - lib/packetgen/plugin/smb/nt_create_and_x.rb
150
+ - lib/packetgen/plugin/smb/ntcreateandx/request.rb
151
+ - lib/packetgen/plugin/smb/ntcreateandx/response.rb
127
152
  - lib/packetgen/plugin/smb/string.rb
128
153
  - lib/packetgen/plugin/smb/trans.rb
154
+ - lib/packetgen/plugin/smb/trans/request.rb
155
+ - lib/packetgen/plugin/smb/trans/response.rb
156
+ - lib/packetgen/plugin/smb2.rb
157
+ - lib/packetgen/plugin/smb2/base.rb
158
+ - lib/packetgen/plugin/smb2/error.rb
159
+ - lib/packetgen/plugin/smb2/guid.rb
160
+ - lib/packetgen/plugin/smb2/negotiate.rb
161
+ - lib/packetgen/plugin/smb2/negotiate/context.rb
162
+ - lib/packetgen/plugin/smb2/negotiate/request.rb
163
+ - lib/packetgen/plugin/smb2/negotiate/response.rb
164
+ - lib/packetgen/plugin/smb2/session_setup.rb
165
+ - lib/packetgen/plugin/smb2/session_setup/request.rb
166
+ - lib/packetgen/plugin/smb2/session_setup/response.rb
129
167
  - lib/packetgen/plugin/smb_version.rb
130
168
  - packetgen-plugin-smb.gemspec
131
169
  homepage: https://github.com/sdaubert/packetgen-plugin-smb