ronin-recon 0.1.0.rc1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|