ronin-vulns 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/ChangeLog.md +43 -0
- data/Gemfile +14 -4
- data/README.md +7 -3
- data/Rakefile +9 -0
- data/data/completions/ronin-vulns +139 -0
- data/gemspec.yml +7 -1
- data/lib/ronin/vulns/cli/command.rb +1 -1
- data/lib/ronin/vulns/cli/commands/command_injection.rb +163 -0
- data/lib/ronin/vulns/cli/commands/completion.rb +63 -0
- data/lib/ronin/vulns/cli/commands/irb.rb +59 -0
- data/lib/ronin/vulns/cli/commands/lfi.rb +21 -9
- data/lib/ronin/vulns/cli/commands/open_redirect.rb +13 -1
- data/lib/ronin/vulns/cli/commands/reflected_xss.rb +13 -1
- data/lib/ronin/vulns/cli/commands/rfi.rb +13 -1
- data/lib/ronin/vulns/cli/commands/scan.rb +21 -9
- data/lib/ronin/vulns/cli/commands/sqli.rb +13 -1
- data/lib/ronin/vulns/cli/commands/ssti.rb +13 -1
- data/lib/ronin/vulns/cli/importable.rb +76 -0
- data/lib/ronin/vulns/cli/printing.rb +184 -0
- data/lib/ronin/vulns/cli/ruby_shell.rb +53 -0
- data/lib/ronin/vulns/cli/web_vuln_command.rb +216 -20
- data/lib/ronin/vulns/cli.rb +5 -2
- data/lib/ronin/vulns/command_injection.rb +267 -0
- data/lib/ronin/vulns/importer.rb +116 -0
- data/lib/ronin/vulns/lfi/test_file.rb +1 -1
- data/lib/ronin/vulns/lfi.rb +1 -1
- data/lib/ronin/vulns/open_redirect.rb +1 -1
- data/lib/ronin/vulns/reflected_xss/context.rb +1 -1
- data/lib/ronin/vulns/reflected_xss/test_string.rb +1 -1
- data/lib/ronin/vulns/reflected_xss.rb +1 -1
- data/lib/ronin/vulns/rfi.rb +64 -9
- data/lib/ronin/vulns/root.rb +1 -1
- data/lib/ronin/vulns/sqli/error_pattern.rb +1 -1
- data/lib/ronin/vulns/sqli.rb +36 -28
- data/lib/ronin/vulns/ssti/test_expression.rb +1 -1
- data/lib/ronin/vulns/ssti.rb +69 -53
- data/lib/ronin/vulns/url_scanner.rb +10 -1
- data/lib/ronin/vulns/version.rb +2 -2
- data/lib/ronin/vulns/vuln.rb +1 -1
- data/lib/ronin/vulns/web_vuln/http_request.rb +40 -1
- data/lib/ronin/vulns/web_vuln.rb +86 -16
- data/man/ronin-vulns-command-injection.1 +109 -0
- data/man/ronin-vulns-command-injection.1.md +112 -0
- data/man/ronin-vulns-completion.1 +76 -0
- data/man/ronin-vulns-completion.1.md +78 -0
- data/man/ronin-vulns-irb.1 +27 -0
- data/man/ronin-vulns-irb.1.md +26 -0
- data/man/ronin-vulns-lfi.1 +54 -51
- data/man/ronin-vulns-lfi.1.md +52 -20
- data/man/ronin-vulns-open-redirect.1 +51 -47
- data/man/ronin-vulns-open-redirect.1.md +50 -18
- data/man/ronin-vulns-reflected-xss.1 +50 -45
- data/man/ronin-vulns-reflected-xss.1.md +49 -17
- data/man/ronin-vulns-rfi.1 +54 -52
- data/man/ronin-vulns-rfi.1.md +52 -20
- data/man/ronin-vulns-scan.1 +68 -69
- data/man/ronin-vulns-scan.1.md +61 -29
- data/man/ronin-vulns-sqli.1 +54 -52
- data/man/ronin-vulns-sqli.1.md +52 -20
- data/man/ronin-vulns-ssti.1 +52 -48
- data/man/ronin-vulns-ssti.1.md +50 -18
- data/man/ronin-vulns.1 +73 -0
- data/man/ronin-vulns.1.md +69 -0
- data/scripts/setup +58 -0
- metadata +37 -6
- data/lib/ronin/vulns/cli/logging.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f85a5bba0bb4a422a95316e0dddb0c7bc6dace635dacdfb70383ac925dbbab5
|
4
|
+
data.tar.gz: 800a23af5c4644241de686603742f4cf83ea6fb470c040b2f19107078c4489bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b297246e840a328cac9da408fc5f9721c0d23b586cda220be8343ee106e52a4f24a04d62ba58796ea2bdbcb3626f6dffaa6b9d38a6b72323eb7423c2efaa3437
|
7
|
+
data.tar.gz: f7f0b65146e05e9480395c6cb0f97affb2bd2f269322a097bece4c66f54c12aa9c3e3662603bed4b5199a2e6e9432b9d016fc6845f5ab6d937a385da40afce33
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-3.
|
1
|
+
ruby-3.3
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,45 @@
|
|
1
|
+
### 0.2.0 / 2024-07-22
|
2
|
+
|
3
|
+
* Require [ronin-db] ~> 0.2
|
4
|
+
* Added {Ronin::Vulns::Importer}.
|
5
|
+
* Added the `user_agent:` keyword argument to
|
6
|
+
{Ronin::Vulns::WebVuln#initialize}.
|
7
|
+
* Added {Ronin::Vulns::WebVuln#user_agent}.
|
8
|
+
* Added {Ronin::Vulns::CommandInjection}.
|
9
|
+
* Added the `command_injection:` keyword argument to
|
10
|
+
{Ronin::Vulns::URLScanner.scan}.
|
11
|
+
* Added {Ronin::Vulns::RFI#script_lang}.
|
12
|
+
* Support inferring the {Ronin::Vulns::RFI#script_lang} from the URL given to
|
13
|
+
{Ronin::Vulns::RFI#initialize}.
|
14
|
+
* Bruteforce test every different kind of RFI test URL in
|
15
|
+
{Ronin::Vulns::RFI#vulnerable?} if a test script URL was not given or the
|
16
|
+
{Ronin::Vulns::RFI#script_lang} cannot be inferred from the given URL.
|
17
|
+
* Allow the `escape_type:` keyword argument for {Ronin::Vulns::SSTI#initialize}
|
18
|
+
to accept a Symbol value to specify the specific
|
19
|
+
Server-Side-Template-Injection interpolation syntax:
|
20
|
+
* `:double_curly_braces` - `{{expression}}`
|
21
|
+
* `:dollar_curly_braces` - `${expression}`
|
22
|
+
* `:dollar_double_curly_braces` - `${{expression}}`
|
23
|
+
* `:pound_curly_braces` - `#{expression}`
|
24
|
+
* `:angle_brackets_percent` - `<%= expression %>`
|
25
|
+
|
26
|
+
#### CLI
|
27
|
+
|
28
|
+
* Added the `ronin-vulns command-injection` command.
|
29
|
+
* Added the `ronin-vulns irb` command.
|
30
|
+
* Added the `ronin-vulns completion` command to install shell completion files
|
31
|
+
for all `ronin-vulns` commands for Bash and Zsh shells.
|
32
|
+
* Added the `-H,--request-method` option to all commands.
|
33
|
+
* Added the `--user-agent` and `--user-agent-string` options to all commands.
|
34
|
+
* Added the `--test-all-form-params` option to all commands.
|
35
|
+
* Added the `--print-curl` and `--print-http` options to all commands.
|
36
|
+
* Added the `--import` option to all commands.
|
37
|
+
* Print a summary of all vulnerabilities found after scanning a URL, in addition
|
38
|
+
to logging messages indicating when a new vulnerability has just been found.
|
39
|
+
* Use hyphenated values for the `--lfi-filter-bypass` option in the
|
40
|
+
`ronin-vulns scan` command and `--filter-bypass` option in the
|
41
|
+
`ronin-vulns lfi` command.
|
42
|
+
|
1
43
|
### 0.1.5 / 2024-06-19
|
2
44
|
|
3
45
|
* Improve the accuracy of {Ronin::Vulns::OpenRedirect#vulnerable?} when
|
@@ -68,3 +110,4 @@
|
|
68
110
|
* HTTP `Cookie` parameters.
|
69
111
|
* Form parameters.
|
70
112
|
|
113
|
+
[ronin-db]: https://github.com/ronin-rb/ronin-db#readme
|
data/Gemfile
CHANGED
@@ -4,7 +4,11 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
gemspec
|
6
6
|
|
7
|
-
|
7
|
+
platform :jruby do
|
8
|
+
gem 'jruby-openssl', '~> 0.7'
|
9
|
+
gem 'activerecord-jdbcsqlite3-adapter', '~> 70.0'
|
10
|
+
gem 'activerecord', '< 7.1.0'
|
11
|
+
end
|
8
12
|
|
9
13
|
# gem 'command_kit', '~> 0.4', github: 'postmodern/command_kit.rb',
|
10
14
|
# branch: '0.4.0'
|
@@ -12,8 +16,12 @@ gem 'jruby-openssl', '~> 0.7', platforms: :jruby
|
|
12
16
|
# Ronin dependencies
|
13
17
|
# gem 'ronin-support', '~> 1.0', github: 'ronin-rb/ronin-support',
|
14
18
|
# branch: 'main'
|
15
|
-
# gem 'ronin-core',
|
16
|
-
#
|
19
|
+
# gem 'ronin-core', '~> 0.2', github: 'ronin-rb/ronin-core',
|
20
|
+
# branch: 'main'
|
21
|
+
# gem 'ronin-db', '~> 0.2', github: 'ronin-rb/ronin-db',
|
22
|
+
# branch: 'main'
|
23
|
+
# gem 'ronin-db-activerecord', '~> 0.2', github: 'ronin-rb/ronin-db-activerecord',
|
24
|
+
# branch: 'main'
|
17
25
|
|
18
26
|
group :development do
|
19
27
|
gem 'rake'
|
@@ -24,7 +32,7 @@ group :development do
|
|
24
32
|
gem 'simplecov', '~> 0.20'
|
25
33
|
|
26
34
|
gem 'kramdown', '~> 2.0'
|
27
|
-
gem 'kramdown-man', '~> 0
|
35
|
+
gem 'kramdown-man', '~> 1.0'
|
28
36
|
|
29
37
|
gem 'redcarpet', platform: :mri
|
30
38
|
gem 'yard', '~> 0.9'
|
@@ -35,4 +43,6 @@ group :development do
|
|
35
43
|
gem 'stackprof', require: false, platform: :mri
|
36
44
|
gem 'rubocop', require: false, platform: :mri
|
37
45
|
gem 'rubocop-ronin', require: false, platform: :mri
|
46
|
+
|
47
|
+
gem 'command_kit-completion', '~> 0.2', require: false
|
38
48
|
end
|
data/README.md
CHANGED
@@ -56,7 +56,9 @@ Arguments:
|
|
56
56
|
[ARGS ...] Additional arguments for the command
|
57
57
|
|
58
58
|
Commands:
|
59
|
+
completion
|
59
60
|
help
|
61
|
+
irb
|
60
62
|
lfi
|
61
63
|
open-redirect
|
62
64
|
reflected-xss, xss
|
@@ -273,7 +275,8 @@ end
|
|
273
275
|
|
274
276
|
* [Ruby] >= 3.0.0
|
275
277
|
* [ronin-support] ~> 1.0
|
276
|
-
* [ronin-core] ~> 0.
|
278
|
+
* [ronin-core] ~> 0.2
|
279
|
+
* [ronin-db] ~> 0.2
|
277
280
|
|
278
281
|
## Install
|
279
282
|
|
@@ -298,7 +301,7 @@ gem.add_dependency 'ronin-vulns', '~> 0.1'
|
|
298
301
|
1. [Fork It!](https://github.com/ronin-rb/ronin-vulns/fork)
|
299
302
|
2. Clone It!
|
300
303
|
3. `cd ronin-vulns/`
|
301
|
-
4. `
|
304
|
+
4. `./scripts/setup`
|
302
305
|
5. `git checkout -b my_feature`
|
303
306
|
6. Code It!
|
304
307
|
7. `bundle exec rake spec`
|
@@ -306,7 +309,7 @@ gem.add_dependency 'ronin-vulns', '~> 0.1'
|
|
306
309
|
|
307
310
|
## License
|
308
311
|
|
309
|
-
Copyright (c) 2022-
|
312
|
+
Copyright (c) 2022-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
310
313
|
|
311
314
|
ronin-vulns is free software: you can redistribute it and/or modify
|
312
315
|
it under the terms of the GNU Lesser General Public License as published
|
@@ -326,3 +329,4 @@ along with ronin-vulns. If not, see <https://www.gnu.org/licenses/>.
|
|
326
329
|
|
327
330
|
[ronin-support]: https://github.com/ronin-rb/ronin-support#readme
|
328
331
|
[ronin-core]: https://github.com/ronin-rb/ronin-core#readme
|
332
|
+
[ronin-db]: https://github.com/ronin-rb/ronin-db#readme
|
data/Rakefile
CHANGED
@@ -32,3 +32,12 @@ task :docs => :yard
|
|
32
32
|
|
33
33
|
require 'kramdown/man/task'
|
34
34
|
Kramdown::Man::Task.new
|
35
|
+
|
36
|
+
require 'command_kit/completion/task'
|
37
|
+
CommandKit::Completion::Task.new(
|
38
|
+
class_file: 'ronin/vulns/cli',
|
39
|
+
class_name: 'Ronin::Vulns::CLI',
|
40
|
+
output_file: 'data/completions/ronin-vulns'
|
41
|
+
)
|
42
|
+
|
43
|
+
task :setup => %w[man command_kit:completion]
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# ronin-vulns completion -*- shell-script -*-
|
2
|
+
|
3
|
+
# This bash completions script was generated by
|
4
|
+
# completely (https://github.com/dannyben/completely)
|
5
|
+
# Modifying it manually is not recommended
|
6
|
+
|
7
|
+
_ronin-vulns_completions_filter() {
|
8
|
+
local words="$1"
|
9
|
+
local cur=${COMP_WORDS[COMP_CWORD]}
|
10
|
+
local result=()
|
11
|
+
|
12
|
+
if [[ "${cur:0:1}" == "-" ]]; then
|
13
|
+
echo "$words"
|
14
|
+
|
15
|
+
else
|
16
|
+
for word in $words; do
|
17
|
+
[[ "${word:0:1}" != "-" ]] && result+=("$word")
|
18
|
+
done
|
19
|
+
|
20
|
+
echo "${result[*]}"
|
21
|
+
|
22
|
+
fi
|
23
|
+
}
|
24
|
+
|
25
|
+
_ronin-vulns_completions() {
|
26
|
+
local cur=${COMP_WORDS[COMP_CWORD]}
|
27
|
+
local compwords=("${COMP_WORDS[@]:1:$COMP_CWORD-1}")
|
28
|
+
local compline="${compwords[*]}"
|
29
|
+
|
30
|
+
case "$compline" in
|
31
|
+
'command_injection'*'--input')
|
32
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
33
|
+
;;
|
34
|
+
|
35
|
+
'reflected_xss'*'--input')
|
36
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
37
|
+
;;
|
38
|
+
|
39
|
+
'open_redirect'*'--input')
|
40
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
41
|
+
;;
|
42
|
+
|
43
|
+
'command_injection'*'-i')
|
44
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
45
|
+
;;
|
46
|
+
|
47
|
+
'command_injection'*)
|
48
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --escape-quote -Q --escape-operator -O --terminator -T")" -- "$cur")
|
49
|
+
;;
|
50
|
+
|
51
|
+
'reflected_xss'*'-i')
|
52
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
53
|
+
;;
|
54
|
+
|
55
|
+
'open_redirect'*'-i')
|
56
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
57
|
+
;;
|
58
|
+
|
59
|
+
'reflected_xss'*)
|
60
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i")" -- "$cur")
|
61
|
+
;;
|
62
|
+
|
63
|
+
'open_redirect'*)
|
64
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --test-url -T")" -- "$cur")
|
65
|
+
;;
|
66
|
+
|
67
|
+
'scan'*'--input')
|
68
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
69
|
+
;;
|
70
|
+
|
71
|
+
'sqli'*'--input')
|
72
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
73
|
+
;;
|
74
|
+
|
75
|
+
'ssti'*'--input')
|
76
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
77
|
+
;;
|
78
|
+
|
79
|
+
'lfi'*'--input')
|
80
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
81
|
+
;;
|
82
|
+
|
83
|
+
'rfi'*'--input')
|
84
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
85
|
+
;;
|
86
|
+
|
87
|
+
'completion'*)
|
88
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--print --install --uninstall")" -- "$cur")
|
89
|
+
;;
|
90
|
+
|
91
|
+
'sqli'*'-i')
|
92
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
93
|
+
;;
|
94
|
+
|
95
|
+
'scan'*'-i')
|
96
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
97
|
+
;;
|
98
|
+
|
99
|
+
'ssti'*'-i')
|
100
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
101
|
+
;;
|
102
|
+
|
103
|
+
'rfi'*'-i')
|
104
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
105
|
+
;;
|
106
|
+
|
107
|
+
'lfi'*'-i')
|
108
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
109
|
+
;;
|
110
|
+
|
111
|
+
'scan'*)
|
112
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --lfi-os --lfi-depth --lfi-filter-bypass --rfi-filter-bypass --rfi-script-lang --rfi-test-script-url --sqli-escape-quote --sqli-escape-parens --sqli-terminate --ssti-test-expr --open-redirect-url")" -- "$cur")
|
113
|
+
;;
|
114
|
+
|
115
|
+
'sqli'*)
|
116
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --escape-quote -Q --escape-parens -P --terminate -T")" -- "$cur")
|
117
|
+
;;
|
118
|
+
|
119
|
+
'ssti'*)
|
120
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --test-expr -T")" -- "$cur")
|
121
|
+
;;
|
122
|
+
|
123
|
+
'rfi'*)
|
124
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --filter-bypass -B --script-lang -S --test-script-url -T")" -- "$cur")
|
125
|
+
;;
|
126
|
+
|
127
|
+
'lfi'*)
|
128
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--db --db-uri --db-file --import --first -F --all -A --print-curl --print-http --request-method -M --header -H --user-agent-string -U --user-agent -u --cookie -C --cookie-param -c --referer -R --form-param -F --test-query-param --test-all-query-params --test-header-name --test-cookie-param --test-all-cookie-params --test-form-param --test-all-form-params --input -i --os -O --depth -D --filter-bypass -B")" -- "$cur")
|
129
|
+
;;
|
130
|
+
|
131
|
+
*)
|
132
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-vulns_completions_filter "--version -V help command-injection completion irb lfi open-redirect reflected-xss rfi scan sqli ssti xss cmdi")" -- "$cur")
|
133
|
+
;;
|
134
|
+
|
135
|
+
esac
|
136
|
+
} &&
|
137
|
+
complete -F _ronin-vulns_completions ronin-vulns
|
138
|
+
|
139
|
+
# ex: filetype=sh
|
data/gemspec.yml
CHANGED
@@ -25,17 +25,23 @@ metadata:
|
|
25
25
|
required_ruby_version: ">= 3.0.0"
|
26
26
|
|
27
27
|
generated_files:
|
28
|
+
- data/completions/ronin-vulns
|
29
|
+
- man/ronin-vulns.1
|
30
|
+
- man/ronin-vulns-completion.1
|
31
|
+
- man/ronin-vulns-irb.1
|
28
32
|
- man/ronin-vulns-lfi.1
|
29
33
|
- man/ronin-vulns-rfi.1
|
30
34
|
- man/ronin-vulns-sqli.1
|
31
35
|
- man/ronin-vulns-ssti.1
|
36
|
+
- man/ronin-vulns-command-injection.1
|
32
37
|
- man/ronin-vulns-open-redirect.1
|
33
38
|
- man/ronin-vulns-reflected-xss.1
|
34
39
|
- man/ronin-vulns-scan.1
|
35
40
|
|
36
41
|
dependencies:
|
37
42
|
ronin-support: ~> 1.0, >= 1.0.1
|
38
|
-
ronin-core: ~> 0.
|
43
|
+
ronin-core: ~> 0.2
|
44
|
+
ronin-db: ~> 0.2
|
39
45
|
|
40
46
|
development_dependencies:
|
41
47
|
bundler: ~> 2.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# ronin-vulns - A Ruby library for blind vulnerability testing.
|
4
4
|
#
|
5
|
-
# Copyright (c) 2022-
|
5
|
+
# Copyright (c) 2022-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
6
|
#
|
7
7
|
# ronin-vulns is free software: you can redistribute it and/or modify
|
8
8
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-vulns - A Ruby library for blind vulnerability testing.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2022-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-vulns is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published
|
9
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# ronin-vulns is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with ronin-vulns. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/vulns/cli/web_vuln_command'
|
22
|
+
require 'ronin/vulns/command_injection'
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module Vulns
|
26
|
+
class CLI
|
27
|
+
module Commands
|
28
|
+
#
|
29
|
+
# Scans URL(s) for Command Injection vulnerabilities.
|
30
|
+
#
|
31
|
+
# ## Usage
|
32
|
+
#
|
33
|
+
# ronin-vulns command-injection [options] {URL ... | --input FILE}
|
34
|
+
#
|
35
|
+
# ## Options
|
36
|
+
#
|
37
|
+
# --db NAME The database to connect to (Default: default)
|
38
|
+
# --db-uri URI The database URI to connect to
|
39
|
+
# --db-file PATH The sqlite3 database file to use
|
40
|
+
# --import Imports discovered vulnerabilities into the database
|
41
|
+
# --first Only find the first vulnerability for each URL
|
42
|
+
# -A, --all Find all vulnerabilities for each URL
|
43
|
+
# --print-curl Also prints an example curl command for each vulnerability
|
44
|
+
# --print-http Also prints an example HTTP request for each vulnerability
|
45
|
+
# -M COPY|DELETE|GET|HEAD|LOCK|MKCOL|MOVE|OPTIONS|PATCH|POST|PROPFIND|PROPPATCH|PUT|TRACE|UNLOCK,
|
46
|
+
# --request-method The HTTP request method to use
|
47
|
+
# -H, --header "Name: value" Sets an additional header
|
48
|
+
# -U, --user-agent-string STRING Sets the User-Agent header
|
49
|
+
# -u chrome-linux|chrome-macos|chrome-windows|chrome-iphone|chrome-ipad|chrome-android|firefox-linux|firefox-macos|firefox-windows|firefox-iphone|firefox-ipad|firefox-android|safari-macos|safari-iphone|safari-ipad|edge,
|
50
|
+
# --user-agent Sets the User-Agent to use
|
51
|
+
# -C, --cookie COOKIE Sets the raw Cookie header
|
52
|
+
# -c, --cookie-param NAME=VALUE Sets an additional cookie param
|
53
|
+
# -R, --referer URL Sets the Referer header
|
54
|
+
# -F, --form-param NAME=VALUE Sets an additional form param
|
55
|
+
# --test-query-param NAME Tests the URL query param name
|
56
|
+
# --test-all-query-params Test all URL query param names
|
57
|
+
# --test-header-name NAME Tests the HTTP Header name
|
58
|
+
# --test-cookie-param NAME Tests the HTTP Cookie name
|
59
|
+
# --test-all-cookie-params Test all Cookie param names
|
60
|
+
# --test-form-param NAME Tests the form param name
|
61
|
+
# -i, --input FILE Reads URLs from the list file
|
62
|
+
# -Q, --escape-quote CHAR The string quotation character to use to escape the command
|
63
|
+
# -O, --escape-operator CHAR The command operator character to use to escape the command
|
64
|
+
# -T, --terminator CHAR The command termination character to use
|
65
|
+
# -h, --help Print help information
|
66
|
+
#
|
67
|
+
# ## Arguments
|
68
|
+
#
|
69
|
+
# [URL ...] The URL(s) to scan
|
70
|
+
#
|
71
|
+
# @since 0.2.0
|
72
|
+
#
|
73
|
+
class CommandInjection < WebVulnCommand
|
74
|
+
|
75
|
+
usage '[options] {URL ... | --input FILE}'
|
76
|
+
|
77
|
+
# Regex for matching a single `CHAR` option value.
|
78
|
+
CHAR_REGEX = /./
|
79
|
+
|
80
|
+
option :escape_quote, short: '-Q',
|
81
|
+
value: {
|
82
|
+
type: CHAR_REGEX,
|
83
|
+
usage: 'CHAR'
|
84
|
+
},
|
85
|
+
desc: 'The string quotation character to use to escape the command'
|
86
|
+
|
87
|
+
option :escape_operator, short: '-O',
|
88
|
+
value: {
|
89
|
+
type: CHAR_REGEX,
|
90
|
+
usage: 'CHAR'
|
91
|
+
},
|
92
|
+
desc: 'The command operator character to use to escape the command'
|
93
|
+
|
94
|
+
option :terminator, short: '-T',
|
95
|
+
value: {
|
96
|
+
type: CHAR_REGEX,
|
97
|
+
usage: 'CHAR'
|
98
|
+
},
|
99
|
+
desc: 'The command termination character to use'
|
100
|
+
|
101
|
+
description 'Scans URL(s) for Command Injection vulnerabilities'
|
102
|
+
|
103
|
+
man_page 'ronin-vulns-command-injection.1'
|
104
|
+
|
105
|
+
#
|
106
|
+
# Keyword arguments for `Vulns::CommandInjection.scan` and
|
107
|
+
# `Vulns::CommandInjection.test`.
|
108
|
+
#
|
109
|
+
# @return [Hash{Symbol => Object}]
|
110
|
+
#
|
111
|
+
def scan_kwargs
|
112
|
+
kwargs = super()
|
113
|
+
|
114
|
+
if options[:escape_quote]
|
115
|
+
kwargs[:escape_quote] = options[:escape_quote]
|
116
|
+
end
|
117
|
+
|
118
|
+
if options[:escape_operator]
|
119
|
+
kwargs[:escape_operator] = options[:escape_operator]
|
120
|
+
end
|
121
|
+
|
122
|
+
if options[:terminator]
|
123
|
+
kwargs[:terminator] = options[:terminator]
|
124
|
+
end
|
125
|
+
|
126
|
+
return kwargs
|
127
|
+
end
|
128
|
+
|
129
|
+
#
|
130
|
+
# Scans a URL for Command Injection vulnerabilities.
|
131
|
+
#
|
132
|
+
# @param [String] url
|
133
|
+
# The URL to scan.
|
134
|
+
#
|
135
|
+
# @yield [vuln]
|
136
|
+
# The given block will be passed each discovered Command Injection
|
137
|
+
# vulnerability.
|
138
|
+
#
|
139
|
+
# @yieldparam [Vulns::CommandInjection] vuln
|
140
|
+
# A Command Injection vulnerability discovered on the URL.
|
141
|
+
#
|
142
|
+
def scan_url(url,&block)
|
143
|
+
Vulns::CommandInjection.scan(url,**scan_kwargs,&block)
|
144
|
+
end
|
145
|
+
|
146
|
+
#
|
147
|
+
# Tests a URL for Command Injection vulnerabilities.
|
148
|
+
#
|
149
|
+
# @param [String] url
|
150
|
+
# The URL to test.
|
151
|
+
#
|
152
|
+
# @return [Vulns::CommandInjection, nil]
|
153
|
+
# The first Command Injection vulnerability discovered on the URL.
|
154
|
+
#
|
155
|
+
def test_url(url,&block)
|
156
|
+
Vulns::CommandInjection.test(url,**scan_kwargs)
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-vulns - A Ruby library for blind vulnerability testing.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2022-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-vulns is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published
|
9
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# ronin-vulns is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with ronin-vulns. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/vulns/root'
|
22
|
+
require 'ronin/core/cli/completion_command'
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module Vulns
|
26
|
+
class CLI
|
27
|
+
module Commands
|
28
|
+
#
|
29
|
+
# Manages the shell completion rules for `ronin-vulns`.
|
30
|
+
#
|
31
|
+
# ## Usage
|
32
|
+
#
|
33
|
+
# ronin-vulns completion [options]
|
34
|
+
#
|
35
|
+
# ## Options
|
36
|
+
#
|
37
|
+
# --print Prints the shell completion file
|
38
|
+
# --install Installs the shell completion file
|
39
|
+
# --uninstall Uninstalls the shell completion file
|
40
|
+
# -h, --help Print help information
|
41
|
+
#
|
42
|
+
# ## Examples
|
43
|
+
#
|
44
|
+
# ronin-vulns completion --print
|
45
|
+
# ronin-vulns completion --install
|
46
|
+
# ronin-vulns completion --uninstall
|
47
|
+
#
|
48
|
+
# @since 0.2.0
|
49
|
+
#
|
50
|
+
class Completion < Core::CLI::CompletionCommand
|
51
|
+
|
52
|
+
completion_file File.join(ROOT,'data','completions','ronin-vulns')
|
53
|
+
|
54
|
+
man_dir File.join(ROOT,'man')
|
55
|
+
man_page 'ronin-vulns-completion.1'
|
56
|
+
|
57
|
+
description 'Manages the shell completion rules for ronin-vulns'
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-vulns - A Ruby library for blind vulnerability testing.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2022-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-vulns is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published
|
9
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# ronin-vulns is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with ronin-vulns. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/vulns/cli/command'
|
22
|
+
require 'ronin/vulns/cli/ruby_shell'
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module Vulns
|
26
|
+
class CLI
|
27
|
+
module Commands
|
28
|
+
#
|
29
|
+
# Starts an interactive Ruby shell with `ronin-vulns` loaded.
|
30
|
+
#
|
31
|
+
# ## Usage
|
32
|
+
#
|
33
|
+
# ronin-vulns irb [options]
|
34
|
+
#
|
35
|
+
# ## Options
|
36
|
+
#
|
37
|
+
# -h, --help Print help information
|
38
|
+
#
|
39
|
+
# @since 0.2.0
|
40
|
+
#
|
41
|
+
class Irb < Command
|
42
|
+
|
43
|
+
description "Starts an interactive Ruby shell with ronin-vulns loaded"
|
44
|
+
|
45
|
+
man_page 'ronin-vulns-irb.1'
|
46
|
+
|
47
|
+
#
|
48
|
+
# Runs the `ronin-vulns irb` command.
|
49
|
+
#
|
50
|
+
def run
|
51
|
+
require 'ronin/vulns'
|
52
|
+
CLI::RubyShell.start
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|