ronin-vulns 0.1.3 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +3 -2
- data/ChangeLog.md +22 -0
- data/README.md +0 -1
- data/lib/ronin/vulns/cli/commands/lfi.rb +9 -21
- data/lib/ronin/vulns/cli/commands/open_redirect.rb +3 -14
- data/lib/ronin/vulns/cli/commands/rfi.rb +9 -26
- data/lib/ronin/vulns/cli/commands/scan.rb +37 -83
- data/lib/ronin/vulns/cli/commands/sqli.rb +9 -29
- data/lib/ronin/vulns/cli/commands/ssti.rb +1 -18
- data/lib/ronin/vulns/cli/logging.rb +4 -4
- data/lib/ronin/vulns/cli/web_vuln_command.rb +126 -114
- data/lib/ronin/vulns/open_redirect.rb +29 -5
- data/lib/ronin/vulns/sqli.rb +1 -1
- data/lib/ronin/vulns/url_scanner.rb +10 -0
- data/lib/ronin/vulns/version.rb +1 -1
- data/man/ronin-vulns-lfi.1 +2 -2
- data/man/ronin-vulns-open-redirect.1 +2 -2
- data/man/ronin-vulns-reflected-xss.1 +2 -2
- data/man/ronin-vulns-rfi.1 +3 -3
- data/man/ronin-vulns-scan.1 +3 -3
- data/man/ronin-vulns-sqli.1 +2 -2
- data/man/ronin-vulns-ssti.1 +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 782fb72c980f9466dd49b736e941d1d4bf092066bdb2894c776f7610bb0ee049
|
4
|
+
data.tar.gz: 732c6cf18098e86aa1d600e7607fb8110a903ea76391901977574faff167b550
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a636b00ea3642dadf7ee2f1c1b4a498f5b8e107d46c7ed64aac115cb1788b395de343c5ac7683eef0b3556128e9466e8228782ae453d337cae46ef0c280369fa
|
7
|
+
data.tar.gz: e610ebe869ae47cc6ea5ab6c6cd548838da9873943f3d64317ff4682d36bfa172de79df5fff4a53a8d37936a83ada614d4fdc4c1d374eed08cb51a3f9ab421a0
|
data/.github/workflows/ruby.yml
CHANGED
@@ -12,11 +12,12 @@ jobs:
|
|
12
12
|
- '3.0'
|
13
13
|
- '3.1'
|
14
14
|
- '3.2'
|
15
|
+
- '3.3'
|
15
16
|
# - jruby
|
16
17
|
- truffleruby
|
17
18
|
name: Ruby ${{ matrix.ruby }}
|
18
19
|
steps:
|
19
|
-
- uses: actions/checkout@
|
20
|
+
- uses: actions/checkout@v4
|
20
21
|
- name: Set up Ruby
|
21
22
|
uses: ruby/setup-ruby@v1
|
22
23
|
with:
|
@@ -35,7 +36,7 @@ jobs:
|
|
35
36
|
rubocop:
|
36
37
|
runs-on: ubuntu-latest
|
37
38
|
steps:
|
38
|
-
- uses: actions/checkout@
|
39
|
+
- uses: actions/checkout@v4
|
39
40
|
- name: Set up Ruby
|
40
41
|
uses: ruby/setup-ruby@v1
|
41
42
|
with:
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
### 0.1.5 / 2024-06-19
|
2
|
+
|
3
|
+
* Improve the accuracy of {Ronin::Vulns::OpenRedirect#vulnerable?} when
|
4
|
+
detecting open redirects in meta-refresh HTML tags.
|
5
|
+
* Match the test URL when it ends with `?...`, `&...`, or `&...`.
|
6
|
+
* Detect when the test URL has an additional string appended to it
|
7
|
+
(ex: `.html`). The appended string can easily be bypassed by adding a
|
8
|
+
`?`, `&`, or `#` character to the end of the test URL.
|
9
|
+
|
10
|
+
### 0.1.4 / 2023-09-19
|
11
|
+
|
12
|
+
#### CLI
|
13
|
+
|
14
|
+
* Improved the performance of `ronin-vulns` commands when scanning multiple URLs
|
15
|
+
or a file of URLs by not rebuilding an identical
|
16
|
+
{Ronin::Vulns::CLI::WebVulnCommand#scan_kwargs} for each URL.
|
17
|
+
* Allow the `--cookie "..."` option to be repeated multiple times and merge the
|
18
|
+
cookie strings together.
|
19
|
+
* Allow the `--cookie-param NAME=VALUE` option to be used with the
|
20
|
+
`--cookie "..."` option and merge the cookie values together.
|
21
|
+
* Print vulnerable param names in single quotes.
|
22
|
+
|
1
23
|
### 0.1.3 / 2023-07-07
|
2
24
|
|
3
25
|
* Fixed a bug in {Ronin::Vulns::SSTI.scan} where when called without `escape:`
|
data/README.md
CHANGED
@@ -9,7 +9,6 @@
|
|
9
9
|
* [Issues](https://github.com/ronin-rb/ronin-vulns/issues)
|
10
10
|
* [Documentation](https://ronin-rb.dev/docs/ronin-vulns/frames)
|
11
11
|
* [Discord](https://discord.gg/6WAb3PsVX9) |
|
12
|
-
[Twitter](https://twitter.com/ronin_rb) |
|
13
12
|
[Mastodon](https://infosec.exchange/@ronin_rb)
|
14
13
|
|
15
14
|
## Description
|
@@ -66,14 +66,18 @@ module Ronin
|
|
66
66
|
value: {
|
67
67
|
type: [:unix, :windows]
|
68
68
|
},
|
69
|
-
desc: 'Sets the OS to test for'
|
69
|
+
desc: 'Sets the OS to test for' do |os|
|
70
|
+
scan_kwargs[:os] = os
|
71
|
+
end
|
70
72
|
|
71
73
|
option :depth, short: '-D',
|
72
74
|
value: {
|
73
75
|
type: Integer,
|
74
76
|
usage: 'COUNT'
|
75
77
|
},
|
76
|
-
desc: 'Sets the directory depth to escape up'
|
78
|
+
desc: 'Sets the directory depth to escape up' do |depth|
|
79
|
+
scan_kwargs[:depth] = depth
|
80
|
+
end
|
77
81
|
|
78
82
|
option :filter_bypass, short: '-B',
|
79
83
|
value: {
|
@@ -85,30 +89,14 @@ module Ronin
|
|
85
89
|
:zlib
|
86
90
|
]
|
87
91
|
},
|
88
|
-
desc: 'Sets the filter bypass strategy to use'
|
92
|
+
desc: 'Sets the filter bypass strategy to use' do |filter_bypass|
|
93
|
+
scan_kwargs[:filter_bypass] = filter_bypass
|
94
|
+
end
|
89
95
|
|
90
96
|
description 'Scans URL(s) for Local File Inclusion (LFI) vulnerabilities'
|
91
97
|
|
92
98
|
man_page 'ronin-vulns-lfi.1'
|
93
99
|
|
94
|
-
#
|
95
|
-
# Keyword arguments for `Vulns::LFI.scan` and `Vulns::LFI.test`.
|
96
|
-
#
|
97
|
-
# @return [Hash{Symbol => Object}]
|
98
|
-
#
|
99
|
-
def scan_kwargs
|
100
|
-
kwargs = super()
|
101
|
-
|
102
|
-
kwargs[:os] = options[:os] if options[:os]
|
103
|
-
kwargs[:depth] = options[:depth] if options[:depth]
|
104
|
-
|
105
|
-
if options[:filter_bypass]
|
106
|
-
kwargs[:filter_bypass] = options[:filter_bypass]
|
107
|
-
end
|
108
|
-
|
109
|
-
return kwargs
|
110
|
-
end
|
111
|
-
|
112
100
|
#
|
113
101
|
# Scans a URL for LFI vulnerabilities.
|
114
102
|
#
|
@@ -64,25 +64,14 @@ module Ronin
|
|
64
64
|
type: String,
|
65
65
|
usage: 'URL'
|
66
66
|
},
|
67
|
-
desc: 'Optional test URL to try to redirect to'
|
67
|
+
desc: 'Optional test URL to try to redirect to' do |test_url|
|
68
|
+
scan_kwargs[:test_url] = test_url
|
69
|
+
end
|
68
70
|
|
69
71
|
description 'Scans URL(s) for Open Redirect vulnerabilities'
|
70
72
|
|
71
73
|
man_page 'ronin-vulns-open-redirect.1'
|
72
74
|
|
73
|
-
#
|
74
|
-
# Keyword arguments for `Vulns::OpenRedirect.scan` and
|
75
|
-
# `Vulns::OpenRedirect.test`.
|
76
|
-
#
|
77
|
-
# @return [Hash{Symbol => Object}]
|
78
|
-
#
|
79
|
-
def scan_kwargs
|
80
|
-
kwargs = super()
|
81
|
-
|
82
|
-
kwargs[:test_url] = options[:test_url] if options[:test_url]
|
83
|
-
return kwargs
|
84
|
-
end
|
85
|
-
|
86
75
|
#
|
87
76
|
# Scans a URL for Open Redirect vulnerabilities.
|
88
77
|
#
|
@@ -71,7 +71,9 @@ module Ronin
|
|
71
71
|
'null-byte' => :null_byte
|
72
72
|
}
|
73
73
|
},
|
74
|
-
desc: 'Optional filter-bypass strategy to use'
|
74
|
+
desc: 'Optional filter-bypass strategy to use' do |filter_bypass|
|
75
|
+
scan_kwargs[:filter_bypass] = filter_bypass
|
76
|
+
end
|
75
77
|
|
76
78
|
option :script_lang, short: '-S',
|
77
79
|
value: {
|
@@ -84,42 +86,23 @@ module Ronin
|
|
84
86
|
'perl' => :perl
|
85
87
|
}
|
86
88
|
},
|
87
|
-
desc: 'Explicitly specify the scripting language to test for'
|
89
|
+
desc: 'Explicitly specify the scripting language to test for' do |script_lang|
|
90
|
+
scan_kwargs[:script_lang] = script_lang
|
91
|
+
end
|
88
92
|
|
89
93
|
option :test_script_url, short: '-T',
|
90
94
|
value: {
|
91
95
|
type: String,
|
92
96
|
usage: 'URL'
|
93
97
|
},
|
94
|
-
desc: 'Use an alternative test script URL'
|
98
|
+
desc: 'Use an alternative test script URL' do |test_script_url|
|
99
|
+
scan_kwargs[:test_script_url] = test_script_url
|
100
|
+
end
|
95
101
|
|
96
102
|
description 'Scans URL(s) for Remote File Inclusion (RFI) vulnerabilities'
|
97
103
|
|
98
104
|
man_page 'ronin-vulns-rfi.1'
|
99
105
|
|
100
|
-
#
|
101
|
-
# Keyword arguments for `Vulns::RFI.scan` and `Vulns::RFI.test`.
|
102
|
-
#
|
103
|
-
# @return [Hash{Symbol => Object}]
|
104
|
-
#
|
105
|
-
def scan_kwargs
|
106
|
-
kwargs = super()
|
107
|
-
|
108
|
-
if options[:filter_bypass]
|
109
|
-
kwargs[:filter_bypass] = options[:filter_bypass]
|
110
|
-
end
|
111
|
-
|
112
|
-
if options[:script_lang]
|
113
|
-
kwargs[:script_lang] = options[:script_lang]
|
114
|
-
end
|
115
|
-
|
116
|
-
if options[:test_script_url]
|
117
|
-
kwargs[:test_script_url] = options[:test_script_url]
|
118
|
-
end
|
119
|
-
|
120
|
-
return kwargs
|
121
|
-
end
|
122
|
-
|
123
106
|
#
|
124
107
|
# Scans a URL for RFI vulnerabilities.
|
125
108
|
#
|
@@ -74,13 +74,17 @@ module Ronin
|
|
74
74
|
option :lfi_os, value: {
|
75
75
|
type: [:unix, :windows]
|
76
76
|
},
|
77
|
-
desc: 'Sets the OS to test for'
|
77
|
+
desc: 'Sets the OS to test for' do |os|
|
78
|
+
lfi_kwargs[:os] = os
|
79
|
+
end
|
78
80
|
|
79
81
|
option :lfi_depth, value: {
|
80
82
|
type: Integer,
|
81
83
|
usage: 'COUNT'
|
82
84
|
},
|
83
|
-
desc: 'Sets the directory depth to escape up'
|
85
|
+
desc: 'Sets the directory depth to escape up' do |depth|
|
86
|
+
lfi_kwargs[:depth] = depth
|
87
|
+
end
|
84
88
|
|
85
89
|
option :lfi_filter_bypass, value: {
|
86
90
|
type: [
|
@@ -91,7 +95,9 @@ module Ronin
|
|
91
95
|
:zlib
|
92
96
|
]
|
93
97
|
},
|
94
|
-
desc: 'Sets the filter bypass strategy to use'
|
98
|
+
desc: 'Sets the filter bypass strategy to use' do |filter_bypass|
|
99
|
+
lfi_kwargs[:filter_bypass] = filter_bypass
|
100
|
+
end
|
95
101
|
|
96
102
|
option :rfi_filter_bypass, value: {
|
97
103
|
type: {
|
@@ -100,7 +106,9 @@ module Ronin
|
|
100
106
|
'null-byte' => :null_byte
|
101
107
|
}
|
102
108
|
},
|
103
|
-
desc: 'Optional filter-bypass strategy to use'
|
109
|
+
desc: 'Optional filter-bypass strategy to use' do |filter_bypass|
|
110
|
+
rfi_kwargs[:filter_bypass] = filter_bypass
|
111
|
+
end
|
104
112
|
|
105
113
|
option :rfi_script_lang, value: {
|
106
114
|
type: {
|
@@ -112,33 +120,45 @@ module Ronin
|
|
112
120
|
'perl' => :perl
|
113
121
|
}
|
114
122
|
},
|
115
|
-
desc: 'Explicitly specify the scripting language to test for'
|
123
|
+
desc: 'Explicitly specify the scripting language to test for' do |script_lang|
|
124
|
+
rfi_kwargs[:script_lang] = script_lang
|
125
|
+
end
|
116
126
|
|
117
127
|
option :rfi_test_script_url, value: {
|
118
128
|
type: String,
|
119
129
|
usage: 'URL'
|
120
130
|
},
|
121
|
-
desc: 'Use an alternative test script URL'
|
131
|
+
desc: 'Use an alternative test script URL' do |test_script_url|
|
132
|
+
rfi_kwargs[:test_script_url] = test_script_url
|
133
|
+
end
|
122
134
|
|
123
|
-
option :sqli_escape_quote, desc: 'Escapes quotation marks'
|
135
|
+
option :sqli_escape_quote, desc: 'Escapes quotation marks' do
|
136
|
+
sqli_kwargs[:escape_quote] = true
|
137
|
+
end
|
124
138
|
|
125
|
-
option :sqli_escape_parens, desc: 'Escapes parenthesis'
|
139
|
+
option :sqli_escape_parens, desc: 'Escapes parenthesis' do
|
140
|
+
sqli_kwargs[:escape_parens] = true
|
141
|
+
end
|
126
142
|
|
127
|
-
option :sqli_terminate, desc: 'Terminates the SQL expression with a --'
|
143
|
+
option :sqli_terminate, desc: 'Terminates the SQL expression with a --' do
|
144
|
+
sqli_kwargs[:terminate] = true
|
145
|
+
end
|
128
146
|
|
129
147
|
option :ssti_test_expr, value: {
|
130
148
|
type: %r{\A\d+\s*[\*/\+\-]\s*\d+\z},
|
131
149
|
usage: '{X*Y | X/Z | X+Y | X-Y}'
|
132
150
|
},
|
133
151
|
desc: 'Optional numeric test to use' do |expr|
|
134
|
-
|
152
|
+
ssti_kwargs[:test_expr] = Vulns::SSTI::TestExpression.parse(expr)
|
135
153
|
end
|
136
154
|
|
137
155
|
option :open_redirect_url, value: {
|
138
156
|
type: String,
|
139
157
|
usage: 'URL'
|
140
158
|
},
|
141
|
-
desc: 'Optional test URL to try to redirect to'
|
159
|
+
desc: 'Optional test URL to try to redirect to' do |test_url|
|
160
|
+
open_redirect_kwargs[:test_url] = test_url
|
161
|
+
end
|
142
162
|
|
143
163
|
description 'Scans URL(s) for web vulnerabilities'
|
144
164
|
|
@@ -151,16 +171,7 @@ module Ronin
|
|
151
171
|
# @return [Hash{Symbol => Object}]
|
152
172
|
#
|
153
173
|
def lfi_kwargs
|
154
|
-
|
155
|
-
|
156
|
-
kwargs[:os] = options[:lfi_os] if options[:lfi_os]
|
157
|
-
kwargs[:depth] = options[:lfi_depth] if options[:lfi_depth]
|
158
|
-
|
159
|
-
if options[:lfi_filter_bypass]
|
160
|
-
kwargs[:filter_bypass] = options[:lfi_filter_bypass]
|
161
|
-
end
|
162
|
-
|
163
|
-
return kwargs
|
174
|
+
scan_kwargs[:lfi] ||= {}
|
164
175
|
end
|
165
176
|
|
166
177
|
#
|
@@ -170,21 +181,7 @@ module Ronin
|
|
170
181
|
# @return [Hash{Symbol => Object}]
|
171
182
|
#
|
172
183
|
def rfi_kwargs
|
173
|
-
|
174
|
-
|
175
|
-
if options[:rfi_filter_bypass]
|
176
|
-
kwargs[:filter_bypass] = options[:rfi_filter_bypass]
|
177
|
-
end
|
178
|
-
|
179
|
-
if options[:rfi_script_lang]
|
180
|
-
kwargs[:script_lang] = options[:rfi_script_lang]
|
181
|
-
end
|
182
|
-
|
183
|
-
if options[:rfi_test_script_url]
|
184
|
-
kwargs[:test_script_url] = options[:rfi_test_script_url]
|
185
|
-
end
|
186
|
-
|
187
|
-
return kwargs
|
184
|
+
scan_kwargs[:rfi] ||= {}
|
188
185
|
end
|
189
186
|
|
190
187
|
#
|
@@ -194,21 +191,7 @@ module Ronin
|
|
194
191
|
# @return [Hash{Symbol => Object}]
|
195
192
|
#
|
196
193
|
def sqli_kwargs
|
197
|
-
|
198
|
-
|
199
|
-
if options[:sqli_escape_quote]
|
200
|
-
kwargs[:escape_quote] = options[:sqli_escape_quote]
|
201
|
-
end
|
202
|
-
|
203
|
-
if options[:sqli_escape_parens]
|
204
|
-
kwargs[:escape_parens] = options[:sqli_escape_parens]
|
205
|
-
end
|
206
|
-
|
207
|
-
if options[:sqli_terminate]
|
208
|
-
kwargs[:terminate] = options[:sqli_terminate]
|
209
|
-
end
|
210
|
-
|
211
|
-
return kwargs
|
194
|
+
scan_kwargs[:sqli] ||= {}
|
212
195
|
end
|
213
196
|
|
214
197
|
#
|
@@ -218,11 +201,7 @@ module Ronin
|
|
218
201
|
# @return [Hash{Symbol => Object}]
|
219
202
|
#
|
220
203
|
def ssti_kwargs
|
221
|
-
|
222
|
-
|
223
|
-
kwargs[:test_expr] = @ssti_test_expr if @ssti_test_expr
|
224
|
-
|
225
|
-
return kwargs
|
204
|
+
scan_kwargs[:ssti] ||= {}
|
226
205
|
end
|
227
206
|
|
228
207
|
#
|
@@ -232,13 +211,7 @@ module Ronin
|
|
232
211
|
# @return [Hash{Symbol => Object}]
|
233
212
|
#
|
234
213
|
def open_redirect_kwargs
|
235
|
-
|
236
|
-
|
237
|
-
if options[:open_redirect_url]
|
238
|
-
kwargs[:test_url] = options[:open_redirect_url]
|
239
|
-
end
|
240
|
-
|
241
|
-
return kwargs
|
214
|
+
scan_kwargs[:open_redirect] ||= {}
|
242
215
|
end
|
243
216
|
|
244
217
|
#
|
@@ -248,26 +221,7 @@ module Ronin
|
|
248
221
|
# @return [Hash{Symbol => Object}]
|
249
222
|
#
|
250
223
|
def reflected_xss_kwargs
|
251
|
-
{}
|
252
|
-
end
|
253
|
-
|
254
|
-
#
|
255
|
-
# Keyword arguments for `Vulns::URLScanner.scan` and
|
256
|
-
# `Vulns::URLScanner.test`.
|
257
|
-
#
|
258
|
-
# @return [Hash{Symbol => Object}]
|
259
|
-
#
|
260
|
-
def scan_kwargs
|
261
|
-
kwargs = super()
|
262
|
-
|
263
|
-
kwargs[:lfi] = lfi_kwargs
|
264
|
-
kwargs[:rfi] = rfi_kwargs
|
265
|
-
kwargs[:sqli] = sqli_kwargs
|
266
|
-
kwargs[:ssti] = ssti_kwargs
|
267
|
-
kwargs[:open_redirect] = open_redirect_kwargs
|
268
|
-
kwargs[:reflected_xss] = reflected_xss_kwargs
|
269
|
-
|
270
|
-
return kwargs
|
224
|
+
scan_kwargs[:reflected_xss] ||= {}
|
271
225
|
end
|
272
226
|
|
273
227
|
#
|
@@ -61,42 +61,22 @@ module Ronin
|
|
61
61
|
|
62
62
|
usage '[options] {URL ... | --input FILE}'
|
63
63
|
|
64
|
-
option :escape_quote, short: '-Q',
|
65
|
-
|
64
|
+
option :escape_quote, short: '-Q', desc: 'Escapes quotation marks' do
|
65
|
+
scan_kwargs[:escape_quote] = true
|
66
|
+
end
|
66
67
|
|
67
|
-
option :escape_parens, short: '-P',
|
68
|
-
|
68
|
+
option :escape_parens, short: '-P', desc: 'Escapes parenthesis' do
|
69
|
+
scan_kwargs[:escape_parens] = true
|
70
|
+
end
|
69
71
|
|
70
|
-
option :terminate, short: '-T',
|
71
|
-
|
72
|
+
option :terminate, short: '-T', desc: 'Terminates the SQL expression with a --' do
|
73
|
+
scan_kwargs[:terminate] = true
|
74
|
+
end
|
72
75
|
|
73
76
|
description 'Scans URL(s) for SQL injection (SQLi) vulnerabilities'
|
74
77
|
|
75
78
|
man_page 'ronin-vulns-sqli.1'
|
76
79
|
|
77
|
-
#
|
78
|
-
# Keyword arguments for `Vulns::SQLI.scan` and `Vulns::SQLI.test`.
|
79
|
-
#
|
80
|
-
# @return [Hash{Symbol => Object}]
|
81
|
-
#
|
82
|
-
def scan_kwargs
|
83
|
-
kwargs = super()
|
84
|
-
|
85
|
-
if options[:escape_quote]
|
86
|
-
kwargs[:escape_quote] = options[:escape_quote]
|
87
|
-
end
|
88
|
-
|
89
|
-
if options[:escape_parens]
|
90
|
-
kwargs[:escape_parens] = options[:escape_parens]
|
91
|
-
end
|
92
|
-
|
93
|
-
if options[:terminate]
|
94
|
-
kwargs[:terminate] = options[:terminate]
|
95
|
-
end
|
96
|
-
|
97
|
-
return kwargs
|
98
|
-
end
|
99
|
-
|
100
80
|
#
|
101
81
|
# Scans a URL for SQLi vulnerabilities.
|
102
82
|
#
|
@@ -67,30 +67,13 @@ module Ronin
|
|
67
67
|
usage: '{X*Y | X/Z | X+Y | X-Y}'
|
68
68
|
},
|
69
69
|
desc: 'Optional numeric test to use' do |expr|
|
70
|
-
|
70
|
+
scan_kwargs[:test_expr] = Vulns::SSTI::TestExpression.parse(expr)
|
71
71
|
end
|
72
72
|
|
73
73
|
description 'Scans URL(s) for Server Side Template Injection (SSTI) vulnerabilities'
|
74
74
|
|
75
75
|
man_page 'ronin-vulns-ssti.1'
|
76
76
|
|
77
|
-
# The expression to use to test for SSTI.
|
78
|
-
#
|
79
|
-
# @return [Vulns::SSTI::TestExpression, nil]
|
80
|
-
attr_reader :test_expr
|
81
|
-
|
82
|
-
#
|
83
|
-
# Keyword arguments for `Vulns::SSTI.scan` and `Vulns::SSTI.test`.
|
84
|
-
#
|
85
|
-
# @return [Hash{Symbol => Object}]
|
86
|
-
#
|
87
|
-
def scan_kwargs
|
88
|
-
kwargs = super()
|
89
|
-
|
90
|
-
kwargs[:test_expr] = @test_expr if @test_expr
|
91
|
-
return kwargs
|
92
|
-
end
|
93
|
-
|
94
77
|
#
|
95
78
|
# Scans a URL for SSTI vulnerabilities.
|
96
79
|
#
|
@@ -60,13 +60,13 @@ module Ronin
|
|
60
60
|
def log_vuln(vuln)
|
61
61
|
vuln_name = vuln_type(vuln)
|
62
62
|
location = if vuln.query_param
|
63
|
-
"query param #{vuln.query_param}"
|
63
|
+
"query param '#{vuln.query_param}'"
|
64
64
|
elsif vuln.header_name
|
65
|
-
"Header #{vuln.header_name}"
|
65
|
+
"Header '#{vuln.header_name}'"
|
66
66
|
elsif vuln.cookie_param
|
67
|
-
"Cookie param #{vuln.cookie_param}"
|
67
|
+
"Cookie param '#{vuln.cookie_param}'"
|
68
68
|
elsif vuln.form_param
|
69
|
-
"form param #{vuln.form_param}"
|
69
|
+
"form param '#{vuln.form_param}'"
|
70
70
|
end
|
71
71
|
|
72
72
|
if location
|
@@ -53,10 +53,7 @@ module Ronin
|
|
53
53
|
desc: 'Sets an additional header' do |header|
|
54
54
|
name, value = header.split(/:\s*/,2)
|
55
55
|
|
56
|
-
|
57
|
-
@headers ||= {}
|
58
|
-
|
59
|
-
@headers[name] = value
|
56
|
+
self.headers[name] = value
|
60
57
|
end
|
61
58
|
|
62
59
|
option :cookie, short: '-C',
|
@@ -65,7 +62,9 @@ module Ronin
|
|
65
62
|
usage: 'COOKIE'
|
66
63
|
},
|
67
64
|
desc: 'Sets the raw Cookie header' do |cookie|
|
68
|
-
|
65
|
+
cookie = Support::Network::HTTP::Cookie.parse(cookie)
|
66
|
+
|
67
|
+
self.cookie.merge!(cookie)
|
69
68
|
end
|
70
69
|
|
71
70
|
option :cookie_param, short: '-c',
|
@@ -76,10 +75,7 @@ module Ronin
|
|
76
75
|
desc: 'Sets an additional cookie param' do |param|
|
77
76
|
name, value = param.split('=',2)
|
78
77
|
|
79
|
-
|
80
|
-
@cookie ||= Support::Network::HTTP::Cookie.new
|
81
|
-
|
82
|
-
@cookie[name] = value
|
78
|
+
self.cookie[name] = value
|
83
79
|
end
|
84
80
|
|
85
81
|
option :referer, short: '-R',
|
@@ -88,7 +84,7 @@ module Ronin
|
|
88
84
|
usage: 'URL'
|
89
85
|
},
|
90
86
|
desc: 'Sets the Referer header' do |referer|
|
91
|
-
|
87
|
+
self.referer = referer
|
92
88
|
end
|
93
89
|
|
94
90
|
option :form_param, short: '-F',
|
@@ -99,10 +95,7 @@ module Ronin
|
|
99
95
|
desc: 'Sets an additional form param' do |param|
|
100
96
|
name, value = param.split('=',2)
|
101
97
|
|
102
|
-
|
103
|
-
@form_data ||= {}
|
104
|
-
|
105
|
-
@form_data[name] = value
|
98
|
+
self.form_data[name] = value
|
106
99
|
end
|
107
100
|
|
108
101
|
option :test_query_param, value: {
|
@@ -110,14 +103,16 @@ module Ronin
|
|
110
103
|
usage: 'NAME'
|
111
104
|
},
|
112
105
|
desc: 'Tests the URL query param name' do |name|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
106
|
+
case (test_query_params = self.test_query_params)
|
107
|
+
when true
|
108
|
+
# no-op, test all query params
|
109
|
+
when Set
|
110
|
+
test_query_params << name
|
111
|
+
end
|
117
112
|
end
|
118
113
|
|
119
114
|
option :test_all_query_params, desc: 'Test all URL query param names' do
|
120
|
-
|
115
|
+
self.test_query_params = true
|
121
116
|
end
|
122
117
|
|
123
118
|
option :test_header_name, value: {
|
@@ -125,10 +120,7 @@ module Ronin
|
|
125
120
|
usage: 'NAME'
|
126
121
|
},
|
127
122
|
desc: 'Tests the HTTP Header name' do |name|
|
128
|
-
|
129
|
-
@test_header_names ||= Set.new
|
130
|
-
|
131
|
-
@test_header_names << name
|
123
|
+
self.test_header_names << name
|
132
124
|
end
|
133
125
|
|
134
126
|
option :test_cookie_param, value: {
|
@@ -136,26 +128,25 @@ module Ronin
|
|
136
128
|
usage: 'NAME'
|
137
129
|
},
|
138
130
|
desc: 'Tests the HTTP Cookie name' do |name|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
131
|
+
case (test_cookie_params = self.test_cookie_params)
|
132
|
+
when true
|
133
|
+
# no-op, test all query params
|
134
|
+
when Set
|
135
|
+
test_cookie_params << name
|
136
|
+
end
|
143
137
|
end
|
144
138
|
|
145
139
|
option :test_all_cookie_params, desc: 'Test all Cookie param names' do
|
146
|
-
|
140
|
+
self.test_cookie_params = true
|
147
141
|
end
|
148
142
|
|
149
143
|
option :test_form_param, value: {
|
150
144
|
type: String,
|
151
|
-
|
145
|
+
usage: 'NAME'
|
152
146
|
},
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
@test_form_params << name
|
158
|
-
end
|
147
|
+
desc: 'Tests the form param name' do |name|
|
148
|
+
self.test_form_params << name
|
149
|
+
end
|
159
150
|
|
160
151
|
option :input, short: '-i',
|
161
152
|
value: {
|
@@ -175,60 +166,11 @@ module Ronin
|
|
175
166
|
# * `:all` - Find all vulnerabilities for each URL.
|
176
167
|
attr_reader :scan_mode
|
177
168
|
|
178
|
-
#
|
179
|
-
#
|
180
|
-
# @return [Hash{String => String}, nil]
|
181
|
-
attr_reader :headers
|
182
|
-
|
183
|
-
# The raw `Cookie` header to send.
|
184
|
-
#
|
185
|
-
# @return [String, nil]
|
186
|
-
attr_reader :raw_cookie
|
187
|
-
|
188
|
-
# The optional `Cookie` header to send.
|
189
|
-
#
|
190
|
-
# @return [Ronin::Support::Network::HTTP::Cookie, nil]
|
191
|
-
attr_reader :cookie
|
192
|
-
|
193
|
-
# The optional `Referer` header to send.
|
194
|
-
#
|
195
|
-
# @return [String, nil]
|
196
|
-
attr_reader :referer
|
197
|
-
|
198
|
-
# Additional form params.
|
199
|
-
#
|
200
|
-
# @return [Hash{String => String}, nil]
|
201
|
-
attr_reader :form_data
|
202
|
-
|
203
|
-
# The URL query params to test.
|
204
|
-
#
|
205
|
-
# @return [Set<String>, nil]
|
206
|
-
attr_reader :test_query_params
|
207
|
-
|
208
|
-
# Indicates whether to test all of the query params of the URL.
|
209
|
-
#
|
210
|
-
# @return [Boolean, nil]
|
211
|
-
attr_reader :test_all_query_params
|
212
|
-
|
213
|
-
# The HTTP Header names to test.
|
214
|
-
#
|
215
|
-
# @return [Set<String>, nil]
|
216
|
-
attr_reader :test_header_names
|
217
|
-
|
218
|
-
# The HTTP Cookie to test.
|
219
|
-
#
|
220
|
-
# @return [Set<String>, nil]
|
221
|
-
attr_reader :test_cookie_params
|
222
|
-
|
223
|
-
# Indicates whether to test all `Cookie` params for the URL.
|
169
|
+
# Keywrod arguments that will be used in {#scan_url} and {#test_url} to
|
170
|
+
# call {WebVuln.scan} or {WebVuln.test}.
|
224
171
|
#
|
225
|
-
# @return [
|
226
|
-
attr_reader :
|
227
|
-
|
228
|
-
# The form params to test.
|
229
|
-
#
|
230
|
-
# @return [Set<String>, nil]
|
231
|
-
attr_reader :test_form_params
|
172
|
+
# @return [Hash{Symbol => Object}]
|
173
|
+
attr_reader :scan_kwargs
|
232
174
|
|
233
175
|
#
|
234
176
|
# Initializes the command.
|
@@ -239,7 +181,8 @@ module Ronin
|
|
239
181
|
def initialize(**kwargs)
|
240
182
|
super(**kwargs)
|
241
183
|
|
242
|
-
@scan_mode
|
184
|
+
@scan_mode = :first
|
185
|
+
@scan_kwargs = {}
|
243
186
|
end
|
244
187
|
|
245
188
|
#
|
@@ -308,42 +251,111 @@ module Ronin
|
|
308
251
|
end
|
309
252
|
|
310
253
|
#
|
311
|
-
#
|
254
|
+
# Additional headers.
|
312
255
|
#
|
313
256
|
# @return [Hash{String => String}]
|
314
|
-
# The keyword arguments.
|
315
257
|
#
|
316
|
-
def
|
317
|
-
|
258
|
+
def headers
|
259
|
+
@scan_kwargs[:headers] ||= {}
|
260
|
+
end
|
261
|
+
|
262
|
+
#
|
263
|
+
# The optional `Cookie` header to send.
|
264
|
+
#
|
265
|
+
# @return [Ronin::Support::Network::HTTP::Cookie]
|
266
|
+
#
|
267
|
+
def cookie
|
268
|
+
@scan_kwargs[:cookie] ||= Support::Network::HTTP::Cookie.new
|
269
|
+
end
|
318
270
|
|
319
|
-
|
271
|
+
#
|
272
|
+
# The optional HTTP `Referer` header to send.
|
273
|
+
#
|
274
|
+
# @return [String, nil]
|
275
|
+
#
|
276
|
+
def referer
|
277
|
+
@scan_kwargs[:referer]
|
278
|
+
end
|
320
279
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
280
|
+
#
|
281
|
+
# Sets the HTTP `Referer` header to send.
|
282
|
+
#
|
283
|
+
# @param [String, nil] new_referer
|
284
|
+
# The new `Referer` header to send.
|
285
|
+
#
|
286
|
+
# @return [String, nil]
|
287
|
+
#
|
288
|
+
def referer=(new_referer)
|
289
|
+
@scan_kwargs[:referer] = new_referer
|
290
|
+
end
|
326
291
|
|
327
|
-
|
328
|
-
|
292
|
+
#
|
293
|
+
# Additional form params.
|
294
|
+
#
|
295
|
+
# @return [Hash{String => String}, nil]
|
296
|
+
#
|
297
|
+
def form_data
|
298
|
+
@scan_kwargs[:form_data] ||= {}
|
299
|
+
end
|
329
300
|
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
301
|
+
#
|
302
|
+
# The URL query params to test.
|
303
|
+
#
|
304
|
+
# @return [Set<String>, true]
|
305
|
+
#
|
306
|
+
def test_query_params
|
307
|
+
@scan_kwargs[:query_params] ||= Set.new
|
308
|
+
end
|
309
|
+
|
310
|
+
#
|
311
|
+
# Sets the URL query params to test.
|
312
|
+
#
|
313
|
+
# @param [Set<String>, true] new_query_params
|
314
|
+
# The query params to test.
|
315
|
+
#
|
316
|
+
# @return [Set<String>, true]
|
317
|
+
#
|
318
|
+
def test_query_params=(new_query_params)
|
319
|
+
@scan_kwargs[:query_params] = new_query_params
|
320
|
+
end
|
335
321
|
|
336
|
-
|
322
|
+
#
|
323
|
+
# The HTTP Header names to test.
|
324
|
+
#
|
325
|
+
# @return [Set<String>]
|
326
|
+
#
|
327
|
+
def test_header_names
|
328
|
+
@scan_kwargs[:header_names] ||= Set.new
|
329
|
+
end
|
337
330
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
331
|
+
#
|
332
|
+
# The HTTP Cookie to test.
|
333
|
+
#
|
334
|
+
# @return [Set<String>, true]
|
335
|
+
#
|
336
|
+
def test_cookie_params
|
337
|
+
@scan_kwargs[:cookie_params] ||= Set.new
|
338
|
+
end
|
343
339
|
|
344
|
-
|
340
|
+
#
|
341
|
+
# Sets the HTTP Cookie to test.
|
342
|
+
#
|
343
|
+
# @param [Set<String>, true] new_cookie_params
|
344
|
+
# The new cookie param names to test.
|
345
|
+
#
|
346
|
+
# @return [Set<String>, true]
|
347
|
+
#
|
348
|
+
def test_cookie_params=(new_cookie_params)
|
349
|
+
@scan_kwargs[:cookie_params] = new_cookie_params
|
350
|
+
end
|
345
351
|
|
346
|
-
|
352
|
+
#
|
353
|
+
# The form params to test.
|
354
|
+
#
|
355
|
+
# @return [Set<String>, nil]
|
356
|
+
#
|
357
|
+
def test_form_params
|
358
|
+
@scan_kwargs[:form_params] ||= Set.new
|
347
359
|
end
|
348
360
|
|
349
361
|
#
|
@@ -80,7 +80,7 @@ module Ronin
|
|
80
80
|
when '301', '302', '303', '307', '308'
|
81
81
|
if (locations = response.get_fields('Location'))
|
82
82
|
escaped_test_url = Regexp.escape(@test_url)
|
83
|
-
regexp = /\A#{escaped_test_url}
|
83
|
+
regexp = /\A#{escaped_test_url}.*\z/
|
84
84
|
|
85
85
|
locations.last =~ regexp
|
86
86
|
end
|
@@ -95,10 +95,34 @@ module Ronin
|
|
95
95
|
http-equiv\s*=\s*(?: "refresh" | 'refresh' | refresh )\s+
|
96
96
|
content\s*=\s*
|
97
97
|
(?:
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
# content="..."
|
99
|
+
"\s*\d+\s*;\s*url\s*=\s*
|
100
|
+
(?:
|
101
|
+
# content="0; url='...'"
|
102
|
+
'\s*#{escaped_test_url}[^'"]*' |
|
103
|
+
# content="0; url=..."
|
104
|
+
#{escaped_test_url}[^"]*
|
105
|
+
)\s*" |
|
106
|
+
# content='...'
|
107
|
+
'\s*\d+\s*;\s*url\s*=\s*
|
108
|
+
(?:
|
109
|
+
# content='0; url="..."'
|
110
|
+
"\s*#{escaped_test_url}[^"']*" |
|
111
|
+
# content='0; url=...'
|
112
|
+
#{escaped_test_url}[^']*
|
113
|
+
)\s*' |
|
114
|
+
# content=...
|
115
|
+
\s*\d+;url=(?:
|
116
|
+
# content=0;url="..."
|
117
|
+
"\s*#{escaped_test_url}[^\s"]*" |
|
118
|
+
# content=0;url='...'
|
119
|
+
'\s*#{escaped_test_url}[^\s']*' |
|
120
|
+
# content=0;url=...
|
121
|
+
#{escaped_test_url}[^\s/>]*
|
122
|
+
)
|
123
|
+
)
|
124
|
+
\s*
|
125
|
+
# /> or / >
|
102
126
|
(?:/\s*)?>
|
103
127
|
}xi
|
104
128
|
|
data/lib/ronin/vulns/sqli.rb
CHANGED
@@ -30,6 +30,16 @@ module Ronin
|
|
30
30
|
#
|
31
31
|
# Top-level module which scans a URL for all web vulnerabilities.
|
32
32
|
#
|
33
|
+
# ## Examples
|
34
|
+
#
|
35
|
+
# require 'ronin/vulns/url_scanner'
|
36
|
+
#
|
37
|
+
# Ronin::Vulns::URLScanner.scan(url) do |vuln|
|
38
|
+
# # ...
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# vuln = Ronin::Vulns::URLScanner.test(url)
|
42
|
+
#
|
33
43
|
module URLScanner
|
34
44
|
#
|
35
45
|
# Scans a URL for web vulnerabilities.
|
data/lib/ronin/vulns/version.rb
CHANGED
data/man/ronin-vulns-lfi.1
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-lfi 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns lfi\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-open-redirect 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns open-redirect\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-reflected-xss 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns reflected-xss\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
data/man/ronin-vulns-rfi.1
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-rfi 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns rfi\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
@@ -82,7 +82,7 @@ Reads URLs from the given \fIFILE\fP\.
|
|
82
82
|
\fB-B\fR, \fB--filter-bypass\fR \fBdouble-encode\fR\[or]\fBsuffix-escape\fR\[or]\fBnull-byte\fR
|
83
83
|
Optional filter\-bypass strategy to use\.
|
84
84
|
.LP
|
85
|
-
.
|
85
|
+
.PP
|
86
86
|
\fB-S\fR, \fB--script-lang\fR \fBasp\|\fRasp\.net\fB\|\fRcoldfusion\fB\|\fRjsp\fB\|\fRphp\fB\|\fRperl\`
|
87
87
|
Explicitly specify the scripting language to test for\.
|
88
88
|
.LP
|
data/man/ronin-vulns-scan.1
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-scan 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns scan\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
@@ -113,7 +113,7 @@ Escapes parenthesis\.
|
|
113
113
|
\fB--sqli-terminate\fR
|
114
114
|
Terminates the SQL expression with a \fB--\fR\.
|
115
115
|
.LP
|
116
|
-
.
|
116
|
+
.PP
|
117
117
|
\fB--ssti-test-expr\fR \[lC]\fIX\fP*\fIY\fP \[or] \fIX\fP\[sl]\fIZ\fP \[or] \fIX\fP\[pl]\fIY\fP \[or] \fIX\fP\-\fIY\fP\[rC]
|
118
118
|
Optional numeric test to use\.
|
119
119
|
.LP
|
data/man/ronin-vulns-sqli.1
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-sqli 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns sqli\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
data/man/ronin-vulns-ssti.1
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
.\" Generated by kramdown-man 0.1.
|
1
|
+
.\" Generated by kramdown-man 0.1.9
|
2
2
|
.\" https://github.com/postmodern/kramdown-man#readme
|
3
3
|
.TH ronin-vulns-lfi 1 "May 2022" Ronin "User Manuals"
|
4
4
|
.LP
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.LP
|
7
|
-
.
|
7
|
+
.PP
|
8
8
|
\fBronin-vulns lfi\fR \[lB]\fIoptions\fP\[rB] \[lC]\fIURL\fP \.\.\. \[or] \fB--input\fR \fIFILE\fP\[rC]
|
9
9
|
.LP
|
10
10
|
.SH DESCRIPTION
|
@@ -78,7 +78,7 @@ Tests the form param name\.
|
|
78
78
|
\fB-i\fR, \fB--input\fR \fIFILE\fP
|
79
79
|
Reads URLs from the given \fIFILE\fP\.
|
80
80
|
.LP
|
81
|
-
.
|
81
|
+
.PP
|
82
82
|
\fB-T\fR, \fB--test-expr\fR \[lC]\fIX*Y\fP \[or] \fIX\[sl]Z\fP \[or] \fIX\[pl]Y\fP \[or] \fIX\-Y\fP\[rC]
|
83
83
|
Optional numeric test to use\.
|
84
84
|
.LP
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ronin-vulns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ronin-support
|
@@ -159,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
requirements: []
|
162
|
-
rubygems_version: 3.3.
|
162
|
+
rubygems_version: 3.3.27
|
163
163
|
signing_key:
|
164
164
|
specification_version: 4
|
165
165
|
summary: Tests URLs for Local File Inclusion (LFI), Remove File Inclusion (RFI), SQL
|