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
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ronin-exploits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01
|
11
|
+
date: 2023-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uri-query_params
|
@@ -30,98 +30,98 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0
|
33
|
+
version: '1.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.0
|
40
|
+
version: '1.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: ronin-code-sql
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.0
|
47
|
+
version: '2.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.0
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: ronin-payloads
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.1
|
61
|
+
version: '0.1'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.1
|
68
|
+
version: '0.1'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: ronin-vulns
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.1
|
75
|
+
version: '0.1'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.1
|
82
|
+
version: '0.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: ronin-post_ex
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.1
|
89
|
+
version: '0.1'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.1
|
96
|
+
version: '0.1'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: ronin-core
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.1
|
103
|
+
version: '0.1'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.1
|
110
|
+
version: '0.1'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: ronin-repos
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.1
|
117
|
+
version: '0.1'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.1
|
124
|
+
version: '0.1'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: bundler
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,10 +136,13 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '2.0'
|
139
|
-
description:
|
140
|
-
ronin-exploits
|
141
|
-
|
142
|
-
ronin-
|
139
|
+
description: |
|
140
|
+
ronin-exploits is a Ruby micro-framework for writing and running exploits.
|
141
|
+
ronin-exploits allows one to write exploits as plain old Ruby classes.
|
142
|
+
ronin-exploits can be distributed as Ruby files or as git repositories that
|
143
|
+
can be installed using ronin-reps.
|
144
|
+
|
145
|
+
It's like a simpler version of Metasploit.
|
143
146
|
email: postmodern.mod3@gmail.com
|
144
147
|
executables:
|
145
148
|
- ronin-exploits
|
@@ -244,61 +247,6 @@ files:
|
|
244
247
|
- man/ronin-exploits.1
|
245
248
|
- man/ronin-exploits.1.md
|
246
249
|
- ronin-exploits.gemspec
|
247
|
-
- spec/advisory_spec.rb
|
248
|
-
- spec/cli/exploit_command_spec.rb
|
249
|
-
- spec/cli/exploit_methods_spec.rb
|
250
|
-
- spec/cli/ruby_shell_spec.rb
|
251
|
-
- spec/client_side_web_vuln_spec.rb
|
252
|
-
- spec/exploit_spec.rb
|
253
|
-
- spec/exploits_spec.rb
|
254
|
-
- spec/heap_overflow_spec.rb
|
255
|
-
- spec/lfi_spec.rb
|
256
|
-
- spec/loot/file_spec.rb
|
257
|
-
- spec/loot_spec.rb
|
258
|
-
- spec/memory_corruption_spec.rb
|
259
|
-
- spec/metadata/arch_spec.rb
|
260
|
-
- spec/metadata/cookie_param_spec.rb
|
261
|
-
- spec/metadata/default_filename_spec.rb
|
262
|
-
- spec/metadata/default_port_spec.rb
|
263
|
-
- spec/metadata/header_name_spec.rb
|
264
|
-
- spec/metadata/os_spec.rb
|
265
|
-
- spec/metadata/shouts_spec.rb
|
266
|
-
- spec/metadata/url_path_spec.rb
|
267
|
-
- spec/metadata/url_query_param_spec.rb
|
268
|
-
- spec/mixins/binary_spec.rb
|
269
|
-
- spec/mixins/build_dir.rb
|
270
|
-
- spec/mixins/file_builder_spec.rb
|
271
|
-
- spec/mixins/format_string_spec.rb
|
272
|
-
- spec/mixins/has_payload_spec.rb
|
273
|
-
- spec/mixins/has_targets_spec.rb
|
274
|
-
- spec/mixins/html_spec.rb
|
275
|
-
- spec/mixins/http_spec.rb
|
276
|
-
- spec/mixins/loot_spec.rb
|
277
|
-
- spec/mixins/nops_spec.rb
|
278
|
-
- spec/mixins/remote_tcp_spec.rb
|
279
|
-
- spec/mixins/remote_udp_spec.rb
|
280
|
-
- spec/mixins/seh_spec.rb
|
281
|
-
- spec/mixins/stack_overflow_spec.rb
|
282
|
-
- spec/mixins/text_spec.rb
|
283
|
-
- spec/open_redirect_spec.rb
|
284
|
-
- spec/params/base_url_spec.rb
|
285
|
-
- spec/params/bind_host_spec.rb
|
286
|
-
- spec/params/bind_port_spec.rb
|
287
|
-
- spec/params/filename_spec.rb
|
288
|
-
- spec/params/host_spec.rb
|
289
|
-
- spec/params/port_spec.rb
|
290
|
-
- spec/rfi_spec.rb
|
291
|
-
- spec/seh_overflow_spec.rb
|
292
|
-
- spec/spec_helper.rb
|
293
|
-
- spec/sqli_spec.rb
|
294
|
-
- spec/ssti_spec.rb
|
295
|
-
- spec/stack_overflow_spec.rb
|
296
|
-
- spec/target_spec.rb
|
297
|
-
- spec/test_result_spec.rb
|
298
|
-
- spec/use_after_free_spec.rb
|
299
|
-
- spec/web_spec.rb
|
300
|
-
- spec/web_vuln_spec.rb
|
301
|
-
- spec/xss_spec.rb
|
302
250
|
homepage: https://ronin-rb.dev/exploits/
|
303
251
|
licenses:
|
304
252
|
- LGPL-3.0
|
@@ -327,57 +275,4 @@ rubygems_version: 3.3.26
|
|
327
275
|
signing_key:
|
328
276
|
specification_version: 4
|
329
277
|
summary: A Ruby micro-framework for writing and running exploits and payloads.
|
330
|
-
test_files:
|
331
|
-
- spec/advisory_spec.rb
|
332
|
-
- spec/cli/exploit_command_spec.rb
|
333
|
-
- spec/cli/exploit_methods_spec.rb
|
334
|
-
- spec/cli/ruby_shell_spec.rb
|
335
|
-
- spec/client_side_web_vuln_spec.rb
|
336
|
-
- spec/exploit_spec.rb
|
337
|
-
- spec/exploits_spec.rb
|
338
|
-
- spec/heap_overflow_spec.rb
|
339
|
-
- spec/lfi_spec.rb
|
340
|
-
- spec/loot/file_spec.rb
|
341
|
-
- spec/loot_spec.rb
|
342
|
-
- spec/memory_corruption_spec.rb
|
343
|
-
- spec/metadata/arch_spec.rb
|
344
|
-
- spec/metadata/cookie_param_spec.rb
|
345
|
-
- spec/metadata/default_filename_spec.rb
|
346
|
-
- spec/metadata/default_port_spec.rb
|
347
|
-
- spec/metadata/header_name_spec.rb
|
348
|
-
- spec/metadata/os_spec.rb
|
349
|
-
- spec/metadata/shouts_spec.rb
|
350
|
-
- spec/metadata/url_path_spec.rb
|
351
|
-
- spec/metadata/url_query_param_spec.rb
|
352
|
-
- spec/mixins/binary_spec.rb
|
353
|
-
- spec/mixins/file_builder_spec.rb
|
354
|
-
- spec/mixins/format_string_spec.rb
|
355
|
-
- spec/mixins/has_payload_spec.rb
|
356
|
-
- spec/mixins/has_targets_spec.rb
|
357
|
-
- spec/mixins/html_spec.rb
|
358
|
-
- spec/mixins/http_spec.rb
|
359
|
-
- spec/mixins/loot_spec.rb
|
360
|
-
- spec/mixins/nops_spec.rb
|
361
|
-
- spec/mixins/remote_tcp_spec.rb
|
362
|
-
- spec/mixins/remote_udp_spec.rb
|
363
|
-
- spec/mixins/seh_spec.rb
|
364
|
-
- spec/mixins/stack_overflow_spec.rb
|
365
|
-
- spec/mixins/text_spec.rb
|
366
|
-
- spec/open_redirect_spec.rb
|
367
|
-
- spec/params/base_url_spec.rb
|
368
|
-
- spec/params/bind_host_spec.rb
|
369
|
-
- spec/params/bind_port_spec.rb
|
370
|
-
- spec/params/filename_spec.rb
|
371
|
-
- spec/params/host_spec.rb
|
372
|
-
- spec/params/port_spec.rb
|
373
|
-
- spec/rfi_spec.rb
|
374
|
-
- spec/seh_overflow_spec.rb
|
375
|
-
- spec/sqli_spec.rb
|
376
|
-
- spec/ssti_spec.rb
|
377
|
-
- spec/stack_overflow_spec.rb
|
378
|
-
- spec/target_spec.rb
|
379
|
-
- spec/test_result_spec.rb
|
380
|
-
- spec/use_after_free_spec.rb
|
381
|
-
- spec/web_spec.rb
|
382
|
-
- spec/web_vuln_spec.rb
|
383
|
-
- spec/xss_spec.rb
|
278
|
+
test_files: []
|
data/spec/advisory_spec.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ronin/exploits/advisory'
|
3
|
-
|
4
|
-
describe Ronin::Exploits::Advisory do
|
5
|
-
let(:id) { 'CVE-2022-1234' }
|
6
|
-
let(:url) { "https://nvd.nist.gov/vuln/detail/#{id}" }
|
7
|
-
|
8
|
-
subject { described_class.new(id,url) }
|
9
|
-
|
10
|
-
describe "#initialize" do
|
11
|
-
context "when given only an id" do
|
12
|
-
subject { described_class.new(id) }
|
13
|
-
|
14
|
-
it "must set #id" do
|
15
|
-
expect(subject.id).to eq(id)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "must default #url to .url_for(id)" do
|
19
|
-
expect(subject.url).to eq(described_class.url_for(id))
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when given an id and a url" do
|
24
|
-
subject { described_class.new(id,url) }
|
25
|
-
|
26
|
-
it "must set #id" do
|
27
|
-
expect(subject.id).to eq(id)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "must set #url" do
|
31
|
-
expect(subject.url).to eq(url)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe ".url_for" do
|
37
|
-
subject { described_class }
|
38
|
-
|
39
|
-
context "when given a CVE-YYYY-NNNN id" do
|
40
|
-
let(:id) { 'CVE-2022-1234' }
|
41
|
-
|
42
|
-
it "must return 'https://nvd.nist.gov/vuln/detail/CVE-YYYY-NNNN'" do
|
43
|
-
expect(subject.url_for(id)).to eq(
|
44
|
-
"https://nvd.nist.gov/vuln/detail/#{id}"
|
45
|
-
)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "when given a GHSA-XXXX id" do
|
50
|
-
let(:id) { 'GHSA-1234abcd' }
|
51
|
-
|
52
|
-
it "must return 'https://github.com/advisories/GHSA-XXXX'" do
|
53
|
-
expect(subject.url_for(id)).to eq("https://github.com/advisories/#{id}")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "when given any other kind of id" do
|
58
|
-
let(:id) { 'XYZ-123' }
|
59
|
-
|
60
|
-
it "must return nil" do
|
61
|
-
expect(subject.url_for(id)).to be(nil)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "#to_s" do
|
67
|
-
it "must return the advisory #id" do
|
68
|
-
expect(subject.to_s).to eq(id)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ronin/exploits/cli/exploit_command'
|
3
|
-
require 'ronin/exploits/exploit'
|
4
|
-
|
5
|
-
describe Ronin::Exploits::CLI::ExploitCommand do
|
6
|
-
module TestExploitCommand
|
7
|
-
class TestExploit < Ronin::Exploits::Exploit
|
8
|
-
register 'test_exploit_command'
|
9
|
-
end
|
10
|
-
|
11
|
-
class TestCommand < Ronin::Exploits::CLI::ExploitCommand
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
let(:exploit_class) { TestExploitCommand::TestExploit }
|
16
|
-
let(:command_class) { TestExploitCommand::TestCommand }
|
17
|
-
subject { command_class.new }
|
18
|
-
|
19
|
-
describe "#load_exploit" do
|
20
|
-
let(:id) { exploit_class.id }
|
21
|
-
|
22
|
-
before do
|
23
|
-
expect(Ronin::Exploits).to receive(:load_class).with(id).and_return(exploit_class)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "must load the exploit class and return the exploit class" do
|
27
|
-
expect(subject.load_exploit(id)).to be(exploit_class)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "must also set #exploit_class" do
|
31
|
-
subject.load_exploit(id)
|
32
|
-
|
33
|
-
expect(subject.exploit_class).to be(exploit_class)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "#load_exploit_from" do
|
38
|
-
let(:file) { "path/to/exploit/file.rb" }
|
39
|
-
|
40
|
-
before do
|
41
|
-
expect(Ronin::Exploits).to receive(:load_class_from_file).with(file).and_return(exploit_class)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "must load the exploit class and return the exploit class" do
|
45
|
-
expect(subject.load_exploit_from(file)).to be(exploit_class)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "must also set #exploit_class" do
|
49
|
-
subject.load_exploit_from(file)
|
50
|
-
|
51
|
-
expect(subject.exploit_class).to be(exploit_class)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "#initialize_exploit" do
|
56
|
-
before { subject.load_exploit(exploit_class.id) }
|
57
|
-
|
58
|
-
it "must initialize a new exploit object using #exploit_class" do
|
59
|
-
expect(subject.initialize_exploit).to be_kind_of(exploit_class)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "must also set #exploit" do
|
63
|
-
subject.initialize_exploit
|
64
|
-
|
65
|
-
expect(subject.exploit).to be_kind_of(exploit_class)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,208 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ronin/exploits/cli/exploit_methods'
|
3
|
-
require 'ronin/exploits/cli/command'
|
4
|
-
|
5
|
-
describe Ronin::Exploits::CLI::ExploitMethods do
|
6
|
-
module TestExploitMethods
|
7
|
-
class TestCommand < Ronin::Exploits::CLI::Command
|
8
|
-
include Ronin::Exploits::CLI::ExploitMethods
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
let(:command_class) { TestExploitMethods::TestCommand }
|
13
|
-
subject { command_class.new }
|
14
|
-
|
15
|
-
describe "#load_exploit" do
|
16
|
-
let(:exploit_id) { 'html/encode' }
|
17
|
-
|
18
|
-
it "must call Exploits.load_class with the given ID" do
|
19
|
-
expect(Ronin::Exploits).to receive(:load_class).with(exploit_id)
|
20
|
-
expect(subject).to_not receive(:exit)
|
21
|
-
|
22
|
-
subject.load_exploit(exploit_id)
|
23
|
-
end
|
24
|
-
|
25
|
-
context "when Ronin::Exploits::ClassNotfound is raised" do
|
26
|
-
let(:message) { "class not found" }
|
27
|
-
let(:exception) do
|
28
|
-
Ronin::Exploits::ClassNotFound.new(message)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "must print an error message and exit with an error code" do
|
32
|
-
expect(Ronin::Exploits).to receive(:load_class).with(exploit_id).and_raise(exception)
|
33
|
-
expect(subject).to receive(:exit).with(1)
|
34
|
-
|
35
|
-
expect {
|
36
|
-
subject.load_exploit(exploit_id)
|
37
|
-
}.to output("#{subject.command_name}: #{message}#{$/}").to_stderr
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "when another type of exception is raised" do
|
42
|
-
let(:message) { "unexpected error" }
|
43
|
-
let(:exception) { RuntimeError.new(message) }
|
44
|
-
|
45
|
-
it "must print the exception, an error message, and exit with -1" do
|
46
|
-
expect(Ronin::Exploits).to receive(:load_class).with(exploit_id).and_raise(exception)
|
47
|
-
expect(subject).to receive(:print_exception).with(exception)
|
48
|
-
expect(subject).to receive(:exit).with(-1)
|
49
|
-
|
50
|
-
expect {
|
51
|
-
subject.load_exploit(exploit_id)
|
52
|
-
}.to output("#{subject.command_name}: an unhandled exception occurred while loading exploit #{exploit_id}#{$/}").to_stderr
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "#load_exploit_from" do
|
58
|
-
let(:file) { '/path/to/html/encode.rb' }
|
59
|
-
|
60
|
-
it "must call Exploits.load_class with the given ID and file" do
|
61
|
-
expect(Ronin::Exploits).to receive(:load_class_from_file).with(file)
|
62
|
-
expect(subject).to_not receive(:exit)
|
63
|
-
|
64
|
-
subject.load_exploit_from(file)
|
65
|
-
end
|
66
|
-
|
67
|
-
context "when Ronin::Exploits::ClassNotfound is raised" do
|
68
|
-
let(:message) { "class not found" }
|
69
|
-
let(:exception) do
|
70
|
-
Ronin::Exploits::ClassNotFound.new(message)
|
71
|
-
end
|
72
|
-
|
73
|
-
it "must print an error message and exit with an error code" do
|
74
|
-
expect(Ronin::Exploits).to receive(:load_class_from_file).with(file).and_raise(exception)
|
75
|
-
expect(subject).to receive(:exit).with(1)
|
76
|
-
|
77
|
-
expect {
|
78
|
-
subject.load_exploit_from(file)
|
79
|
-
}.to output("#{subject.command_name}: #{message}#{$/}").to_stderr
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
context "when another type of exception is raised" do
|
84
|
-
let(:message) { "unexpected error" }
|
85
|
-
let(:exception) { RuntimeError.new(message) }
|
86
|
-
|
87
|
-
it "must print the exception, an error message, and exit with -1" do
|
88
|
-
expect(Ronin::Exploits).to receive(:load_class_from_file).with(file).and_raise(exception)
|
89
|
-
expect(subject).to receive(:print_exception).with(exception)
|
90
|
-
expect(subject).to receive(:exit).with(-1)
|
91
|
-
|
92
|
-
expect {
|
93
|
-
subject.load_exploit_from(file)
|
94
|
-
}.to output(
|
95
|
-
"#{subject.command_name}: an unhandled exception occurred while loading exploit from file #{file}#{$/}"
|
96
|
-
).to_stderr
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "#initialie_exploit" do
|
102
|
-
let(:exploit_id) { 'test' }
|
103
|
-
let(:exploit_class) { double('Encoder class', id: exploit_id) }
|
104
|
-
|
105
|
-
it "must return a new instance of the given exploit class" do
|
106
|
-
expect(exploit_class).to receive(:new)
|
107
|
-
|
108
|
-
subject.initialize_exploit(exploit_class)
|
109
|
-
end
|
110
|
-
|
111
|
-
context "when additional keyword arguments are given" do
|
112
|
-
let(:kwargs) do
|
113
|
-
{foo: 1, bar: 2}
|
114
|
-
end
|
115
|
-
|
116
|
-
it "must pass them to new()" do
|
117
|
-
expect(exploit_class).to receive(:new).with(**kwargs)
|
118
|
-
|
119
|
-
subject.initialize_exploit(exploit_class,**kwargs)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
context "when a Core::Params::ParamError is raised" do
|
124
|
-
let(:message) { "param foo was not set" }
|
125
|
-
let(:exception) { Ronin::Core::Params::RequiredParam.new(message) }
|
126
|
-
|
127
|
-
it "must print an error message and exit with 1" do
|
128
|
-
expect(exploit_class).to receive(:new).and_raise(exception)
|
129
|
-
expect(subject).to receive(:exit).with(1)
|
130
|
-
|
131
|
-
expect {
|
132
|
-
subject.initialize_exploit(exploit_class)
|
133
|
-
}.to output("#{subject.command_name}: #{message}#{$/}").to_stderr
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context "when another type of exception is raised" do
|
138
|
-
let(:message) { "unexpected error" }
|
139
|
-
let(:exception) { RuntimeError.new(message) }
|
140
|
-
|
141
|
-
it "must print the exception, an error message, and exit with -1" do
|
142
|
-
expect(exploit_class).to receive(:new).and_raise(exception)
|
143
|
-
expect(subject).to receive(:print_exception).with(exception)
|
144
|
-
expect(subject).to receive(:exit).with(-1)
|
145
|
-
|
146
|
-
expect {
|
147
|
-
subject.initialize_exploit(exploit_class)
|
148
|
-
}.to output("#{subject.command_name}: an unhandled exception occurred while initializing exploit #{exploit_id}#{$/}").to_stderr
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe "#validate_exploit" do
|
154
|
-
let(:exploit_id) { 'test' }
|
155
|
-
let(:exploit) { double('Encoder instance', class_id: exploit_id) }
|
156
|
-
|
157
|
-
it "must call #perform_validate on #exploit" do
|
158
|
-
expect(exploit).to receive(:perform_validate)
|
159
|
-
|
160
|
-
subject.validate_exploit(exploit)
|
161
|
-
end
|
162
|
-
|
163
|
-
context "when a Core::Params::ParamError is raised" do
|
164
|
-
let(:message) { "param foo was not set" }
|
165
|
-
let(:exception) { Ronin::Core::Params::RequiredParam.new(message) }
|
166
|
-
|
167
|
-
it "must print an error message and exit with 1" do
|
168
|
-
expect(exploit).to receive(:perform_validate).and_raise(exception)
|
169
|
-
expect(subject).to receive(:exit).with(1)
|
170
|
-
|
171
|
-
expect {
|
172
|
-
subject.validate_exploit(exploit)
|
173
|
-
}.to output("#{subject.command_name}: failed to validate the exploit #{exploit_id}: #{message}#{$/}").to_stderr
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
context "when a Ronin::Exploits::ValidationError is raised" do
|
178
|
-
let(:message) { "param foo was not set" }
|
179
|
-
let(:exception) do
|
180
|
-
Ronin::Exploits::ValidationError.new(message)
|
181
|
-
end
|
182
|
-
|
183
|
-
it "must print an error message and exit with 1" do
|
184
|
-
expect(exploit).to receive(:perform_validate).and_raise(exception)
|
185
|
-
expect(subject).to receive(:exit).with(1)
|
186
|
-
|
187
|
-
expect {
|
188
|
-
subject.validate_exploit(exploit)
|
189
|
-
}.to output("#{subject.command_name}: failed to validate the exploit #{exploit_id}: #{message}#{$/}").to_stderr
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
context "when another type of exception is raised" do
|
194
|
-
let(:message) { "unexpected error" }
|
195
|
-
let(:exception) { RuntimeError.new(message) }
|
196
|
-
|
197
|
-
it "must print the exception, an error message, and exit with -1" do
|
198
|
-
expect(exploit).to receive(:perform_validate).and_raise(exception)
|
199
|
-
expect(subject).to receive(:print_exception).with(exception)
|
200
|
-
expect(subject).to receive(:exit).with(-1)
|
201
|
-
|
202
|
-
expect {
|
203
|
-
subject.validate_exploit(exploit)
|
204
|
-
}.to output("#{subject.command_name}: an unhandled exception occurred while validating the exploit #{exploit_id}#{$/}").to_stderr
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
data/spec/cli/ruby_shell_spec.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ronin/exploits/cli/ruby_shell'
|
3
|
-
|
4
|
-
describe Ronin::Exploits::CLI::RubyShell do
|
5
|
-
describe "#initialize" do
|
6
|
-
it "must default #name to 'ronin-exploits'" do
|
7
|
-
expect(subject.name).to eq('ronin-exploits')
|
8
|
-
end
|
9
|
-
|
10
|
-
it "must default #context to Ronin::Exploits" do
|
11
|
-
expect(subject.context).to be(Ronin::Exploits)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|