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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -0
- data/README.md +29 -13
- data/gemspec.yml +10 -8
- data/lib/ronin/exploits/cli/commands/new.rb +1 -1
- data/lib/ronin/exploits/cli/commands/run.rb +55 -5
- data/lib/ronin/exploits/exploit.rb +7 -5
- data/lib/ronin/exploits/lfi.rb +1 -1
- data/lib/ronin/exploits/metadata/arch.rb +1 -1
- data/lib/ronin/exploits/metadata/default_filename.rb +1 -1
- data/lib/ronin/exploits/metadata/default_port.rb +1 -1
- data/lib/ronin/exploits/mixins/file_builder.rb +2 -2
- data/lib/ronin/exploits/mixins/nops.rb +1 -1
- data/lib/ronin/exploits/params/base_url.rb +1 -1
- data/lib/ronin/exploits/version.rb +1 -1
- data/ronin-exploits.gemspec +2 -1
- metadata +24 -129
- data/spec/advisory_spec.rb +0 -71
- data/spec/cli/exploit_command_spec.rb +0 -68
- data/spec/cli/exploit_methods_spec.rb +0 -208
- data/spec/cli/ruby_shell_spec.rb +0 -14
- data/spec/client_side_web_vuln_spec.rb +0 -117
- data/spec/exploit_spec.rb +0 -538
- data/spec/exploits_spec.rb +0 -8
- data/spec/heap_overflow_spec.rb +0 -14
- data/spec/lfi_spec.rb +0 -162
- data/spec/loot/file_spec.rb +0 -131
- data/spec/loot_spec.rb +0 -138
- data/spec/memory_corruption_spec.rb +0 -22
- data/spec/metadata/arch_spec.rb +0 -82
- data/spec/metadata/cookie_param_spec.rb +0 -67
- data/spec/metadata/default_filename_spec.rb +0 -62
- data/spec/metadata/default_port_spec.rb +0 -62
- data/spec/metadata/header_name_spec.rb +0 -67
- data/spec/metadata/os_spec.rb +0 -164
- data/spec/metadata/shouts_spec.rb +0 -100
- data/spec/metadata/url_path_spec.rb +0 -67
- data/spec/metadata/url_query_param_spec.rb +0 -67
- data/spec/mixins/binary_spec.rb +0 -129
- data/spec/mixins/build_dir.rb +0 -66
- data/spec/mixins/file_builder_spec.rb +0 -67
- data/spec/mixins/format_string_spec.rb +0 -44
- data/spec/mixins/has_payload_spec.rb +0 -333
- data/spec/mixins/has_targets_spec.rb +0 -434
- data/spec/mixins/html_spec.rb +0 -772
- data/spec/mixins/http_spec.rb +0 -1227
- data/spec/mixins/loot_spec.rb +0 -20
- data/spec/mixins/nops_spec.rb +0 -165
- data/spec/mixins/remote_tcp_spec.rb +0 -217
- data/spec/mixins/remote_udp_spec.rb +0 -217
- data/spec/mixins/seh_spec.rb +0 -89
- data/spec/mixins/stack_overflow_spec.rb +0 -87
- data/spec/mixins/text_spec.rb +0 -43
- data/spec/open_redirect_spec.rb +0 -71
- data/spec/params/base_url_spec.rb +0 -71
- data/spec/params/bind_host_spec.rb +0 -34
- data/spec/params/bind_port_spec.rb +0 -35
- data/spec/params/filename_spec.rb +0 -77
- data/spec/params/host_spec.rb +0 -34
- data/spec/params/port_spec.rb +0 -77
- data/spec/rfi_spec.rb +0 -107
- data/spec/seh_overflow_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -8
- data/spec/sqli_spec.rb +0 -306
- data/spec/ssti_spec.rb +0 -121
- data/spec/stack_overflow_spec.rb +0 -18
- data/spec/target_spec.rb +0 -92
- data/spec/test_result_spec.rb +0 -32
- data/spec/use_after_free_spec.rb +0 -14
- data/spec/web_spec.rb +0 -12
- data/spec/web_vuln_spec.rb +0 -854
- 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
|