packetgen-plugin-smb 0.3.0 → 0.6.2

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/specs.yml +28 -0
  3. data/.rubocop.yml +8 -1
  4. data/Gemfile +15 -3
  5. data/README.md +59 -3
  6. data/Rakefile +10 -4
  7. data/examples/llmnr-responder +110 -0
  8. data/examples/smb-responder +233 -0
  9. data/lib/packetgen-plugin-smb.rb +5 -2
  10. data/lib/packetgen/plugin/gssapi.rb +11 -6
  11. data/lib/packetgen/plugin/llmnr.rb +58 -0
  12. data/lib/packetgen/plugin/netbios.rb +19 -0
  13. data/lib/packetgen/plugin/netbios/datagram.rb +108 -0
  14. data/lib/packetgen/plugin/netbios/name.rb +64 -0
  15. data/lib/packetgen/plugin/netbios/session.rb +72 -0
  16. data/lib/packetgen/plugin/ntlm.rb +211 -0
  17. data/lib/packetgen/plugin/ntlm/authenticate.rb +197 -0
  18. data/lib/packetgen/plugin/ntlm/av_pair.rb +115 -0
  19. data/lib/packetgen/plugin/ntlm/challenge.rb +140 -0
  20. data/lib/packetgen/plugin/ntlm/negotiate.rb +127 -0
  21. data/lib/packetgen/plugin/ntlm/ntlmv2_response.rb +59 -0
  22. data/lib/packetgen/plugin/smb.rb +27 -15
  23. data/lib/packetgen/plugin/smb/blocks.rb +2 -4
  24. data/lib/packetgen/plugin/smb/browser.rb +8 -8
  25. data/lib/packetgen/plugin/smb/browser/domain_announcement.rb +2 -7
  26. data/lib/packetgen/plugin/smb/browser/host_announcement.rb +10 -7
  27. data/lib/packetgen/plugin/smb/browser/local_master_announcement.rb +2 -7
  28. data/lib/packetgen/plugin/smb/close.rb +2 -2
  29. data/lib/packetgen/plugin/smb/close/request.rb +3 -3
  30. data/lib/packetgen/plugin/smb/close/response.rb +3 -3
  31. data/lib/packetgen/plugin/smb/filetime.rb +30 -3
  32. data/lib/packetgen/plugin/smb/negotiate.rb +20 -0
  33. data/lib/packetgen/plugin/smb/negotiate/dialect.rb +39 -0
  34. data/lib/packetgen/plugin/smb/negotiate/request.rb +35 -0
  35. data/lib/packetgen/plugin/smb/negotiate/response.rb +29 -0
  36. data/lib/packetgen/plugin/smb/nt_create_and_x.rb +2 -2
  37. data/lib/packetgen/plugin/smb/ntcreateandx/request.rb +5 -5
  38. data/lib/packetgen/plugin/smb/ntcreateandx/response.rb +3 -3
  39. data/lib/packetgen/plugin/smb/string.rb +60 -23
  40. data/lib/packetgen/plugin/smb/trans.rb +2 -2
  41. data/lib/packetgen/plugin/smb/trans/request.rb +4 -4
  42. data/lib/packetgen/plugin/smb/trans/response.rb +3 -3
  43. data/lib/packetgen/plugin/smb2.rb +20 -9
  44. data/lib/packetgen/plugin/smb2/base.rb +5 -7
  45. data/lib/packetgen/plugin/smb2/error.rb +3 -4
  46. data/lib/packetgen/plugin/smb2/guid.rb +6 -4
  47. data/lib/packetgen/plugin/smb2/negotiate.rb +2 -2
  48. data/lib/packetgen/plugin/smb2/negotiate/context.rb +28 -27
  49. data/lib/packetgen/plugin/smb2/negotiate/request.rb +16 -12
  50. data/lib/packetgen/plugin/smb2/negotiate/response.rb +25 -14
  51. data/lib/packetgen/plugin/smb2/session_setup.rb +2 -2
  52. data/lib/packetgen/plugin/smb2/session_setup/request.rb +12 -7
  53. data/lib/packetgen/plugin/smb2/session_setup/response.rb +13 -8
  54. data/lib/packetgen/plugin/smb_version.rb +3 -1
  55. data/packetgen-plugin-smb.gemspec +10 -15
  56. metadata +28 -81
  57. data/.travis.yml +0 -12
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of packetgen-plugin-smb.
2
4
  # See https://github.com/sdaubert/packetgen-plugin-smb for more informations
3
5
  # Copyright (C) 2018 Sylvain Daubert <sylvain.daubert@laposte.net>
4
6
  # This program is published under MIT license.
5
7
 
6
- # frozen_string_literal: true
7
-
8
8
  module PacketGen::Plugin
9
9
  class SMB2
10
10
  module SessionSetup
@@ -39,7 +39,7 @@ module PacketGen::Plugin
39
39
  # @return [Boolean]
40
40
  # @!attribute flags_is_guest?
41
41
  # @return [Boolean]
42
- define_bit_fields_on :flags, :flags_rsv, 13,:flags_encrypt_data, :flags_is_null, :flags_is_guest
42
+ define_bit_fields_on :flags, :flags_rsv, 13, :flags_encrypt_data, :flags_is_null, :flags_is_guest
43
43
  # @!attribute buffer_offset
44
44
  # The offset, from the beginning of the SMB2 header of the {#buffer}.
45
45
  # @return [Integer]
@@ -50,20 +50,25 @@ module PacketGen::Plugin
50
50
  define_field :buffer_length, PacketGen::Types::Int16le
51
51
  # @!attribute buffer
52
52
  # @return [GSSAPI]
53
- define_field :buffer, GSSAPI, token: :response
53
+ define_field :buffer, GSSAPI, token: :response, optional: ->(h) { h.buffer_offset.positive? }
54
54
 
55
- # Calculate and set {#buffer_length} field.
55
+ # Calculate and set {#buffer_length} and {#buffer_offset} fields.
56
56
  # @return [void]
57
57
  def calc_length
58
- self.buffer_length = buffer.sz
58
+ self.buffer_length = self[:buffer].sz
59
+ self.buffer_offset = if self.buffer_length.zero?
60
+ 0
61
+ else
62
+ SMB2.new.sz + offset_of(:buffer)
63
+ end
59
64
  end
60
65
 
61
66
  # Protocol name
62
67
  # @return [String]
63
- def protocol_name
68
+ def self.protocol_name
64
69
  'SMB2::SessionSetup::Response'
65
70
  end
66
71
  end
67
72
  end
68
73
  end
69
- end
74
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PacketGen
2
4
  module Plugin
3
- SMB_VERSION = "0.3.0"
5
+ SMB_VERSION = '0.6.2'
4
6
  end
5
7
  end
@@ -1,4 +1,6 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'packetgen/plugin/smb_version'
4
6
 
@@ -8,25 +10,18 @@ Gem::Specification.new do |spec|
8
10
  spec.authors = ['Sylvain Daubert']
9
11
  spec.email = ['sylvain.daubert@laposte.net']
10
12
 
11
- spec.summary = %q{SMB plugin for packetgen.}
12
- #spec.description = %q{TODO: Write a longer description or delete this line.}
13
+ spec.summary = 'SMB plugin for packetgen.'
13
14
  spec.homepage = 'https://github.com/sdaubert/packetgen-plugin-smb'
14
15
 
15
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
17
  f.match(%r{^(test|spec|features)/})
17
18
  end
18
- spec.require_paths = ['lib']
19
-
20
- spec.required_ruby_version = '>= 2.3.0'
21
-
22
- spec.add_dependency 'packetgen', '~>2.8', '>= 2.8.7'
23
- spec.add_dependency 'rasn1', '~>0.6', '>= 0.6.7'
24
-
25
- spec.add_development_dependency 'bundler', '~> 1.16'
26
- spec.add_development_dependency 'rake', '~> 10.0'
27
- spec.add_development_dependency 'rspec', '~> 3.7'
28
- spec.add_development_dependency 'simplecov', '~> 0.16'
29
- spec.add_development_dependency 'yard', '~> 0.9'
19
+ spec.bindir = 'bin'
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.require_paths = %w[lib]
30
22
 
23
+ spec.required_ruby_version = '>= 2.4.0'
31
24
 
25
+ spec.add_dependency 'packetgen', '~>3.1', '>=3.1.7'
26
+ spec.add_dependency 'rasn1', '~>0.6', '>= 0.6.8'
32
27
  end
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.3.0
4
+ version: 0.6.2
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-18 00:00:00.000000000 Z
11
+ date: 2020-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: packetgen
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.8'
19
+ version: '3.1'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 2.8.7
22
+ version: 3.1.7
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '2.8'
29
+ version: '3.1'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 2.8.7
32
+ version: 3.1.7
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rasn1
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '0.6'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.6.7
42
+ version: 0.6.8
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,77 +49,7 @@ dependencies:
49
49
  version: '0.6'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.6.7
53
- - !ruby/object:Gem::Dependency
54
- name: bundler
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '1.16'
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '1.16'
67
- - !ruby/object:Gem::Dependency
68
- name: rake
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '10.0'
74
- type: :development
75
- prerelease: false
76
- version_requirements: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '10.0'
81
- - !ruby/object:Gem::Dependency
82
- name: rspec
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '3.7'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '3.7'
95
- - !ruby/object:Gem::Dependency
96
- name: simplecov
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '0.16'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '0.16'
109
- - !ruby/object:Gem::Dependency
110
- name: yard
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '0.9'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '0.9'
52
+ version: 0.6.8
123
53
  description:
124
54
  email:
125
55
  - sylvain.daubert@laposte.net
@@ -127,15 +57,28 @@ executables: []
127
57
  extensions: []
128
58
  extra_rdoc_files: []
129
59
  files:
60
+ - ".github/workflows/specs.yml"
130
61
  - ".gitignore"
131
62
  - ".rubocop.yml"
132
- - ".travis.yml"
133
63
  - Gemfile
134
64
  - LICENSE
135
65
  - README.md
136
66
  - Rakefile
67
+ - examples/llmnr-responder
68
+ - examples/smb-responder
137
69
  - lib/packetgen-plugin-smb.rb
138
70
  - lib/packetgen/plugin/gssapi.rb
71
+ - lib/packetgen/plugin/llmnr.rb
72
+ - lib/packetgen/plugin/netbios.rb
73
+ - lib/packetgen/plugin/netbios/datagram.rb
74
+ - lib/packetgen/plugin/netbios/name.rb
75
+ - lib/packetgen/plugin/netbios/session.rb
76
+ - lib/packetgen/plugin/ntlm.rb
77
+ - lib/packetgen/plugin/ntlm/authenticate.rb
78
+ - lib/packetgen/plugin/ntlm/av_pair.rb
79
+ - lib/packetgen/plugin/ntlm/challenge.rb
80
+ - lib/packetgen/plugin/ntlm/negotiate.rb
81
+ - lib/packetgen/plugin/ntlm/ntlmv2_response.rb
139
82
  - lib/packetgen/plugin/smb.rb
140
83
  - lib/packetgen/plugin/smb/blocks.rb
141
84
  - lib/packetgen/plugin/smb/browser.rb
@@ -146,6 +89,10 @@ files:
146
89
  - lib/packetgen/plugin/smb/close/request.rb
147
90
  - lib/packetgen/plugin/smb/close/response.rb
148
91
  - lib/packetgen/plugin/smb/filetime.rb
92
+ - lib/packetgen/plugin/smb/negotiate.rb
93
+ - lib/packetgen/plugin/smb/negotiate/dialect.rb
94
+ - lib/packetgen/plugin/smb/negotiate/request.rb
95
+ - lib/packetgen/plugin/smb/negotiate/response.rb
149
96
  - lib/packetgen/plugin/smb/nt_create_and_x.rb
150
97
  - lib/packetgen/plugin/smb/ntcreateandx/request.rb
151
98
  - lib/packetgen/plugin/smb/ntcreateandx/response.rb
@@ -177,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
124
  requirements:
178
125
  - - ">="
179
126
  - !ruby/object:Gem::Version
180
- version: 2.3.0
127
+ version: 2.4.0
181
128
  required_rubygems_version: !ruby/object:Gem::Requirement
182
129
  requirements:
183
130
  - - ">="
@@ -185,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
132
  version: '0'
186
133
  requirements: []
187
134
  rubyforge_project:
188
- rubygems_version: 2.7.6
135
+ rubygems_version: 2.7.6.2
189
136
  signing_key:
190
137
  specification_version: 4
191
138
  summary: SMB plugin for packetgen.
@@ -1,12 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3
4
- - 2.4
5
- - 2.5
6
-
7
- install:
8
- - sudo apt-get update -qq
9
- - sudo apt-get install libpcap-dev -qq
10
- - bundle install --path vendor/bundle --jobs=3 --retry=3
11
- script:
12
- - bundle exec rake