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
data/spec/sqli_spec.rb DELETED
@@ -1,306 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/sqli'
3
-
4
- describe Ronin::Exploits::SQLI do
5
- module TestSQLI
6
- class TestExploit < Ronin::Exploits::SQLI
7
- base_path '/showthread.asp'
8
- query_param 'id'
9
- end
10
- end
11
-
12
- let(:exploit_class) { TestSQLI::TestExploit }
13
- let(:base_url) { 'http://testasp.vulnweb.com' }
14
-
15
- subject do
16
- exploit_class.new(
17
- params: {
18
- base_url: base_url
19
- }
20
- )
21
- end
22
-
23
- describe ".exploit_type" do
24
- subject { described_class }
25
-
26
- it { expect(subject.exploit_type).to eq(:sqli) }
27
- end
28
-
29
- describe ".escape_quote" do
30
- subject { exploit_class }
31
-
32
- context "and when escape_quote is not set in the class" do
33
- module TestSQLI
34
- class WithNoEscapeQuoteSet < Ronin::Exploits::SQLI
35
- end
36
- end
37
-
38
- let(:exploit_class) { TestSQLI::WithNoEscapeQuoteSet }
39
-
40
- it "must default to false" do
41
- expect(subject.escape_quote).to be(false)
42
- end
43
- end
44
-
45
- context "and when escape_quote is set in the class" do
46
- module TestSQLI
47
- class WithEscapeQuoteSet < Ronin::Exploits::SQLI
48
- escape_quote true
49
- end
50
- end
51
-
52
- let(:exploit_class) { TestSQLI::WithEscapeQuoteSet }
53
-
54
- it "must return the set escape_quote" do
55
- expect(subject.escape_quote).to eq(true)
56
- end
57
- end
58
-
59
- context "but when the escape_quote was set in the superclass" do
60
- module TestSQLI
61
- class InheritsItsEscapeQuote < WithEscapeQuoteSet
62
- end
63
- end
64
-
65
- let(:exploit_class) { TestSQLI::InheritsItsEscapeQuote }
66
-
67
- it "must return the escape_quote set in the superclass" do
68
- expect(subject.escape_quote).to eq(true)
69
- end
70
-
71
- context "but the escape_quote is overridden in the sub-class" do
72
- module TestSQLI
73
- class OverridesItsInheritedEscapeQuote < WithEscapeQuoteSet
74
- escape_quote false
75
- end
76
- end
77
-
78
- let(:exploit_class) do
79
- TestSQLI::OverridesItsInheritedEscapeQuote
80
- end
81
-
82
- it "must return the escape_quote set in the sub-class" do
83
- expect(subject.escape_quote).to eq(false)
84
- end
85
- end
86
- end
87
- end
88
-
89
- describe ".escape_parens" do
90
- subject { exploit_class }
91
-
92
- context "and when escape_parens is not set in the class" do
93
- module TestSQLI
94
- class WithNoEscapeParensSet < Ronin::Exploits::SQLI
95
- end
96
- end
97
-
98
- let(:exploit_class) { TestSQLI::WithNoEscapeParensSet }
99
-
100
- it "must default to false" do
101
- expect(subject.escape_parens).to be(false)
102
- end
103
- end
104
-
105
- context "and when escape_parens is set in the class" do
106
- module TestSQLI
107
- class WithEscapeParensSet < Ronin::Exploits::SQLI
108
- escape_parens true
109
- end
110
- end
111
-
112
- let(:exploit_class) { TestSQLI::WithEscapeParensSet }
113
-
114
- it "must return the set escape_parens" do
115
- expect(subject.escape_parens).to eq(true)
116
- end
117
- end
118
-
119
- context "but when the escape_parens was set in the superclass" do
120
- module TestSQLI
121
- class InheritsItsEscapeParens < WithEscapeParensSet
122
- end
123
- end
124
-
125
- let(:exploit_class) { TestSQLI::InheritsItsEscapeParens }
126
-
127
- it "must return the escape_parens set in the superclass" do
128
- expect(subject.escape_parens).to eq(true)
129
- end
130
-
131
- context "but the escape_parens is overridden in the sub-class" do
132
- module TestSQLI
133
- class OverridesItsInheritedEscapeParens < WithEscapeParensSet
134
- escape_parens false
135
- end
136
- end
137
-
138
- let(:exploit_class) do
139
- TestSQLI::OverridesItsInheritedEscapeParens
140
- end
141
-
142
- it "must return the escape_parens set in the sub-class" do
143
- expect(subject.escape_parens).to eq(false)
144
- end
145
- end
146
- end
147
- end
148
-
149
- describe ".terminate" do
150
- subject { exploit_class }
151
-
152
- context "and when terminate is not set in the class" do
153
- module TestSQLI
154
- class WithNoTerminateSet < Ronin::Exploits::SQLI
155
- end
156
- end
157
-
158
- let(:exploit_class) { TestSQLI::WithNoTerminateSet }
159
-
160
- it "must default to false" do
161
- expect(subject.terminate).to be(false)
162
- end
163
- end
164
-
165
- context "and when terminate is set in the class" do
166
- module TestSQLI
167
- class WithTerminateSet < Ronin::Exploits::SQLI
168
- terminate true
169
- end
170
- end
171
-
172
- let(:exploit_class) { TestSQLI::WithTerminateSet }
173
-
174
- it "must return the set terminate" do
175
- expect(subject.terminate).to eq(true)
176
- end
177
- end
178
-
179
- context "but when the terminate was set in the superclass" do
180
- module TestSQLI
181
- class InheritsItsTerminate < WithTerminateSet
182
- end
183
- end
184
-
185
- let(:exploit_class) { TestSQLI::InheritsItsTerminate }
186
-
187
- it "must return the terminate set in the superclass" do
188
- expect(subject.terminate).to eq(true)
189
- end
190
-
191
- context "but the terminate is overridden in the sub-class" do
192
- module TestSQLI
193
- class OverridesItsInheritedTerminate < WithTerminateSet
194
- terminate false
195
- end
196
- end
197
-
198
- let(:exploit_class) do
199
- TestSQLI::OverridesItsInheritedTerminate
200
- end
201
-
202
- it "must return the terminate set in the sub-class" do
203
- expect(subject.terminate).to eq(false)
204
- end
205
- end
206
- end
207
- end
208
-
209
- describe "#vuln" do
210
- it "must return a Ronin::Vulns::SQLI object" do
211
- expect(subject.vuln).to be_kind_of(Ronin::Vulns::SQLI)
212
- end
213
-
214
- it "must set the #url attribute of the SQLI vuln object" do
215
- expect(subject.vuln.url).to eq(subject.url)
216
- end
217
-
218
- it "must default the #escape_quote attribute of the SQLI vuln object to false" do
219
- expect(subject.vuln.escape_quote).to be(false)
220
- end
221
-
222
- context "when the exploit class sets escape_quote" do
223
- module TestSQLI
224
- class TestExploitWithEscapeQuote < Ronin::Exploits::SQLI
225
- base_path '/showthread.asp'
226
- query_param 'id'
227
- escape_quote true
228
- end
229
- end
230
-
231
- let(:exploit_class) { TestSQLI::TestExploitWithEscapeQuote }
232
-
233
- it "must set the #escape_quote attribute of the SQLI vuln object to the exploit class'es escape_quote" do
234
- expect(subject.vuln.escape_quote).to eq(exploit_class.escape_quote)
235
- end
236
- end
237
-
238
- it "must default the #escape_parens attribute of the SQLI vuln object to false" do
239
- expect(subject.vuln.escape_parens).to be(false)
240
- end
241
-
242
- context "when the exploit class sets escape_parens" do
243
- module TestSQLI
244
- class TestExploitWithEscapeParens < Ronin::Exploits::SQLI
245
- base_path '/showthread.asp'
246
- query_param 'id'
247
- escape_parens true
248
- end
249
- end
250
-
251
- let(:exploit_class) { TestSQLI::TestExploitWithEscapeParens }
252
-
253
- it "must set the #escape_parens attribute of the SQLI vuln object to the exploit class'es escape_parens" do
254
- expect(subject.vuln.escape_parens).to eq(exploit_class.escape_parens)
255
- end
256
- end
257
-
258
- it "must default the #terminate attribute of the SQLI vuln object to false" do
259
- expect(subject.vuln.terminate).to be(false)
260
- end
261
-
262
- context "when the exploit class sets terminate" do
263
- module TestSQLI
264
- class TestExploitWithTerminate < Ronin::Exploits::SQLI
265
- base_path '/showthread.asp'
266
- query_param 'id'
267
- terminate true
268
- end
269
- end
270
-
271
- let(:exploit_class) { TestSQLI::TestExploitWithTerminate }
272
-
273
- it "must set the #terminate attribute of the SQLI vuln object to the exploit class'es terminate" do
274
- expect(subject.vuln.terminate).to eq(exploit_class.terminate)
275
- end
276
- end
277
- end
278
-
279
- describe "#launch" do
280
- module TestSQLI
281
- class SQLPayload < Ronin::Payloads::SQLPayload
282
- def build
283
- @payload = 'SQL PAYLOAD HERE();'
284
- end
285
- end
286
- end
287
-
288
- let(:payload_class) { TestSQLI::SQLPayload }
289
- let(:payload) { payload_class.new }
290
-
291
- subject do
292
- exploit_class.new(
293
- payload: payload,
294
- params: {
295
- base_url: base_url
296
- }
297
- )
298
- end
299
-
300
- it "must call #exploit on the #vuln object with the #payload" do
301
- expect(subject.vuln).to receive(:exploit).with(payload)
302
-
303
- subject.launch
304
- end
305
- end
306
- end
data/spec/ssti_spec.rb DELETED
@@ -1,121 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/ssti'
3
-
4
- describe Ronin::Exploits::SSTI do
5
- module TestSSTI
6
- class TestExploit < Ronin::Exploits::SSTI
7
- base_path '/Templatize.asp'
8
- query_param 'item'
9
- end
10
-
11
- class TestExploitWithEscapeExpr < Ronin::Exploits::SSTI
12
- base_path '/Templatize.asp'
13
- query_param 'item'
14
- escape_expr ->(expr) { "${{#{expr}}}" }
15
- end
16
- end
17
-
18
- let(:exploit_class) { TestSSTI::TestExploit }
19
- let(:base_url) { 'http://testasp.vulnweb.com/' }
20
- let(:query) { 'item=html/about.html' }
21
- let(:query_param) { 'item' }
22
-
23
- subject do
24
- exploit_class.new(
25
- params: {
26
- base_url: base_url
27
- }
28
- )
29
- end
30
-
31
- describe ".escape_expr" do
32
- subject { exploit_class }
33
-
34
- context "and when escape_expr is not set in the class" do
35
- module TestSSTI
36
- class WithNoEscapeExprSet < Ronin::Exploits::SSTI
37
- end
38
- end
39
-
40
- let(:exploit_class) { TestSSTI::WithNoEscapeExprSet }
41
-
42
- it "must default to nil" do
43
- expect(subject.escape_expr).to be(nil)
44
- end
45
- end
46
-
47
- context "and when escape_expr is set in the class" do
48
- module TestSSTI
49
- class WithEscapeExprSet < Ronin::Exploits::SSTI
50
- escape_expr ->(expr) { "{{#{expr}}}" }
51
- end
52
- end
53
-
54
- let(:exploit_class) { TestSSTI::WithEscapeExprSet }
55
-
56
- it "must return the set escape_expr" do
57
- expect(subject.escape_expr).to be_kind_of(Proc)
58
- expect(subject.escape_expr.call('test')).to eq('{{test}}')
59
- end
60
- end
61
-
62
- context "but when the escape_expr was set in the superclass" do
63
- module TestSSTI
64
- class InheritsItsEscapeExpr < WithEscapeExprSet
65
- end
66
- end
67
-
68
- let(:exploit_class) { TestSSTI::InheritsItsEscapeExpr }
69
-
70
- it "must return the escape_expr set in the superclass" do
71
- expect(subject.escape_expr).to be_kind_of(Proc)
72
- expect(subject.escape_expr.call('test')).to eq('{{test}}')
73
- end
74
-
75
- context "but the escape_expr is overridden in the sub-class" do
76
- module TestSSTI
77
- class OverridesItsInheritedEscapeExpr < WithEscapeExprSet
78
- escape_expr ->(expr) { "${#{expr}}" }
79
- end
80
- end
81
-
82
- let(:exploit_class) do
83
- TestSSTI::OverridesItsInheritedEscapeExpr
84
- end
85
-
86
- it "must return the escape_expr set in the sub-class" do
87
- expect(subject.escape_expr).to be_kind_of(Proc)
88
- expect(subject.escape_expr.call('test')).to eq('${test}')
89
- end
90
- end
91
- end
92
- end
93
-
94
- describe ".exploit_type" do
95
- subject { described_class }
96
-
97
- it { expect(subject.exploit_type).to eq(:ssti) }
98
- end
99
-
100
- describe "#vuln" do
101
- it "must return a Ronin::Vulns::SSTI object" do
102
- expect(subject.vuln).to be_kind_of(Ronin::Vulns::SSTI)
103
- end
104
-
105
- it "must set the #url attribute of the SSTI vuln object" do
106
- expect(subject.vuln.url).to eq(subject.url)
107
- end
108
-
109
- it "must defalt the #escape attribute of the SSTI vuln object to nil" do
110
- expect(subject.vuln.escape).to be(nil)
111
- end
112
-
113
- context "when the exploit's escape_expr has been set" do
114
- let(:exploit_class) { TestSSTI::TestExploitWithEscapeExpr }
115
-
116
- it "must set the #escape attribute of the SSTI vuln object" do
117
- expect(subject.vuln.escape).to be(exploit_class.escape_expr)
118
- end
119
- end
120
- end
121
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/stack_overflow'
3
-
4
- describe Ronin::Exploits::StackOverflow do
5
- it "must inherit from Ronin::Exploits::MemoryCorruption" do
6
- expect(described_class).to be < Ronin::Exploits::MemoryCorruption
7
- end
8
-
9
- it "must include Ronin::Exploits::Mixins::StackOverflow" do
10
- expect(described_class).to include(Ronin::Exploits::Mixins::StackOverflow)
11
- end
12
-
13
- describe ".exploit_type" do
14
- subject { described_class }
15
-
16
- it { expect(subject.exploit_type).to eq(:stack_overflow) }
17
- end
18
- end
data/spec/target_spec.rb DELETED
@@ -1,92 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/target'
3
-
4
- describe Ronin::Exploits::Target do
5
- it "must inherit from OpenStruct" do
6
- expect(described_class).to be < OpenStruct
7
- end
8
-
9
- describe "#initialize" do
10
- it "must default #arch to nil" do
11
- expect(subject.arch).to be(nil)
12
- end
13
-
14
- it "must default #os to nil" do
15
- expect(subject.os).to be(nil)
16
- end
17
-
18
- it "must default #os_version to nil" do
19
- expect(subject.os_version).to be(nil)
20
- end
21
-
22
- it "must default #software to nil" do
23
- expect(subject.software).to be(nil)
24
- end
25
-
26
- it "must default #versiong to nil" do
27
- expect(subject.versiong).to be(nil)
28
- end
29
-
30
- context "when given the arch: keyword argument" do
31
- let(:arch) { :x86_64 }
32
-
33
- subject { described_class.new(arch: arch) }
34
-
35
- it "must set #arch" do
36
- expect(subject.arch).to be(arch)
37
- end
38
- end
39
-
40
- context "when given the os: keyword argument" do
41
- let(:os) { :linux }
42
-
43
- subject { described_class.new(os: os) }
44
-
45
- it "must set #os" do
46
- expect(subject.os).to be(os)
47
- end
48
- end
49
-
50
- context "when given the os_version: keyword argument" do
51
- let(:os_version) { '5.17.0' }
52
-
53
- subject { described_class.new(os_version: os_version) }
54
-
55
- it "must set #os_version" do
56
- expect(subject.os_version).to be(os_version)
57
- end
58
- end
59
-
60
- context "when given the software: keyword argument" do
61
- let(:software) { 'Apache' }
62
-
63
- subject { described_class.new(software: software) }
64
-
65
- it "must set #software" do
66
- expect(subject.software).to be(software)
67
- end
68
- end
69
-
70
- context "when given the versiong: keyword argument" do
71
- let(:versiong) { '1.2.3' }
72
-
73
- subject { described_class.new(versiong: versiong) }
74
-
75
- it "must set #versiong" do
76
- expect(subject.versiong).to be(versiong)
77
- end
78
- end
79
-
80
- context "when given additional keyword arguments" do
81
- let(:foo) { 42 }
82
- let(:bar) { 'data' }
83
-
84
- subject { described_class.new(foo: foo, bar: bar) }
85
-
86
- it "must populate the OpenStruct with them" do
87
- expect(subject.foo).to be(foo)
88
- expect(subject.bar).to be(bar)
89
- end
90
- end
91
- end
92
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/test_result'
3
-
4
- describe Ronin::Exploits::TestResult do
5
- let(:message) { 'example message' }
6
-
7
- subject { described_class.new(message) }
8
-
9
- describe "#initialize" do
10
- it "must set #message" do
11
- expect(subject.message).to eq(message)
12
- end
13
- end
14
-
15
- describe "#to_s" do
16
- it "must return #message" do
17
- expect(subject.to_s).to eq(subject.message)
18
- end
19
- end
20
-
21
- it "must define a Vulnerable sub-class" do
22
- expect(described_class::Vulnerable).to be < described_class
23
- end
24
-
25
- it "must define a NotVulnerable sub-class" do
26
- expect(described_class::NotVulnerable).to be < described_class
27
- end
28
-
29
- it "must define a Unknown sub-class" do
30
- expect(described_class::Unknown).to be < described_class
31
- end
32
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/use_after_free'
3
-
4
- describe Ronin::Exploits::UseAfterFree 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(:use_after_free) }
13
- end
14
- end
data/spec/web_spec.rb DELETED
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/exploits/web'
3
-
4
- describe Ronin::Exploits::Web do
5
- it "must inherit from Ronin::Exploits::Exploit" do
6
- expect(described_class).to be < Ronin::Exploits::Exploit
7
- end
8
-
9
- it "must include Ronin::Exploits::Mixin::HTTP" do
10
- expect(described_class).to include(Ronin::Exploits::Mixins::HTTP)
11
- end
12
- end