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
@@ -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