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,117 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/client_side_web_vuln'
3
- require 'ronin/vulns/web_vuln'
4
-
5
- describe Ronin::Exploits::ClientSideWebVuln do
6
- module TestClientSideWebVuln
7
- class TestExploit < Ronin::Exploits::ClientSideWebVuln
8
- base_path '/Templatize.asp'
9
- query_param 'item'
10
-
11
- def vuln
12
- @vuln ||= Ronin::Vulns::WebVuln.new(url, **web_vuln_kwargs)
13
- end
14
- end
15
- end
16
-
17
- let(:exploit_class) { TestClientSideWebVuln::TestExploit }
18
- let(:base_url) { 'http://testasp.vulnweb.com/' }
19
- let(:query) { 'item=html/about.html' }
20
- let(:query_param) { 'item' }
21
- let(:payload) { 'test payload' }
22
-
23
- subject do
24
- exploit_class.new(
25
- payload: payload,
26
- params: {
27
- base_url: base_url
28
- }
29
- )
30
- end
31
-
32
- it "must define a 'format' param" do
33
- expect(described_class.params[:format]).to_not be(nil)
34
- expect(described_class.params[:format].type).to be_kind_of(Ronin::Core::Params::Types::Enum)
35
- expect(described_class.params[:format].type.values).to eq([:http, :curl])
36
- expect(described_class.params[:format].desc).to eq('Output format')
37
- end
38
-
39
- describe "#format_exploit" do
40
- context "when the 'format' param is :http" do
41
- subject do
42
- exploit_class.new(
43
- payload: payload,
44
- params: {
45
- base_url: base_url,
46
- format: :http
47
- }
48
- )
49
- end
50
-
51
- it "must call #to_http on the #vuln object" do
52
- expect(subject.format_exploit).to eq(subject.vuln.to_http(payload))
53
- end
54
- end
55
-
56
- context "when the 'format' param is :curl" do
57
- subject do
58
- exploit_class.new(
59
- payload: payload,
60
- params: {
61
- base_url: base_url,
62
- format: :curl
63
- }
64
- )
65
- end
66
-
67
- it "must call #to_curl on the #vuln object" do
68
- expect(subject.format_exploit).to eq(subject.vuln.to_curl(payload))
69
- end
70
- end
71
- end
72
-
73
- describe "#launch" do
74
- context "when the 'format' param is :http" do
75
- subject do
76
- exploit_class.new(
77
- payload: payload,
78
- params: {
79
- base_url: base_url,
80
- format: :http
81
- }
82
- )
83
- end
84
-
85
- it "must print out a message and the exploit formatted as an HTTP request" do
86
- expect(subject).to receive(:print_info).with("Copy and paste the following exploit:")
87
- expect(subject).to receive(:puts)
88
- expect(subject).to receive(:puts).with(subject.vuln.to_http(payload))
89
- expect(subject).to receive(:puts)
90
-
91
- subject.launch
92
- end
93
- end
94
-
95
- context "when the 'format' param is :curl" do
96
- subject do
97
- exploit_class.new(
98
- payload: payload,
99
- params: {
100
- base_url: base_url,
101
- format: :curl
102
- }
103
- )
104
- end
105
-
106
-
107
- it "must print out a message and the exploit formatted as an HTTP request" do
108
- expect(subject).to receive(:print_info).with("Copy and paste the following exploit:")
109
- expect(subject).to receive(:puts)
110
- expect(subject).to receive(:puts).with(subject.vuln.to_curl(payload))
111
- expect(subject).to receive(:puts)
112
-
113
- subject.launch
114
- end
115
- end
116
- end
117
- end
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