packetgen-plugin-smb 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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