ronin-exploits 1.0.0.beta2 → 1.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -0
  3. data/README.md +4 -0
  4. data/gemspec.yml +3 -1
  5. data/lib/ronin/exploits/cli/commands/run.rb +55 -5
  6. data/lib/ronin/exploits/version.rb +1 -1
  7. data/ronin-exploits.gemspec +2 -1
  8. metadata +10 -115
  9. data/spec/advisory_spec.rb +0 -71
  10. data/spec/cli/exploit_command_spec.rb +0 -68
  11. data/spec/cli/exploit_methods_spec.rb +0 -208
  12. data/spec/cli/ruby_shell_spec.rb +0 -14
  13. data/spec/client_side_web_vuln_spec.rb +0 -117
  14. data/spec/exploit_spec.rb +0 -538
  15. data/spec/exploits_spec.rb +0 -8
  16. data/spec/heap_overflow_spec.rb +0 -14
  17. data/spec/lfi_spec.rb +0 -162
  18. data/spec/loot/file_spec.rb +0 -131
  19. data/spec/loot_spec.rb +0 -138
  20. data/spec/memory_corruption_spec.rb +0 -22
  21. data/spec/metadata/arch_spec.rb +0 -82
  22. data/spec/metadata/cookie_param_spec.rb +0 -67
  23. data/spec/metadata/default_filename_spec.rb +0 -62
  24. data/spec/metadata/default_port_spec.rb +0 -62
  25. data/spec/metadata/header_name_spec.rb +0 -67
  26. data/spec/metadata/os_spec.rb +0 -164
  27. data/spec/metadata/shouts_spec.rb +0 -100
  28. data/spec/metadata/url_path_spec.rb +0 -67
  29. data/spec/metadata/url_query_param_spec.rb +0 -67
  30. data/spec/mixins/binary_spec.rb +0 -129
  31. data/spec/mixins/build_dir.rb +0 -66
  32. data/spec/mixins/file_builder_spec.rb +0 -67
  33. data/spec/mixins/format_string_spec.rb +0 -44
  34. data/spec/mixins/has_payload_spec.rb +0 -333
  35. data/spec/mixins/has_targets_spec.rb +0 -434
  36. data/spec/mixins/html_spec.rb +0 -772
  37. data/spec/mixins/http_spec.rb +0 -1227
  38. data/spec/mixins/loot_spec.rb +0 -20
  39. data/spec/mixins/nops_spec.rb +0 -165
  40. data/spec/mixins/remote_tcp_spec.rb +0 -217
  41. data/spec/mixins/remote_udp_spec.rb +0 -217
  42. data/spec/mixins/seh_spec.rb +0 -89
  43. data/spec/mixins/stack_overflow_spec.rb +0 -87
  44. data/spec/mixins/text_spec.rb +0 -43
  45. data/spec/open_redirect_spec.rb +0 -71
  46. data/spec/params/base_url_spec.rb +0 -71
  47. data/spec/params/bind_host_spec.rb +0 -34
  48. data/spec/params/bind_port_spec.rb +0 -35
  49. data/spec/params/filename_spec.rb +0 -77
  50. data/spec/params/host_spec.rb +0 -34
  51. data/spec/params/port_spec.rb +0 -77
  52. data/spec/rfi_spec.rb +0 -107
  53. data/spec/seh_overflow_spec.rb +0 -18
  54. data/spec/spec_helper.rb +0 -8
  55. data/spec/sqli_spec.rb +0 -306
  56. data/spec/ssti_spec.rb +0 -121
  57. data/spec/stack_overflow_spec.rb +0 -18
  58. data/spec/target_spec.rb +0 -92
  59. data/spec/test_result_spec.rb +0 -32
  60. data/spec/use_after_free_spec.rb +0 -14
  61. data/spec/web_spec.rb +0 -12
  62. data/spec/web_vuln_spec.rb +0 -854
  63. data/spec/xss_spec.rb +0 -69
data/spec/exploit_spec.rb DELETED
@@ -1,538 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/exploit'
3
-
4
- describe Ronin::Exploits::Exploit do
5
- it "must include Ronin::Core::Metadata::ID" do
6
- expect(described_class).to include(Ronin::Core::Metadata::ID)
7
- end
8
-
9
- it "must include Ronin::Core::Metadata::Authors" do
10
- expect(described_class).to include(Ronin::Core::Metadata::Authors)
11
- end
12
-
13
- it "must include Ronin::Core::Metadata::Summary" do
14
- expect(described_class).to include(Ronin::Core::Metadata::Summary)
15
- end
16
-
17
- it "must include Ronin::Core::Metadata::Description" do
18
- expect(described_class).to include(Ronin::Core::Metadata::Description)
19
- end
20
-
21
- it "must include Ronin::Core::Metadata::References" do
22
- expect(described_class).to include(Ronin::Core::Metadata::References)
23
- end
24
-
25
- it "must include Ronin::Core::Params::Mixin" do
26
- expect(described_class).to include(Ronin::Core::Params::Mixin)
27
- end
28
-
29
- it "must include Ronin::Support::CLI::Printing" do
30
- expect(described_class).to include(Ronin::Support::CLI::Printing)
31
- end
32
-
33
- describe ".register" do
34
- context "when .register is not called in the Exploit class" do
35
- module TestExploits
36
- class UnregisteredExploit < Ronin::Exploits::Exploit
37
- end
38
- end
39
-
40
- subject { TestExploits::UnregisteredExploit }
41
-
42
- it "must not set .id" do
43
- expect(subject.id).to be(nil)
44
- end
45
- end
46
-
47
- context "when .register is called in the Exploit class" do
48
- module TestExploits
49
- class RegisteredExploit < Ronin::Exploits::Exploit
50
- register 'registered_exploit'
51
- end
52
- end
53
-
54
- subject { TestExploits::RegisteredExploit }
55
-
56
- it "must set .id" do
57
- expect(subject.id).to eq('registered_exploit')
58
- end
59
-
60
- it "must add the exploit class to Exploits.registry" do
61
- expect(Ronin::Exploits.registry['registered_exploit']).to be(subject)
62
- end
63
- end
64
- end
65
-
66
- describe ".quality" do
67
- context "when the quality is not set in the Exploit class" do
68
- module TestExploits
69
- class ExploitWithoutQuality < Ronin::Exploits::Exploit
70
- end
71
- end
72
-
73
- subject { TestExploits::ExploitWithoutQuality }
74
-
75
- it "must default to nil" do
76
- expect(subject.quality).to be(nil)
77
- end
78
- end
79
-
80
- context "when the quality is set in the Exploit class" do
81
- module TestExploits
82
- class ExploitWithQuality < Ronin::Exploits::Exploit
83
- quality :high
84
- end
85
- end
86
-
87
- subject { TestExploits::ExploitWithQuality }
88
-
89
- it "must return the set quality" do
90
- expect(subject.quality).to be(:high)
91
- end
92
- end
93
- end
94
-
95
- describe ".release_date" do
96
- context "when the release_date is not set in the Exploit class" do
97
- module TestExploits
98
- class ExploitWithoutReleaseDate < Ronin::Exploits::Exploit
99
- end
100
- end
101
-
102
- subject { TestExploits::ExploitWithoutReleaseDate }
103
-
104
- it "must default to nil" do
105
- expect(subject.release_date).to be(nil)
106
- end
107
- end
108
-
109
- context "when the release_date is set in the Exploit class" do
110
- module TestExploits
111
- class ExploitWithReleaseDate < Ronin::Exploits::Exploit
112
- release_date '2022-01-02'
113
- end
114
- end
115
-
116
- subject { TestExploits::ExploitWithReleaseDate }
117
-
118
- it "must return the set release_date as a Date object" do
119
- expect(subject.release_date).to be_kind_of(Date)
120
- expect(subject.release_date.year).to eq(2022)
121
- expect(subject.release_date.month).to eq(1)
122
- expect(subject.release_date.day).to eq(2)
123
- end
124
- end
125
- end
126
-
127
- describe ".released?" do
128
- context "when the release_date is not set in the Exploit class" do
129
- module TestExploits
130
- class ExploitWithoutReleaseDate < Ronin::Exploits::Exploit
131
- end
132
- end
133
-
134
- subject { TestExploits::ExploitWithoutReleaseDate }
135
-
136
- it "must return false" do
137
- expect(subject.released?).to be(false)
138
- end
139
- end
140
-
141
- context "when the release_date is set in the Exploit class" do
142
- module TestExploits
143
- class ExploitWithReleaseDate < Ronin::Exploits::Exploit
144
- release_date '2022-01-02'
145
- end
146
- end
147
-
148
- subject { TestExploits::ExploitWithReleaseDate }
149
-
150
- it "must return true" do
151
- expect(subject.released?).to be(true)
152
- end
153
- end
154
- end
155
-
156
- describe ".disclosure_date" do
157
- context "when the disclosure_date is not set in the Exploit class" do
158
- module TestExploits
159
- class ExploitWithoutDisclosureDate < Ronin::Exploits::Exploit
160
- end
161
- end
162
-
163
- subject { TestExploits::ExploitWithoutDisclosureDate }
164
-
165
- it "must default to nil" do
166
- expect(subject.disclosure_date).to be(nil)
167
- end
168
- end
169
-
170
- context "when the disclosure_date is set in the Exploit class" do
171
- module TestExploits
172
- class ExploitWithDisclosureDate < Ronin::Exploits::Exploit
173
- disclosure_date '2022-01-02'
174
- end
175
- end
176
-
177
- subject { TestExploits::ExploitWithDisclosureDate }
178
-
179
- it "must return the set disclosure_date as a Date object" do
180
- expect(subject.disclosure_date).to be_kind_of(Date)
181
- expect(subject.disclosure_date.year).to eq(2022)
182
- expect(subject.disclosure_date.month).to eq(1)
183
- expect(subject.disclosure_date.day).to eq(2)
184
- end
185
- end
186
- end
187
-
188
- describe ".disclosed?" do
189
- context "when the disclosure_date is not set in the Exploit class" do
190
- module TestExploits
191
- class ExploitWithoutDisclosureDate < Ronin::Exploits::Exploit
192
- end
193
- end
194
-
195
- subject { TestExploits::ExploitWithoutDisclosureDate }
196
-
197
- it "must return false" do
198
- expect(subject.disclosed?).to be(false)
199
- end
200
- end
201
-
202
- context "when the disclosure_date is set in the Exploit class" do
203
- module TestExploits
204
- class ExploitWithDisclosureDate < Ronin::Exploits::Exploit
205
- disclosure_date '2022-01-02'
206
- end
207
- end
208
-
209
- subject { TestExploits::ExploitWithDisclosureDate }
210
-
211
- it "must return true" do
212
- expect(subject.disclosed?).to be(true)
213
- end
214
- end
215
- end
216
-
217
- describe ".advisries" do
218
- module TestExploits
219
- class ExploitWithEmptyAdvisories < Ronin::Exploits::Exploit
220
- end
221
- end
222
-
223
- subject { TestExploits::ExploitWithEmptyAdvisories }
224
-
225
- it "must default to an empty Set" do
226
- expect(subject.advisories).to eq(Set[])
227
- end
228
- end
229
-
230
- describe ".advisory" do
231
- module TestExploits
232
- class ExploitWithAdvisories < Ronin::Exploits::Exploit
233
- advisory 'CVE-2022-1234'
234
- end
235
- end
236
-
237
- subject { TestExploits::ExploitWithAdvisories }
238
-
239
- it "must add an Ronin::Exploits::Advisory object to .advisories" do
240
- expect(subject.advisories).to_not be_empty
241
- expect(subject.advisories).to all(be_kind_of(Ronin::Exploits::Advisory))
242
- end
243
-
244
- context "when no URL is given" do
245
- context "and the advisory ID begins with 'CVE-' or 'GHSA-'" do
246
- let(:advisory) { subject.advisories.first }
247
-
248
- it "must generate the URL based on the advisory ID" do
249
- expect(advisory.url).to eq("https://nvd.nist.gov/vuln/detail/CVE-2022-1234")
250
- end
251
- end
252
-
253
- context "but the advisory ID does is not from a recognized vendor" do
254
- module TestExploits
255
- class ExploitWithUnrecognizedAdvisoryID < Ronin::Exploits::Exploit
256
- advisory 'FOO-12345'
257
- end
258
- end
259
-
260
- subject { TestExploits::ExploitWithUnrecognizedAdvisoryID }
261
-
262
- let(:advisory) { subject.advisories.first }
263
-
264
- it "must default the advisory URL to nil" do
265
- expect(advisory.url).to be(nil)
266
- end
267
- end
268
- end
269
-
270
- context "when a URL is given with the advisory ID" do
271
- module TestExploits
272
- class ExploitWithAdvisoryIDAndURL < Ronin::Exploits::Exploit
273
- advisory 'FOO-12345', 'https://www.foosec.org/FOO-12345'
274
- end
275
- end
276
-
277
- subject { TestExploits::ExploitWithAdvisoryIDAndURL }
278
-
279
- let(:advisory) { subject.advisories.first }
280
-
281
- it "must set the URL of the advisory" do
282
- expect(advisory.url).to eq("https://www.foosec.org/FOO-12345")
283
- end
284
- end
285
- end
286
-
287
- describe ".software" do
288
- module TestExploitSoftware
289
- class WithNoSoftwareSet < Ronin::Exploits::Exploit
290
- end
291
-
292
- class WithSoftwareSet < Ronin::Exploits::Exploit
293
- software 'TestWare'
294
- end
295
-
296
- class InheritsItsSoftware < WithSoftwareSet
297
- end
298
-
299
- class OverridesItsInheritedSoftware < WithSoftwareSet
300
- software 'TestWare Deluxe'
301
- end
302
- end
303
-
304
- subject { test_class }
305
-
306
- context "and when software is not set in the class" do
307
- let(:test_class) { TestExploitSoftware::WithNoSoftwareSet }
308
-
309
- it "must default to nil" do
310
- expect(subject.software).to be(nil)
311
- end
312
- end
313
-
314
- context "and when software is set in the class" do
315
- let(:test_class) { TestExploitSoftware::WithSoftwareSet }
316
-
317
- it "must return the set software" do
318
- expect(subject.software).to eq('TestWare')
319
- end
320
- end
321
-
322
- context "but when the software was set in the superclass" do
323
- let(:test_class) { TestExploitSoftware::InheritsItsSoftware }
324
-
325
- it "must return the software set in the superclass" do
326
- expect(subject.software).to eq('TestWare')
327
- end
328
-
329
- context "but the software is overridden in the sub-class" do
330
- let(:test_class) { TestExploitSoftware::OverridesItsInheritedSoftware }
331
-
332
- it "must return the software set in the sub-class" do
333
- expect(subject.software).to eq('TestWare Deluxe')
334
- end
335
- end
336
- end
337
- end
338
-
339
- describe ".software" do
340
- module TestExploitSoftwareVersions
341
- class WithNoSoftwareVersionsSet < Ronin::Exploits::Exploit
342
- end
343
-
344
- class WithSoftwareVersionsSet < Ronin::Exploits::Exploit
345
- software_versions %w[
346
- 0.1.0
347
- 0.2.0
348
- 0.3.0
349
- ]
350
- end
351
-
352
- class InheritsItsSoftwareVersions < WithSoftwareVersionsSet
353
- end
354
-
355
- class OverridesItsInheritedSoftwareVersions < WithSoftwareVersionsSet
356
- software_versions %w[
357
- 1.0.0
358
- 1.0.1
359
- 1.0.2
360
- ]
361
- end
362
- end
363
-
364
- subject { test_class }
365
-
366
- context "and when software versions are not set in the class" do
367
- let(:test_class) { TestExploitSoftwareVersions::WithNoSoftwareVersionsSet }
368
-
369
- it "must default to nil" do
370
- expect(subject.software_versions).to be(nil)
371
- end
372
- end
373
-
374
- context "and when software versions are set in the class" do
375
- let(:test_class) { TestExploitSoftwareVersions::WithSoftwareVersionsSet }
376
-
377
- it "must return the set software" do
378
- expect(subject.software_versions).to eq(['0.1.0', '0.2.0', '0.3.0'])
379
- end
380
- end
381
-
382
- context "but when the software versions was set in the superclass" do
383
- let(:test_class) { TestExploitSoftwareVersions::InheritsItsSoftwareVersions }
384
-
385
- it "must return the software versions set in the superclass" do
386
- expect(subject.software_versions).to eq(['0.1.0', '0.2.0', '0.3.0'])
387
- end
388
-
389
- context "but the software versions are overridden in the sub-class" do
390
- let(:test_class) { TestExploitSoftwareVersions::OverridesItsInheritedSoftwareVersions }
391
-
392
- it "must return the software versions set in the sub-class" do
393
- expect(subject.software_versions).to eq(['1.0.0', '1.0.1', '1.0.2'])
394
- end
395
- end
396
- end
397
- end
398
-
399
- describe ".exploit_type" do
400
- subject { described_class }
401
-
402
- it { expect(subject.exploit_type).to eq(:exploit) }
403
- end
404
-
405
- describe "#perform_validate" do
406
- it "must call #validate_params" do
407
- expect(subject).to receive(:validate_params)
408
-
409
- subject.perform_validate
410
- end
411
-
412
- it "must also call #validate" do
413
- expect(subject).to receive(:validate)
414
-
415
- subject.perform_validate
416
- end
417
- end
418
-
419
- describe "#perform_test" do
420
- subject { described_class.new }
421
-
422
- it "must call #test" do
423
- expect(subject).to receive(:test)
424
-
425
- subject.perform_test
426
- end
427
- end
428
-
429
- describe "#test" do
430
- it "must return a Test::Unknown value" do
431
- expect(subject.test).to be_kind_of(Ronin::Exploits::TestResult::Unknown)
432
- expect(subject.test.message).to eq("no vulnerability testing logic defined")
433
- end
434
- end
435
-
436
- describe "#build" do
437
- subject { described_class.new }
438
-
439
- it "must return nil by default" do
440
- expect(subject.build).to be(nil)
441
- end
442
-
443
- it "must not set @payload by default" do
444
- subject.build
445
-
446
- expect(subject.instance_variable_get('@payload')).to be(nil)
447
- end
448
- end
449
-
450
- describe "#perform_build" do
451
- subject { described_class.new }
452
-
453
- it "must call #build" do
454
- expect(subject).to receive(:build)
455
-
456
- subject.perform_build
457
- end
458
- end
459
-
460
- describe "#launch" do
461
- subject { described_class.new }
462
-
463
- it "must return nil by default" do
464
- expect(subject.launch).to be(nil)
465
- end
466
- end
467
-
468
- describe "#perform_launch" do
469
- subject { described_class.new }
470
-
471
- it "must call #launch" do
472
- expect(subject).to receive(:launch)
473
-
474
- subject.perform_launch
475
- end
476
- end
477
-
478
- describe "#cleanup" do
479
- subject { described_class.new }
480
-
481
- it "must return nil by default" do
482
- expect(subject.cleanup).to be(nil)
483
- end
484
- end
485
-
486
- describe "#perform_cleanup" do
487
- subject { described_class.new }
488
-
489
- it "must call #cleanup" do
490
- expect(subject).to receive(:cleanup)
491
-
492
- subject.perform_cleanup
493
- end
494
- end
495
-
496
- describe "#exploit" do
497
- it "must call #build and #launch" do
498
- expect(subject).to receive(:build)
499
- expect(subject).to receive(:launch)
500
-
501
- subject.exploit
502
- end
503
-
504
- it "must return self" do
505
- expect(subject.exploit).to be(subject)
506
- end
507
-
508
- context "when given a block" do
509
- it "must call #build, #prelaunch, #launch, yield, then and #cleanup" do
510
- expect(subject).to receive(:build)
511
- expect(subject).to receive(:launch)
512
- expect(subject).to receive(:cleanup)
513
-
514
- expect { |b| subject.exploit(&b) }.to yield_with_args(subject)
515
- end
516
- end
517
-
518
- context "when given the dry_run: true keyword argument" do
519
- it "should not deploy during a dry-run of the exploit" do
520
- expect(subject).to receive(:build)
521
- expect(subject).to_not receive(:launch)
522
- expect(subject).to_not receive(:cleanup)
523
-
524
- subject.exploit(dry_run: true)
525
- end
526
- end
527
- end
528
-
529
- describe "#fail" do
530
- let(:message) { "exploit failed" }
531
-
532
- it "must raise an ExploitFailed exception with the given message" do
533
- expect {
534
- subject.fail(message)
535
- }.to raise_error(Ronin::Exploits::ExploitFailed,message)
536
- end
537
- end
538
- end
@@ -1,8 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits'
3
-
4
- describe Ronin::Exploits do
5
- it "should have a version" do
6
- expect(subject.const_defined?('VERSION')).to eq(true)
7
- end
8
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/heap_overflow'
3
-
4
- describe Ronin::Exploits::HeapOverflow do
5
- it "must inherit from Ronin::Exploits::MemoryCorruption" do
6
- expect(described_class).to be < Ronin::Exploits::MemoryCorruption
7
- end
8
-
9
- describe ".exploit_type" do
10
- subject { described_class }
11
-
12
- it { expect(subject.exploit_type).to eq(:heap_overflow) }
13
- end
14
- end