ronin-recon 0.1.0.rc1 → 0.1.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/.ruby-version +1 -1
- data/ChangeLog.md +1 -1
- data/README.md +2 -1
- data/data/completions/ronin-recon +17 -17
- data/data/wordlists/raft-small-directories.txt.gz +0 -0
- data/data/wordlists/subdomains-1000.txt.gz +0 -0
- data/gemspec.yml +6 -6
- data/lib/ronin/recon/builtin/api/crt_sh.rb +111 -0
- data/lib/ronin/recon/builtin/dns/subdomain_enum.rb +1 -0
- data/lib/ronin/recon/builtin/net/port_scan.rb +1 -0
- data/lib/ronin/recon/builtin/net/service_id.rb +1 -1
- data/lib/ronin/recon/builtin/ssl/cert_grab.rb +12 -4
- data/lib/ronin/recon/builtin/web/dir_enum.rb +13 -6
- data/lib/ronin/recon/builtin/web/email_addresses.rb +10 -5
- data/lib/ronin/recon/builtin/web/spider.rb +6 -2
- data/lib/ronin/recon/cli/commands/run.rb +7 -7
- data/lib/ronin/recon/cli/commands/test.rb +4 -1
- data/lib/ronin/recon/cli/printing.rb +19 -18
- data/lib/ronin/recon/config.rb +2 -2
- data/lib/ronin/recon/engine.rb +15 -15
- data/lib/ronin/recon/graph.rb +4 -4
- data/lib/ronin/recon/importer.rb +3 -3
- data/lib/ronin/recon/message/job_completed.rb +2 -2
- data/lib/ronin/recon/message/job_failed.rb +2 -2
- data/lib/ronin/recon/message/job_started.rb +2 -2
- data/lib/ronin/recon/mixins/http.rb +0 -1
- data/lib/ronin/recon/output_formats/dir.rb +2 -2
- data/lib/ronin/recon/output_formats/dot.rb +5 -5
- data/lib/ronin/recon/output_formats/graph_format.rb +2 -2
- data/lib/ronin/recon/output_formats/graphviz_format.rb +3 -3
- data/lib/ronin/recon/scope.rb +7 -3
- data/lib/ronin/recon/value_status.rb +3 -3
- data/lib/ronin/recon/values/domain.rb +4 -0
- data/lib/ronin/recon/values/email_address.rb +1 -1
- data/lib/ronin/recon/values/host.rb +4 -1
- data/lib/ronin/recon/values/ip.rb +1 -1
- data/lib/ronin/recon/values/ip_range.rb +1 -1
- data/lib/ronin/recon/values/open_port.rb +1 -1
- data/lib/ronin/recon/values/url.rb +1 -2
- data/lib/ronin/recon/values/website.rb +38 -10
- data/lib/ronin/recon/values/wildcard.rb +1 -1
- data/lib/ronin/recon/version.rb +1 -1
- data/lib/ronin/recon/worker.rb +3 -3
- data/man/ronin-recon-run.1 +1 -1
- data/man/ronin-recon-run.1.md +1 -1
- metadata +16 -16
- data/lib/ronin/recon/builtin/ssl/cert_sh.rb +0 -77
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb12d7c803f46db1479703050ae863e2c684bcf02c27e56845f57aabadba8295
|
4
|
+
data.tar.gz: 3ecef315a0ef47934ba2b6b7117ad9b2bc9813508f4db64d96e851b09469008b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d4956f0572724eb5db72c774ac20202dfef0d56513d1569a3d309c5329a988a3f085db9c3d58bb23f4f7922a6da87c67f69d43971efff50704e89a2486393e9
|
7
|
+
data.tar.gz: 87eb036e8d7702d7a9bd2645c1bf152b797e990a6bf0a7f566db8c1f787217a9c14b19f9d93940f6f8645745367bba63cf27ee6b9700214d73567a17b324da6f
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-3.
|
1
|
+
ruby-3.3
|
data/ChangeLog.md
CHANGED
data/README.md
CHANGED
@@ -56,6 +56,7 @@ and uses asynchronous I/O to maximize efficiency.
|
|
56
56
|
|
57
57
|
* Does not require API keys to run.
|
58
58
|
* Not just a script that runs a bunch of other recon tools.
|
59
|
+
* Does not use AI.
|
59
60
|
|
60
61
|
## Synopsis
|
61
62
|
|
@@ -86,6 +87,7 @@ List all available recon workers:
|
|
86
87
|
|
87
88
|
```shell
|
88
89
|
$ ronin-recon workers
|
90
|
+
api/crt_sh
|
89
91
|
dns/lookup
|
90
92
|
dns/mailservers
|
91
93
|
dns/nameservers
|
@@ -95,7 +97,6 @@ $ ronin-recon workers
|
|
95
97
|
dns/suffix_enum
|
96
98
|
net/cert_enum
|
97
99
|
net/cert_grab
|
98
|
-
net/cert_sh
|
99
100
|
net/ip_range_enum
|
100
101
|
net/port_scan
|
101
102
|
net/service_id
|
@@ -11,7 +11,7 @@ _ronin-recon_completions_filter() {
|
|
11
11
|
|
12
12
|
if [[ "${cur:0:1}" == "-" ]]; then
|
13
13
|
echo "$words"
|
14
|
-
|
14
|
+
|
15
15
|
else
|
16
16
|
for word in $words; do
|
17
17
|
[[ "${word:0:1}" != "-" ]] && result+=("$word")
|
@@ -29,67 +29,67 @@ _ronin-recon_completions() {
|
|
29
29
|
|
30
30
|
case "$compline" in
|
31
31
|
'run'*'--config-file')
|
32
|
-
while read -r; do COMPREPLY+=(
|
32
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
33
33
|
;;
|
34
34
|
|
35
35
|
'run'*'--worker-file')
|
36
|
-
while read -r; do COMPREPLY+=(
|
36
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
37
37
|
;;
|
38
38
|
|
39
39
|
'worker'*'--file')
|
40
|
-
while read -r; do COMPREPLY+=(
|
40
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
41
41
|
;;
|
42
42
|
|
43
43
|
'run'*'--output')
|
44
|
-
while read -r; do COMPREPLY+=(
|
44
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
45
45
|
;;
|
46
46
|
|
47
47
|
'test'*'--file')
|
48
|
-
while read -r; do COMPREPLY+=(
|
48
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
49
49
|
;;
|
50
50
|
|
51
51
|
'completion'*)
|
52
|
-
while read -r; do COMPREPLY+=(
|
52
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-recon_completions_filter "--print --install --uninstall")" -- "$cur")
|
53
53
|
;;
|
54
54
|
|
55
55
|
'worker'*'-f')
|
56
|
-
while read -r; do COMPREPLY+=(
|
56
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
57
57
|
;;
|
58
58
|
|
59
59
|
'test'*'-f')
|
60
|
-
while read -r; do COMPREPLY+=(
|
60
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
61
61
|
;;
|
62
62
|
|
63
63
|
'run'*'-C')
|
64
|
-
while read -r; do COMPREPLY+=(
|
64
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
65
65
|
;;
|
66
66
|
|
67
67
|
'run'*'-o')
|
68
|
-
while read -r; do COMPREPLY+=(
|
68
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
|
69
69
|
;;
|
70
70
|
|
71
71
|
'worker'*)
|
72
|
-
while read -r; do COMPREPLY+=(
|
72
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-recon_completions_filter "--file -f --verbose -v")" -- "$cur")
|
73
73
|
;;
|
74
74
|
|
75
75
|
'test'*)
|
76
|
-
while read -r; do COMPREPLY+=(
|
76
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-recon_completions_filter "--file -f --debug -D --param -p")" -- "$cur")
|
77
77
|
;;
|
78
78
|
|
79
79
|
'new'*)
|
80
|
-
while read -r; do COMPREPLY+=(
|
80
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-recon_completions_filter "--type -t --author -a --author-email -e --summary -S --description -D --reference -R --accepts -A --outputs -O --intensity -I")" -- "$cur")
|
81
81
|
;;
|
82
82
|
|
83
83
|
'run'*)
|
84
|
-
while read -r; do COMPREPLY+=(
|
84
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-recon_completions_filter "--debug -D --db --db-uri --db-file --config-file -C --worker -w --enable -e --disable -d --worker-file --param -p --concurrency -c --intensity --max-depth --output -o --output-format -F --import --ignore -I")" -- "$cur")
|
85
85
|
;;
|
86
86
|
|
87
87
|
*)
|
88
|
-
while read -r; do COMPREPLY+=(
|
88
|
+
while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-recon_completions_filter "--version -V help completion irb new run test worker workers")" -- "$cur")
|
89
89
|
;;
|
90
90
|
|
91
91
|
esac
|
92
92
|
} &&
|
93
|
-
complete -F _ronin-recon_completions ronin-recon
|
93
|
+
complete -F _ronin-recon_completions ronin-recon
|
94
94
|
|
95
95
|
# ex: filetype=sh
|
Binary file
|
Binary file
|
data/gemspec.yml
CHANGED
@@ -45,13 +45,13 @@ dependencies:
|
|
45
45
|
async-http: ~> 0.60
|
46
46
|
wordlist: ~> 1.0, >= 1.0.3
|
47
47
|
# Ronin dependencies:
|
48
|
-
ronin-support: ~> 1.1
|
49
|
-
ronin-core: ~> 0.2
|
50
|
-
ronin-db: ~> 0.2
|
48
|
+
ronin-support: ~> 1.1
|
49
|
+
ronin-core: ~> 0.2
|
50
|
+
ronin-db: ~> 0.2
|
51
51
|
ronin-repos: ~> 0.1
|
52
|
-
ronin-masscan: ~> 0.1
|
53
|
-
ronin-nmap: ~> 0.1
|
54
|
-
ronin-web-spider: ~> 0.2
|
52
|
+
ronin-masscan: ~> 0.1
|
53
|
+
ronin-nmap: ~> 0.1
|
54
|
+
ronin-web-spider: ~> 0.2
|
55
55
|
|
56
56
|
development_dependencies:
|
57
57
|
bundler: ~> 2.0
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-recon - A micro-framework and tool for performing reconnaissance.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-recon 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-recon 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-recon. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/recon/worker'
|
22
|
+
require 'ronin/support/text/patterns/network'
|
23
|
+
|
24
|
+
require 'async/http/internet/instance'
|
25
|
+
require 'set'
|
26
|
+
|
27
|
+
module Ronin
|
28
|
+
module Recon
|
29
|
+
module API
|
30
|
+
#
|
31
|
+
# A recon worker that queries https://crt.sh and returns host from each
|
32
|
+
# domains certificate
|
33
|
+
#
|
34
|
+
class CrtSh < Worker
|
35
|
+
|
36
|
+
register 'api/crt_sh'
|
37
|
+
|
38
|
+
summary 'Queries https://crt.sh'
|
39
|
+
|
40
|
+
description <<~DESC
|
41
|
+
Queries https://crt.sh and returns the host names from each valid
|
42
|
+
certificate for the domain.
|
43
|
+
DESC
|
44
|
+
|
45
|
+
accepts Domain
|
46
|
+
outputs Host
|
47
|
+
intensity :passive
|
48
|
+
concurrency 1
|
49
|
+
|
50
|
+
# The HTTP client for `https://crt.sh`.
|
51
|
+
#
|
52
|
+
# @return [Async::HTTP::Client]
|
53
|
+
#
|
54
|
+
# @api private
|
55
|
+
attr_reader :client
|
56
|
+
|
57
|
+
#
|
58
|
+
# Initializes the `api/crt_sh` worker.
|
59
|
+
#
|
60
|
+
# @param [Hash{Symbol => Object}] kwargs
|
61
|
+
# Additional keyword arguments.
|
62
|
+
#
|
63
|
+
# @api private
|
64
|
+
#
|
65
|
+
def initialize(**kwargs)
|
66
|
+
super(**kwargs)
|
67
|
+
|
68
|
+
@client = Async::HTTP::Client.new(
|
69
|
+
Async::HTTP::Endpoint.for('https','crt.sh')
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Regular expression to verify valid host names.
|
74
|
+
#
|
75
|
+
# @api private
|
76
|
+
HOST_NAME_REGEX = /\A#{Support::Text::Patterns::HOST_NAME}\z/
|
77
|
+
|
78
|
+
#
|
79
|
+
# Returns host from each domains certificate.
|
80
|
+
#
|
81
|
+
# @param [Values::Domain] domain
|
82
|
+
# The domain value to check.
|
83
|
+
#
|
84
|
+
# @yield [host]
|
85
|
+
# If the domain has certificates, then a host value will be
|
86
|
+
# yielded.
|
87
|
+
#
|
88
|
+
# @yieldparam [Values::Host] host
|
89
|
+
# The host from certificate.
|
90
|
+
#
|
91
|
+
def process(domain)
|
92
|
+
path = "/?dNSName=#{domain}&exclude=expired&output=json"
|
93
|
+
response = @client.get(path)
|
94
|
+
certs = JSON.parse(response.read, symbolize_names: true)
|
95
|
+
hostnames = Set.new
|
96
|
+
|
97
|
+
certs.each do |cert|
|
98
|
+
common_name = cert[:common_name]
|
99
|
+
|
100
|
+
if common_name &&
|
101
|
+
common_name =~ HOST_NAME_REGEX &&
|
102
|
+
hostnames.add?(common_name)
|
103
|
+
yield Host.new(common_name)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -58,14 +58,22 @@ module Ronin
|
|
58
58
|
#
|
59
59
|
def process(open_port)
|
60
60
|
if open_port.ssl?
|
61
|
+
context = OpenSSL::SSL::SSLContext.new
|
62
|
+
|
63
|
+
context.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
64
|
+
|
61
65
|
address = open_port.address
|
62
66
|
port = open_port.number
|
63
|
-
endpoint = Async::IO::Endpoint.ssl(address,port)
|
67
|
+
endpoint = Async::IO::Endpoint.ssl(address,port, ssl_context: context)
|
64
68
|
|
65
|
-
|
66
|
-
|
69
|
+
begin
|
70
|
+
endpoint.connect do |socket|
|
71
|
+
peer_cert = socket.peer_cert
|
67
72
|
|
68
|
-
|
73
|
+
yield Cert.new(peer_cert)
|
74
|
+
end
|
75
|
+
rescue OpenSSL::SSL::SSLError
|
76
|
+
# abort if we cannot successfully establish a SSL/TLS connection
|
69
77
|
end
|
70
78
|
end
|
71
79
|
end
|
@@ -69,6 +69,9 @@ module Ronin
|
|
69
69
|
def process(website)
|
70
70
|
wordlist = Wordlist.open(params[:wordlist] || DEFAULT_WORDLIST)
|
71
71
|
queue = Async::LimitedQueue.new(params[:concurrency])
|
72
|
+
endpoint = Async::HTTP::Endpoint.for(
|
73
|
+
website.scheme, website.host, port: website.port
|
74
|
+
)
|
72
75
|
base_url = website.to_s
|
73
76
|
|
74
77
|
Async do |task|
|
@@ -83,19 +86,23 @@ module Ronin
|
|
83
86
|
# spawn the sub-tasks
|
84
87
|
params[:concurrency].times do
|
85
88
|
task.async do
|
86
|
-
http = Async::HTTP::
|
89
|
+
http = Async::HTTP::Client.new(endpoint)
|
87
90
|
|
88
91
|
while (dir = queue.dequeue)
|
89
92
|
path = "/#{URI.encode_uri_component(dir)}"
|
90
|
-
url = "#{base_url}#{path}"
|
91
93
|
retries = 0
|
92
94
|
|
93
95
|
begin
|
94
|
-
response = http.head(
|
96
|
+
response = http.head(path)
|
97
|
+
status = response.status
|
95
98
|
|
96
|
-
if VALID_STATUS_CODES.include?(
|
97
|
-
|
98
|
-
|
99
|
+
if VALID_STATUS_CODES.include?(status)
|
100
|
+
headers = response.headers.to_h
|
101
|
+
|
102
|
+
yield URL.new(
|
103
|
+
"#{base_url}#{path}", status: status,
|
104
|
+
headers: headers
|
105
|
+
)
|
99
106
|
end
|
100
107
|
rescue Errno::ECONNREFUSED,
|
101
108
|
SocketError
|
@@ -55,12 +55,17 @@ module Ronin
|
|
55
55
|
# Email address found on the page.
|
56
56
|
#
|
57
57
|
def process(url)
|
58
|
-
|
58
|
+
if (body = url.body)
|
59
|
+
if body.encoding == Encoding::ASCII_8BIT
|
60
|
+
# forcibly convert and scrub binary data into UTF-8 data
|
61
|
+
body = body.dup
|
62
|
+
body.force_encoding(Encoding::UTF_8)
|
63
|
+
body.scrub!
|
64
|
+
end
|
59
65
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
yield EmailAddress.new(email)
|
66
|
+
body.scan(Support::Text::Patterns::EMAIL_ADDRESS) do |email|
|
67
|
+
yield EmailAddress.new(email)
|
68
|
+
end
|
64
69
|
end
|
65
70
|
end
|
66
71
|
|
@@ -32,10 +32,14 @@ module Ronin
|
|
32
32
|
|
33
33
|
register 'web/spider'
|
34
34
|
|
35
|
-
summary 'Spiders a website'
|
35
|
+
summary 'Spiders a website and finds every URL'
|
36
36
|
|
37
37
|
description <<~DESC
|
38
|
-
Spiders a website and
|
38
|
+
Spiders a website and finds every URL.
|
39
|
+
|
40
|
+
* Visits every `a`, `iframe`, `frame`, `link`, and `script` URL.
|
41
|
+
* Extracts paths from JavaScript.
|
42
|
+
* Extracts URLs from JavaScript.
|
39
43
|
DESC
|
40
44
|
|
41
45
|
accepts Website
|
@@ -50,7 +50,7 @@ module Ronin
|
|
50
50
|
# --worker-file FILE Loads a worker from a file
|
51
51
|
# -p, --param WORKER.NAME=VALUE Sets a param for a worker
|
52
52
|
# -c, --concurrency WORKER=NUM Sets the concurrency of a worker
|
53
|
-
# --max-depth NUM The maximum recon depth (Default:
|
53
|
+
# --max-depth NUM The maximum recon depth (Default: 10)
|
54
54
|
# -o, --output FILE The output file to write results to
|
55
55
|
# -I, --ignore VALUE The values to ignore in result
|
56
56
|
# -F txt|list|csv|json|ndjson|dot|svg|png|pdf,
|
@@ -144,7 +144,7 @@ module Ronin
|
|
144
144
|
option :max_depth, value: {
|
145
145
|
type: Integer,
|
146
146
|
usage: 'NUM',
|
147
|
-
default:
|
147
|
+
default: 10
|
148
148
|
},
|
149
149
|
desc: 'The maximum recon depth'
|
150
150
|
|
@@ -226,7 +226,7 @@ module Ronin
|
|
226
226
|
|
227
227
|
# The values that are out of scope.
|
228
228
|
#
|
229
|
-
# @return [Array<
|
229
|
+
# @return [Array<Value>]
|
230
230
|
attr_reader :ignore
|
231
231
|
|
232
232
|
#
|
@@ -318,7 +318,7 @@ module Ronin
|
|
318
318
|
# @param [String] value
|
319
319
|
# The value to parse.
|
320
320
|
#
|
321
|
-
# @return [
|
321
|
+
# @return [Value]
|
322
322
|
# The parsed value.
|
323
323
|
#
|
324
324
|
def parse_value(value)
|
@@ -393,7 +393,7 @@ module Ronin
|
|
393
393
|
#
|
394
394
|
# Imports a discovered value into ronin-db.
|
395
395
|
#
|
396
|
-
# @param [
|
396
|
+
# @param [Value] value
|
397
397
|
# A discovered recon value to import.
|
398
398
|
#
|
399
399
|
def import_value(value)
|
@@ -403,10 +403,10 @@ module Ronin
|
|
403
403
|
#
|
404
404
|
# Imports a connection between two values into ronin-db.
|
405
405
|
#
|
406
|
-
# @param [
|
406
|
+
# @param [Value] value
|
407
407
|
# A discovered recon value to import.
|
408
408
|
#
|
409
|
-
# @param [
|
409
|
+
# @param [Value] parent
|
410
410
|
# The parent value of the discovered recon value.
|
411
411
|
#
|
412
412
|
def import_connection(value,parent)
|
@@ -54,7 +54,7 @@ module Ronin
|
|
54
54
|
include Core::CLI::Logging
|
55
55
|
include Core::CLI::Options::Param
|
56
56
|
|
57
|
-
usage '[options] {IP | IP-range | DOMAIN | HOST | WILDCARD | WEBSITE}'
|
57
|
+
usage '[options] {--file FILE | NAME} {IP | IP-range | DOMAIN | HOST | WILDCARD | WEBSITE}'
|
58
58
|
|
59
59
|
argument :value, required: true,
|
60
60
|
usage: 'IP|IP-range|DOMAIN|HOST|WILDCARD|WEBSITE',
|
@@ -70,6 +70,9 @@ module Ronin
|
|
70
70
|
# @param [String, nil] name
|
71
71
|
# The optional worker name to load and print metadata for.
|
72
72
|
#
|
73
|
+
# @param [String] value
|
74
|
+
# The input value for the worker.
|
75
|
+
#
|
73
76
|
def run(name=nil,value)
|
74
77
|
super(name)
|
75
78
|
|
@@ -33,17 +33,17 @@ module Ronin
|
|
33
33
|
# Mapping of {Value} classes to printable names.
|
34
34
|
VALUE_CLASS_NAMES = {
|
35
35
|
Values::Domain => 'domain',
|
36
|
+
Values::Mailserver => 'mailserver',
|
37
|
+
Values::Nameserver => 'nameserver',
|
38
|
+
Values::Wildcard => 'wildcard host name',
|
36
39
|
Values::Host => 'host',
|
37
40
|
Values::IP => 'IP address',
|
38
41
|
Values::IPRange => 'IP range',
|
39
|
-
Values::Mailserver => 'mailserver',
|
40
|
-
Values::Nameserver => 'nameserver',
|
41
42
|
Values::OpenPort => 'open port',
|
42
43
|
Values::Cert => 'SSL/TLS certificate',
|
43
|
-
Values::EmailAddress => 'email addresse',
|
44
|
-
Values::URL => 'URL',
|
45
44
|
Values::Website => 'website',
|
46
|
-
Values::
|
45
|
+
Values::URL => 'URL',
|
46
|
+
Values::EmailAddress => 'email addresse'
|
47
47
|
}
|
48
48
|
|
49
49
|
#
|
@@ -66,7 +66,7 @@ module Ronin
|
|
66
66
|
#
|
67
67
|
# Formats a value object into a human readable string.
|
68
68
|
#
|
69
|
-
# @param [
|
69
|
+
# @param [Value] value
|
70
70
|
# The value object to format.
|
71
71
|
#
|
72
72
|
# @return [String]
|
@@ -77,17 +77,18 @@ module Ronin
|
|
77
77
|
#
|
78
78
|
def format_value(value)
|
79
79
|
case value
|
80
|
-
when Values::Domain
|
81
|
-
when Values::Mailserver
|
82
|
-
when Values::Nameserver
|
83
|
-
when Values::
|
84
|
-
when Values::
|
85
|
-
when Values::
|
86
|
-
when Values::
|
87
|
-
when Values::
|
88
|
-
when Values::
|
89
|
-
when Values::Website
|
90
|
-
when Values::
|
80
|
+
when Values::Domain then "domain #{value}"
|
81
|
+
when Values::Mailserver then "mailserver #{value}"
|
82
|
+
when Values::Nameserver then "nameserver #{value}"
|
83
|
+
when Values::Wildcard then "wildcard host name #{value}"
|
84
|
+
when Values::Host then "host #{value}"
|
85
|
+
when Values::IP then "IP address #{value}"
|
86
|
+
when Values::IPRange then "IP range #{value}"
|
87
|
+
when Values::OpenPort then "open #{value.protocol.upcase} port #{value}"
|
88
|
+
when Values::Cert then "SSL/TLS certificate #{value.subject}"
|
89
|
+
when Values::Website then "website #{value}"
|
90
|
+
when Values::URL then "URL #{value}"
|
91
|
+
when Values::EmailAddress then "email address #{value}"
|
91
92
|
else
|
92
93
|
raise(NotImplementedError,"value class #{value.class} not supported")
|
93
94
|
end
|
@@ -96,7 +97,7 @@ module Ronin
|
|
96
97
|
#
|
97
98
|
# Prints a newly discovered value.
|
98
99
|
#
|
99
|
-
# @param [
|
100
|
+
# @param [Value] value
|
100
101
|
# The value to print.
|
101
102
|
#
|
102
103
|
# @param [Value, nil] parent
|
data/lib/ronin/recon/config.rb
CHANGED
@@ -72,6 +72,8 @@ module Ronin
|
|
72
72
|
|
73
73
|
# The default workers configuration.
|
74
74
|
DEFAULT = Set[
|
75
|
+
# NOTE: disabled due to rate limiting issues
|
76
|
+
# 'api/crt_sh',
|
75
77
|
'dns/lookup',
|
76
78
|
'dns/mailservers',
|
77
79
|
'dns/nameservers',
|
@@ -84,8 +86,6 @@ module Ronin
|
|
84
86
|
'net/service_id',
|
85
87
|
'ssl/cert_grab',
|
86
88
|
'ssl/cert_enum',
|
87
|
-
# NOTE: disabled due to rate limiting issues
|
88
|
-
# 'ssl/cert_sh',
|
89
89
|
'web/dir_enum',
|
90
90
|
'web/email_addresses',
|
91
91
|
'web/spider'
|