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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/ChangeLog.md +1 -1
  4. data/README.md +2 -1
  5. data/data/completions/ronin-recon +17 -17
  6. data/data/wordlists/raft-small-directories.txt.gz +0 -0
  7. data/data/wordlists/subdomains-1000.txt.gz +0 -0
  8. data/gemspec.yml +6 -6
  9. data/lib/ronin/recon/builtin/api/crt_sh.rb +111 -0
  10. data/lib/ronin/recon/builtin/dns/subdomain_enum.rb +1 -0
  11. data/lib/ronin/recon/builtin/net/port_scan.rb +1 -0
  12. data/lib/ronin/recon/builtin/net/service_id.rb +1 -1
  13. data/lib/ronin/recon/builtin/ssl/cert_grab.rb +12 -4
  14. data/lib/ronin/recon/builtin/web/dir_enum.rb +13 -6
  15. data/lib/ronin/recon/builtin/web/email_addresses.rb +10 -5
  16. data/lib/ronin/recon/builtin/web/spider.rb +6 -2
  17. data/lib/ronin/recon/cli/commands/run.rb +7 -7
  18. data/lib/ronin/recon/cli/commands/test.rb +4 -1
  19. data/lib/ronin/recon/cli/printing.rb +19 -18
  20. data/lib/ronin/recon/config.rb +2 -2
  21. data/lib/ronin/recon/engine.rb +15 -15
  22. data/lib/ronin/recon/graph.rb +4 -4
  23. data/lib/ronin/recon/importer.rb +3 -3
  24. data/lib/ronin/recon/message/job_completed.rb +2 -2
  25. data/lib/ronin/recon/message/job_failed.rb +2 -2
  26. data/lib/ronin/recon/message/job_started.rb +2 -2
  27. data/lib/ronin/recon/mixins/http.rb +0 -1
  28. data/lib/ronin/recon/output_formats/dir.rb +2 -2
  29. data/lib/ronin/recon/output_formats/dot.rb +5 -5
  30. data/lib/ronin/recon/output_formats/graph_format.rb +2 -2
  31. data/lib/ronin/recon/output_formats/graphviz_format.rb +3 -3
  32. data/lib/ronin/recon/scope.rb +7 -3
  33. data/lib/ronin/recon/value_status.rb +3 -3
  34. data/lib/ronin/recon/values/domain.rb +4 -0
  35. data/lib/ronin/recon/values/email_address.rb +1 -1
  36. data/lib/ronin/recon/values/host.rb +4 -1
  37. data/lib/ronin/recon/values/ip.rb +1 -1
  38. data/lib/ronin/recon/values/ip_range.rb +1 -1
  39. data/lib/ronin/recon/values/open_port.rb +1 -1
  40. data/lib/ronin/recon/values/url.rb +1 -2
  41. data/lib/ronin/recon/values/website.rb +38 -10
  42. data/lib/ronin/recon/values/wildcard.rb +1 -1
  43. data/lib/ronin/recon/version.rb +1 -1
  44. data/lib/ronin/recon/worker.rb +3 -3
  45. data/man/ronin-recon-run.1 +1 -1
  46. data/man/ronin-recon-run.1.md +1 -1
  47. metadata +16 -16
  48. 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: 1a9c5f1341f2119335b680ceb29bed06bafa19a74664bacf71d4385ec2b517cb
4
- data.tar.gz: b0ba0ddde38138cb220ba5dc8b6a31005811622086b37ed51a1de5a3f80cc717
3
+ metadata.gz: fb12d7c803f46db1479703050ae863e2c684bcf02c27e56845f57aabadba8295
4
+ data.tar.gz: 3ecef315a0ef47934ba2b6b7117ad9b2bc9813508f4db64d96e851b09469008b
5
5
  SHA512:
6
- metadata.gz: 9d6dac836e0943da2c2dc1478ce4bc557328811c4a9c4edb035462aaae0cfe3827f8b40acb7863a0ea61060c7f110a934e3f58ed5658decc776595064be664ba
7
- data.tar.gz: 13e2d6e10d7c38e70af52a616cc64f07b794d29535d80195d25e33c2e7f04430ef35964c557bcbfc65ac29177fde916141dc9f25fab261535ea590fc38498cd3
6
+ metadata.gz: 8d4956f0572724eb5db72c774ac20202dfef0d56513d1569a3d309c5329a988a3f085db9c3d58bb23f4f7922a6da87c67f69d43971efff50704e89a2486393e9
7
+ data.tar.gz: 87eb036e8d7702d7a9bd2645c1bf152b797e990a6bf0a7f566db8c1f787217a9c14b19f9d93940f6f8645745367bba63cf27ee6b9700214d73567a17b324da6f
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1
1
+ ruby-3.3
data/ChangeLog.md CHANGED
@@ -1,4 +1,4 @@
1
- ### 0.1.0 / 2024-XX-XX
1
+ ### 0.1.0 / 2024-07-22
2
2
 
3
3
  * Initial release:
4
4
  * Uses asynchronous I/O and fibers.
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -W "$(_ronin-recon_completions_filter "--print --install --uninstall")" -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -W "$(_ronin-recon_completions_filter "--file -f --verbose -v")" -- "$cur" )
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+=( "$REPLY" ); done < <( compgen -W "$(_ronin-recon_completions_filter "--file -f --debug -D --param -p")" -- "$cur" )
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+=( "$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" )
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+=( "$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" )
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+=( "$REPLY" ); done < <( compgen -W "$(_ronin-recon_completions_filter "--version -V help completion irb new run test worker workers")" -- "$cur" )
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
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.0.rc1
49
- ronin-core: ~> 0.2.0.rc1
50
- ronin-db: ~> 0.2.0.rc1
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.0.rc1
53
- ronin-nmap: ~> 0.1.0.rc1
54
- ronin-web-spider: ~> 0.2.0.rc1
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
@@ -33,6 +33,7 @@ module Ronin
33
33
  #
34
34
  class SubdomainEnum < DNSWorker
35
35
 
36
+ # The path to the default common subdomains wordlist.
36
37
  DEFAULT_WORDLIST = File.join(WORDLISTS_DIR, 'subdomains-1000.txt.gz')
37
38
 
38
39
  register 'dns/subdomain_enum'
@@ -41,6 +41,7 @@ module Ronin
41
41
 
42
42
  accepts IP
43
43
  outputs OpenPort
44
+ concurrency 1 # prevents overloading the network interface
44
45
 
45
46
  param :ports, String, desc: 'Optional port list to scan'
46
47
 
@@ -64,7 +64,7 @@ module Ronin
64
64
  else
65
65
  yield Website.http(open_port.host,open_port.number)
66
66
  end
67
- when 'https'
67
+ when 'https', 'https-alt'
68
68
  yield Website.https(open_port.host,open_port.number)
69
69
  end
70
70
  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
- endpoint.connect do |socket|
66
- peer_cert = socket.peer_cert
69
+ begin
70
+ endpoint.connect do |socket|
71
+ peer_cert = socket.peer_cert
67
72
 
68
- yield Cert.new(peer_cert)
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::Internet.instance
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(url)
96
+ response = http.head(path)
97
+ status = response.status
95
98
 
96
- if VALID_STATUS_CODES.include?(response.status)
97
- yield URL.new(url, status: response.status,
98
- headers: response.headers)
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
- return nil unless url.body
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
- email_pattern = Ronin::Support::Text::Patterns::EMAIL_ADDRESS
61
-
62
- url.body.force_encoding(Encoding::UTF_8).scan(email_pattern) do |email|
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 returns every URL.
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: 3)
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: 3
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<Values::Value>]
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 [Values::Value]
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 [Values::Value] value
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 [Values::Value] value
406
+ # @param [Value] value
407
407
  # A discovered recon value to import.
408
408
  #
409
- # @param [Values::Value] parent
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::Wildcard => 'wildcard host name'
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 [Values::Value] value
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 then "domain #{value}"
81
- when Values::Mailserver then "mailserver #{value}"
82
- when Values::Nameserver then "nameserver #{value}"
83
- when Values::Host then "host #{value}"
84
- when Values::IP then "IP address #{value}"
85
- when Values::IPRange then "IP range #{value}"
86
- when Values::OpenPort then "open #{value.protocol.upcase} port #{value}"
87
- when Values::Cert then "SSL/TLS certificate #{value.subject}"
88
- when Values::URL then "URL #{value}"
89
- when Values::Website then "website #{value}"
90
- when Values::Wildcard then "wildcard host name #{value}"
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 [Values::Value] value
100
+ # @param [Value] value
100
101
  # The value to print.
101
102
  #
102
103
  # @param [Value, nil] parent
@@ -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'