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.
- checksums.yaml +4 -4
- data/lib/packetgen-plugin-smb.rb +7 -5
- data/lib/packetgen/plugin/gssapi.rb +125 -0
- data/lib/packetgen/plugin/smb.rb +26 -32
- data/lib/packetgen/plugin/smb/blocks.rb +2 -2
- data/lib/packetgen/plugin/smb/browser.rb +3 -3
- data/lib/packetgen/plugin/smb/browser/domain_announcement.rb +3 -3
- data/lib/packetgen/plugin/smb/browser/host_announcement.rb +4 -4
- data/lib/packetgen/plugin/smb/browser/local_master_announcement.rb +3 -3
- data/lib/packetgen/plugin/smb/close.rb +9 -59
- data/lib/packetgen/plugin/smb/close/request.rb +45 -0
- data/lib/packetgen/plugin/smb/close/response.rb +36 -0
- data/lib/packetgen/plugin/smb/filetime.rb +10 -9
- data/lib/packetgen/plugin/smb/nt_create_and_x.rb +9 -264
- data/lib/packetgen/plugin/smb/ntcreateandx/request.rb +159 -0
- data/lib/packetgen/plugin/smb/ntcreateandx/response.rb +128 -0
- data/lib/packetgen/plugin/smb/string.rb +4 -4
- data/lib/packetgen/plugin/smb/trans.rb +9 -190
- data/lib/packetgen/plugin/smb/trans/request.rb +121 -0
- data/lib/packetgen/plugin/smb/trans/response.rb +94 -0
- data/lib/packetgen/plugin/smb2.rb +181 -0
- data/lib/packetgen/plugin/smb2/base.rb +31 -0
- data/lib/packetgen/plugin/smb2/error.rb +50 -0
- data/lib/packetgen/plugin/smb2/guid.rb +68 -0
- data/lib/packetgen/plugin/smb2/negotiate.rb +22 -0
- data/lib/packetgen/plugin/smb2/negotiate/context.rb +131 -0
- data/lib/packetgen/plugin/smb2/negotiate/request.rb +166 -0
- data/lib/packetgen/plugin/smb2/negotiate/response.rb +190 -0
- data/lib/packetgen/plugin/smb2/session_setup.rb +21 -0
- data/lib/packetgen/plugin/smb2/session_setup/request.rb +98 -0
- data/lib/packetgen/plugin/smb2/session_setup/response.rb +69 -0
- data/lib/packetgen/plugin/smb_version.rb +1 -1
- data/packetgen-plugin-smb.gemspec +2 -1
- 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
|
@@ -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.
|
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.
|
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-
|
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.
|
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.
|
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
|