ronin-exploits 1.0.0.beta2 → 1.0.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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -0
  3. data/README.md +29 -13
  4. data/gemspec.yml +10 -8
  5. data/lib/ronin/exploits/cli/commands/new.rb +1 -1
  6. data/lib/ronin/exploits/cli/commands/run.rb +55 -5
  7. data/lib/ronin/exploits/exploit.rb +7 -5
  8. data/lib/ronin/exploits/lfi.rb +1 -1
  9. data/lib/ronin/exploits/metadata/arch.rb +1 -1
  10. data/lib/ronin/exploits/metadata/default_filename.rb +1 -1
  11. data/lib/ronin/exploits/metadata/default_port.rb +1 -1
  12. data/lib/ronin/exploits/mixins/file_builder.rb +2 -2
  13. data/lib/ronin/exploits/mixins/nops.rb +1 -1
  14. data/lib/ronin/exploits/params/base_url.rb +1 -1
  15. data/lib/ronin/exploits/version.rb +1 -1
  16. data/ronin-exploits.gemspec +2 -1
  17. metadata +24 -129
  18. data/spec/advisory_spec.rb +0 -71
  19. data/spec/cli/exploit_command_spec.rb +0 -68
  20. data/spec/cli/exploit_methods_spec.rb +0 -208
  21. data/spec/cli/ruby_shell_spec.rb +0 -14
  22. data/spec/client_side_web_vuln_spec.rb +0 -117
  23. data/spec/exploit_spec.rb +0 -538
  24. data/spec/exploits_spec.rb +0 -8
  25. data/spec/heap_overflow_spec.rb +0 -14
  26. data/spec/lfi_spec.rb +0 -162
  27. data/spec/loot/file_spec.rb +0 -131
  28. data/spec/loot_spec.rb +0 -138
  29. data/spec/memory_corruption_spec.rb +0 -22
  30. data/spec/metadata/arch_spec.rb +0 -82
  31. data/spec/metadata/cookie_param_spec.rb +0 -67
  32. data/spec/metadata/default_filename_spec.rb +0 -62
  33. data/spec/metadata/default_port_spec.rb +0 -62
  34. data/spec/metadata/header_name_spec.rb +0 -67
  35. data/spec/metadata/os_spec.rb +0 -164
  36. data/spec/metadata/shouts_spec.rb +0 -100
  37. data/spec/metadata/url_path_spec.rb +0 -67
  38. data/spec/metadata/url_query_param_spec.rb +0 -67
  39. data/spec/mixins/binary_spec.rb +0 -129
  40. data/spec/mixins/build_dir.rb +0 -66
  41. data/spec/mixins/file_builder_spec.rb +0 -67
  42. data/spec/mixins/format_string_spec.rb +0 -44
  43. data/spec/mixins/has_payload_spec.rb +0 -333
  44. data/spec/mixins/has_targets_spec.rb +0 -434
  45. data/spec/mixins/html_spec.rb +0 -772
  46. data/spec/mixins/http_spec.rb +0 -1227
  47. data/spec/mixins/loot_spec.rb +0 -20
  48. data/spec/mixins/nops_spec.rb +0 -165
  49. data/spec/mixins/remote_tcp_spec.rb +0 -217
  50. data/spec/mixins/remote_udp_spec.rb +0 -217
  51. data/spec/mixins/seh_spec.rb +0 -89
  52. data/spec/mixins/stack_overflow_spec.rb +0 -87
  53. data/spec/mixins/text_spec.rb +0 -43
  54. data/spec/open_redirect_spec.rb +0 -71
  55. data/spec/params/base_url_spec.rb +0 -71
  56. data/spec/params/bind_host_spec.rb +0 -34
  57. data/spec/params/bind_port_spec.rb +0 -35
  58. data/spec/params/filename_spec.rb +0 -77
  59. data/spec/params/host_spec.rb +0 -34
  60. data/spec/params/port_spec.rb +0 -77
  61. data/spec/rfi_spec.rb +0 -107
  62. data/spec/seh_overflow_spec.rb +0 -18
  63. data/spec/spec_helper.rb +0 -8
  64. data/spec/sqli_spec.rb +0 -306
  65. data/spec/ssti_spec.rb +0 -121
  66. data/spec/stack_overflow_spec.rb +0 -18
  67. data/spec/target_spec.rb +0 -92
  68. data/spec/test_result_spec.rb +0 -32
  69. data/spec/use_after_free_spec.rb +0 -14
  70. data/spec/web_spec.rb +0 -12
  71. data/spec/web_vuln_spec.rb +0 -854
  72. data/spec/xss_spec.rb +0 -69
@@ -1,434 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/mixins/has_targets'
3
- require 'ronin/exploits/exploit'
4
-
5
- describe Ronin::Exploits::Mixins::HasTargets do
6
- module TestHasTargets
7
- class WithNoTargets < Ronin::Exploits::Exploit
8
- include Ronin::Exploits::Mixins::HasTargets
9
- end
10
-
11
- class WithOneTarget < Ronin::Exploits::Exploit
12
- include Ronin::Exploits::Mixins::HasTargets
13
-
14
- target arch: :x86_64, os: :linux, foo: 42
15
- end
16
-
17
- class InheritesTargets < WithOneTarget
18
- end
19
-
20
- class InheritesAndAddsTargets < WithOneTarget
21
- target arch: :arm, os: :linux, foo: 1337
22
- end
23
-
24
- class WitthMultipleTargets < Ronin::Exploits::Exploit
25
- include Ronin::Exploits::Mixins::HasTargets
26
-
27
- target arch: :x86_64, os: :linux, foo: 42
28
- target arch: :arm, os: :linux, foo: 1337
29
- end
30
- end
31
-
32
- describe ".targets" do
33
- subject { test_class }
34
-
35
- context "with there are no targets" do
36
- let(:test_class) { TestHasTargets::WithNoTargets }
37
-
38
- it "must default to []" do
39
- expect(subject.targets).to eq([])
40
- end
41
- end
42
-
43
- context "with at least one target" do
44
- let(:test_class) { TestHasTargets::WithOneTarget }
45
-
46
- it "must contain Ronin::Exploits::Target objects" do
47
- expect(subject.targets).to all(be_kind_of(Ronin::Exploits::Target))
48
- end
49
- end
50
-
51
- context "when the super-class defines it's own targets" do
52
- let(:test_class) { TestHasTargets::InheritesTargets }
53
- let(:super_class) { test_class.superclass }
54
-
55
- it "must inherit the targets from the super-class" do
56
- expect(subject.targets).to eq(super_class.targets)
57
- end
58
-
59
- context "but the sub-class defines additional targets" do
60
- let(:test_class) { TestHasTargets::InheritesAndAddsTargets }
61
-
62
- it "must combine the sub-classes targets with the super-classes" do
63
- expect(subject.targets).to include(*super_class.targets)
64
- end
65
-
66
- it "must not modify the superclasses targets" do
67
- expect(super_class.targets).to_not contain_exactly(*subject.targets)
68
- end
69
- end
70
- end
71
- end
72
-
73
- describe ".target" do
74
- context "when given keyword arguments" do
75
- module TestHasTargets
76
- class ExploitWithTargetWithKeywordArgs < Ronin::Exploits::Exploit
77
- include Ronin::Exploits::Mixins::HasTargets
78
-
79
- target arch: :x86_64, os: :linux, foo: 42
80
- end
81
- end
82
-
83
- subject { TestHasTargets::ExploitWithTargetWithKeywordArgs }
84
- let(:target) { subject.targets.last }
85
-
86
- it "must initialize a new Ronin::Exploits::Target and add it to .targets" do
87
- expect(target).to be_kind_of(Ronin::Exploits::Target)
88
- expect(target.arch).to eq(:x86_64)
89
- expect(target.os).to eq(:linux)
90
- expect(target.foo).to eq(42)
91
- end
92
-
93
- context "and when given a block" do
94
- module TestHasTargets
95
- class ExploitWithTargetWithKeywordArgsAndBlock < Ronin::Exploits::Exploit
96
- include Ronin::Exploits::Mixins::HasTargets
97
-
98
- target arch: :x86_64, os: :linux do |t|
99
- t.foo = 42
100
- end
101
- end
102
- end
103
-
104
- subject { TestHasTargets::ExploitWithTargetWithKeywordArgsAndBlock }
105
- let(:target) { subject.targets.last }
106
-
107
- it "must initialize a new Ronin::Exploits::Target and add it to .targets" do
108
- expect(target).to be_kind_of(Ronin::Exploits::Target)
109
- expect(target.arch).to eq(:x86_64)
110
- expect(target.os).to eq(:linux)
111
- expect(target.foo).to eq(42)
112
- end
113
- end
114
- end
115
- end
116
-
117
- module TestHasTargets
118
- class ExampleExploit < Ronin::Exploits::Exploit
119
- include Ronin::Exploits::Mixins::HasTargets
120
-
121
- target arch: :x86_64,
122
- os: :linux,
123
- os_version: '5.18.1',
124
- software: 'Apache',
125
- version: '2.4.53',
126
- foo: 1
127
-
128
- target arch: :arm,
129
- os: :macos,
130
- os_version: '10.13',
131
- software: 'nginx',
132
- version: '1.22.0',
133
- foo: 2
134
- end
135
- end
136
-
137
- let(:test_class) { TestHasTargets::ExampleExploit }
138
- subject { test_class.new }
139
-
140
- describe "#initialize" do
141
- context "when not given the target: keyword argument" do
142
- it "must default #target to nil" do
143
- expect(subject.target).to be(nil)
144
- end
145
- end
146
-
147
- context "when given the target: keyword argument" do
148
- context "and it's a Hash" do
149
- subject do
150
- test_class.new(target: {os: :macos, os_version: '10.13'})
151
- end
152
-
153
- it "must select the matching target from .targets and set #target" do
154
- expect(subject.target).to be(test_class.targets[1])
155
- end
156
- end
157
-
158
- context "and it's an Integer" do
159
- let(:target_index) { 1 }
160
-
161
- subject { test_class.new(target: target_index) }
162
-
163
- it "must select the target from .targets at the given index" do
164
- expect(subject.target).to be(test_class.targets[target_index])
165
- end
166
- end
167
- end
168
- end
169
-
170
- describe "#target=" do
171
- context "when given a Target object" do
172
- let(:target ) { Ronin::Exploits::Target.new }
173
-
174
- before { subject.target = target }
175
-
176
- it "must set #target to nil" do
177
- expect(subject.target).to be(target)
178
- end
179
- end
180
-
181
- context "when given an Integer" do
182
- let(:target_index) { 1 }
183
-
184
- before { subject.target = target_index }
185
-
186
- it "must set the target from .targets at the given index" do
187
- expect(subject.target).to be(test_class.targets[target_index])
188
- end
189
-
190
- context "but the index is out of bounds" do
191
- let(:index) { 9000 }
192
-
193
- it do
194
- expect {
195
- subject.target = index
196
- }.to raise_error(described_class::NoMatchingTarget,"target index is out of bounds: #{index.inspect}")
197
- end
198
- end
199
- end
200
-
201
- context "when given a Target object" do
202
- before do
203
- subject.target = Ronin::Exploits::Target.new
204
- subject.target = nil
205
- end
206
-
207
- it "must set #target to nil" do
208
- expect(subject.target).to be(nil)
209
- end
210
- end
211
- end
212
-
213
- describe "#perform_validate" do
214
- context "when #target is set" do
215
- before { subject.target = subject.class.targets[0] }
216
-
217
- it "must not raise NoTargetSelected" do
218
- expect {
219
- subject.perform_validate
220
- }.to_not raise_error
221
- end
222
-
223
- it "must call #validate_params first" do
224
- expect(subject).to receive(:validate_params)
225
-
226
- subject.perform_validate
227
- end
228
- end
229
-
230
- context "when #target is not set" do
231
- it do
232
- expect {
233
- subject.perform_validate
234
- }.to raise_error(described_class::NoTargetSelected,"no target was selected")
235
- end
236
- end
237
- end
238
-
239
- describe "#select_target" do
240
- context "when given no keyword arguments" do
241
- subject do
242
- test_class.new(target: {os: :macos, os_version: '10.13'})
243
- end
244
-
245
- it "must return the first target in .targets and set #target" do
246
- subject.select_target
247
-
248
- expect(subject.target).to be(test_class.targets.first)
249
- end
250
- end
251
-
252
- context "when given the arch: keyword argument" do
253
- let(:arch) { :arm }
254
-
255
- it "must find the target in .targets with the matching #arch" do
256
- subject.select_target(arch: arch)
257
-
258
- expect(subject.target.arch).to eq(arch)
259
- end
260
- end
261
-
262
- context "when given the os: keyword argument" do
263
- let(:os) { :macos }
264
-
265
- it "must find the target in .targets with the matching #os" do
266
- subject.select_target(os: os)
267
-
268
- expect(subject.target.os).to eq(os)
269
- end
270
- end
271
-
272
- context "when given the os_version: keyword argument" do
273
- let(:os_version) { '10.13' }
274
-
275
- it "must find the target in .targets with the matching #os_version" do
276
- subject.select_target(os_version: os_version)
277
-
278
- expect(subject.target.os_version).to eq(os_version)
279
- end
280
- end
281
-
282
- context "when given the software: keyword argument" do
283
- let(:software) { 'nginx' }
284
-
285
- it "must find the target in .targets with the matching #software" do
286
- subject.select_target(software: software)
287
-
288
- expect(subject.target.software).to eq(software)
289
- end
290
- end
291
-
292
- context "when given the version: keyword argument" do
293
- let(:version) { '1.22.0' }
294
-
295
- it "must find the target in .targets with the matching #version" do
296
- subject.select_target(version: version)
297
-
298
- expect(subject.target.version).to eq(version)
299
- end
300
- end
301
-
302
- context "when given multiple keyword arguments" do
303
- let(:arch) { :arm }
304
- let(:os) { :macos }
305
- let(:os_version) { '10.13' }
306
- let(:software) { 'nginx' }
307
- let(:version) { '1.22.0' }
308
-
309
- it "must find the target in .targets which matches all given values" do
310
- subject.select_target(
311
- arch: arch,
312
- os: os,
313
- os_version: os_version,
314
- software: software,
315
- version: version
316
- )
317
-
318
- expect(subject.target.arch).to eq(arch)
319
- expect(subject.target.os).to eq(os)
320
- expect(subject.target.os_version).to eq(os_version)
321
- expect(subject.target.software).to eq(software)
322
- expect(subject.target.version).to eq(version)
323
- end
324
- end
325
-
326
- context "but when no matching target could be found in .targets" do
327
- it do
328
- expect {
329
- subject.select_target(arch: :foo)
330
- }.to raise_error(described_class::NoMatchingTarget,"could not find any matching targets")
331
- end
332
- end
333
- end
334
-
335
- describe "#arch" do
336
- context "when a target has been set" do
337
- subject do
338
- test_class.new(target: {arch: :arm})
339
- end
340
-
341
- it "must return the #target's #arch" do
342
- expect(subject.arch).to eq(subject.target.arch)
343
- end
344
- end
345
-
346
- context "when no target has been set" do
347
- subject { test_class.new }
348
-
349
- it "must return nil" do
350
- expect(subject.arch).to be(nil)
351
- end
352
- end
353
- end
354
-
355
- describe "#os" do
356
- context "when a target has been set" do
357
- subject do
358
- test_class.new(target: {os: :macos})
359
- end
360
-
361
- it "must return the #target's #os" do
362
- expect(subject.os).to eq(subject.target.os)
363
- end
364
- end
365
-
366
- context "when no target has been set" do
367
- subject { test_class.new }
368
-
369
- it "must return nil" do
370
- expect(subject.os).to be(nil)
371
- end
372
- end
373
- end
374
-
375
- describe "#os_version" do
376
- context "when a target has been set" do
377
- subject do
378
- test_class.new(target: {os_version: '10.13'})
379
- end
380
-
381
- it "must return the #target's #os_version" do
382
- expect(subject.os_version).to eq(subject.target.os_version)
383
- end
384
- end
385
-
386
- context "when no target has been set" do
387
- subject { test_class.new }
388
-
389
- it "must return nil" do
390
- expect(subject.os_version).to be(nil)
391
- end
392
- end
393
- end
394
-
395
- describe "#software" do
396
- context "when a target has been set" do
397
- subject do
398
- test_class.new(target: {software: 'nginx'})
399
- end
400
-
401
- it "must return the #target's #software" do
402
- expect(subject.software).to eq(subject.target.software)
403
- end
404
- end
405
-
406
- context "when no target has been set" do
407
- subject { test_class.new }
408
-
409
- it "must return nil" do
410
- expect(subject.software).to be(nil)
411
- end
412
- end
413
- end
414
-
415
- describe "#version" do
416
- context "when a target has been set" do
417
- subject do
418
- test_class.new(target: {version: '1.22.0'})
419
- end
420
-
421
- it "must return the #target's #version" do
422
- expect(subject.version).to eq(subject.target.version)
423
- end
424
- end
425
-
426
- context "when no target has been set" do
427
- subject { test_class.new }
428
-
429
- it "must return nil" do
430
- expect(subject.version).to be(nil)
431
- end
432
- end
433
- end
434
- end