ronin 2.0.0 → 2.0.1
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/.github/workflows/ruby.yml +14 -0
- data/.rubocop.yml +21 -0
- data/ChangeLog.md +18 -2
- data/Gemfile +6 -2
- data/Rakefile +2 -2
- data/bin/ronin +6 -7
- data/data/new/project/Gemfile.erb +9 -9
- data/gemspec.yml +7 -7
- data/lib/ronin/cli/char_set_options.rb +1 -1
- data/lib/ronin/cli/cipher_command.rb +3 -1
- data/lib/ronin/cli/command.rb +3 -0
- data/lib/ronin/cli/commands/asn.rb +1 -1
- data/lib/ronin/cli/commands/banner_grab.rb +5 -3
- data/lib/ronin/cli/commands/cert_dump.rb +4 -7
- data/lib/ronin/cli/commands/cert_gen.rb +4 -4
- data/lib/ronin/cli/commands/cert_grab.rb +5 -6
- data/lib/ronin/cli/commands/decode.rb +14 -14
- data/lib/ronin/cli/commands/encode.rb +14 -14
- data/lib/ronin/cli/commands/extract.rb +1 -1
- data/lib/ronin/cli/commands/grep.rb +7 -5
- data/lib/ronin/cli/commands/hexdump.rb +53 -22
- data/lib/ronin/cli/commands/hmac.rb +1 -1
- data/lib/ronin/cli/commands/host.rb +2 -2
- data/lib/ronin/cli/commands/http.rb +42 -25
- data/lib/ronin/cli/commands/ip.rb +2 -2
- data/lib/ronin/cli/commands/iprange.rb +2 -2
- data/lib/ronin/cli/commands/netcat.rb +32 -38
- data/lib/ronin/cli/commands/new/project.rb +19 -19
- data/lib/ronin/cli/commands/new/script.rb +12 -12
- data/lib/ronin/cli/commands/proxy.rb +10 -10
- data/lib/ronin/cli/commands/rot.rb +11 -10
- data/lib/ronin/cli/commands/strings.rb +1 -1
- data/lib/ronin/cli/commands/unhexdump.rb +1 -1
- data/lib/ronin/cli/dns.rb +3 -0
- data/lib/ronin/cli/file_processor_command.rb +3 -0
- data/lib/ronin/cli/host_and_port.rb +58 -0
- data/lib/ronin/cli/http_shell.rb +19 -16
- data/lib/ronin/cli/key_options.rb +3 -5
- data/lib/ronin/cli/method_options.rb +0 -2
- data/lib/ronin/cli/pattern_options.rb +5 -6
- data/lib/ronin/cli/printing/syntax_highlighting.rb +3 -0
- data/lib/ronin/cli/typo_options.rb +1 -1
- data/lib/ronin/cli/value_processor_command.rb +1 -1
- data/lib/ronin/config.rb +3 -3
- data/lib/ronin/version.rb +2 -2
- data/man/ronin-asn.1 +11 -1
- data/man/ronin-asn.1.md +9 -1
- data/man/ronin-banner-grab.1 +1 -1
- data/man/ronin-banner-grab.1.md +1 -1
- data/man/ronin-bitflip.1 +1 -1
- data/man/ronin-bitflip.1.md +1 -1
- data/man/ronin-cert-dump.1 +1 -1
- data/man/ronin-cert-dump.1.md +1 -1
- data/man/ronin-cert-gen.1 +1 -1
- data/man/ronin-cert-gen.1.md +1 -1
- data/man/ronin-cert-grab.1 +1 -1
- data/man/ronin-cert-grab.1.md +1 -1
- data/man/ronin-decode.1 +1 -1
- data/man/ronin-decode.1.md +1 -1
- data/man/ronin-decrypt.1 +1 -1
- data/man/ronin-decrypt.1.md +1 -1
- data/man/ronin-dns.1 +1 -1
- data/man/ronin-dns.1.md +1 -1
- data/man/ronin-email-addr.1 +1 -1
- data/man/ronin-email-addr.1.md +1 -1
- data/man/ronin-encode.1 +1 -1
- data/man/ronin-encode.1.md +1 -1
- data/man/ronin-encrypt.1 +1 -1
- data/man/ronin-encrypt.1.md +1 -1
- data/man/ronin-entropy.1 +1 -1
- data/man/ronin-entropy.1.md +1 -1
- data/man/ronin-escape.1 +1 -1
- data/man/ronin-escape.1.md +1 -1
- data/man/ronin-extract.1 +1 -1
- data/man/ronin-extract.1.md +1 -1
- data/man/ronin-grep.1 +1 -1
- data/man/ronin-grep.1.md +1 -1
- data/man/ronin-help.1 +1 -1
- data/man/ronin-help.1.md +1 -1
- data/man/ronin-hexdump.1 +2 -2
- data/man/ronin-hexdump.1.md +2 -2
- data/man/ronin-highlight.1 +1 -1
- data/man/ronin-highlight.1.md +1 -1
- data/man/ronin-hmac.1 +1 -1
- data/man/ronin-hmac.1.md +1 -1
- data/man/ronin-homoglyph.1 +1 -1
- data/man/ronin-homoglyph.1.md +1 -1
- data/man/ronin-host.1 +2 -2
- data/man/ronin-host.1.md +2 -2
- data/man/ronin-http.1 +1 -1
- data/man/ronin-http.1.md +1 -1
- data/man/ronin-ip.1 +1 -1
- data/man/ronin-ip.1.md +1 -1
- data/man/ronin-iprange.1 +1 -1
- data/man/ronin-iprange.1.md +1 -1
- data/man/ronin-irb.1 +1 -1
- data/man/ronin-irb.1.md +1 -1
- data/man/ronin-md5.1 +1 -1
- data/man/ronin-md5.1.md +1 -1
- data/man/ronin-netcat.1 +1 -1
- data/man/ronin-netcat.1.md +1 -1
- data/man/ronin-new-project.1 +1 -1
- data/man/ronin-new-project.1.md +1 -1
- data/man/ronin-new-script.1 +1 -1
- data/man/ronin-new-script.1.md +1 -1
- data/man/ronin-new.1 +1 -1
- data/man/ronin-new.1.md +1 -1
- data/man/ronin-proxy.1 +1 -1
- data/man/ronin-proxy.1.md +1 -1
- data/man/ronin-public-suffix-list.1 +11 -1
- data/man/ronin-public-suffix-list.1.md +9 -1
- data/man/ronin-quote.1 +1 -1
- data/man/ronin-quote.1.md +1 -1
- data/man/ronin-rot.1 +4 -3
- data/man/ronin-rot.1.md +4 -3
- data/man/ronin-sha1.1 +1 -1
- data/man/ronin-sha1.1.md +1 -1
- data/man/ronin-sha256.1 +1 -1
- data/man/ronin-sha256.1.md +1 -1
- data/man/ronin-sha512.1 +1 -1
- data/man/ronin-sha512.1.md +1 -1
- data/man/ronin-strings.1 +1 -1
- data/man/ronin-strings.1.md +1 -1
- data/man/ronin-tips.1 +1 -1
- data/man/ronin-tips.1.md +1 -1
- data/man/ronin-tld-list.1 +11 -1
- data/man/ronin-tld-list.1.md +9 -1
- data/man/ronin-typo.1 +1 -1
- data/man/ronin-typo.1.md +1 -1
- data/man/ronin-typosquat.1 +1 -1
- data/man/ronin-typosquat.1.md +1 -1
- data/man/ronin-unescape.1 +1 -1
- data/man/ronin-unescape.1.md +1 -1
- data/man/ronin-unhexdump.1 +1 -1
- data/man/ronin-unhexdump.1.md +1 -1
- data/man/ronin-unquote.1 +1 -1
- data/man/ronin-unquote.1.md +1 -1
- data/man/ronin-url.1 +1 -1
- data/man/ronin-url.1.md +1 -1
- data/man/ronin-xor.1 +1 -1
- data/man/ronin-xor.1.md +1 -1
- data/man/ronin.1 +1 -1
- data/man/ronin.1.md +1 -1
- data/ronin.gemspec +4 -3
- metadata +40 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 42aeafda3468e4c0f5427a4f2323d40b96bb4aaafc042bb8380d569f5c8c5414
|
|
4
|
+
data.tar.gz: a150c7211fa93770dc9be47343f8f3d3391396996885263580c0185742476255
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 562df97d739aedfad72706c939d40697f8ab39136a3aab69e2d67e7aa29b3ea03bf1534695f259af8060c5e09f26e6e6c51ff62c57fa8d1ad73242c0c48e9c78
|
|
7
|
+
data.tar.gz: '018c73e255ed3b3468d84c054d8b79095cef777443536beac09e572d1bf183ce0d3a019a8e45560013c13a0b8df202a7402d1c4d4cd41ff884a0179f932e51bb'
|
data/.github/workflows/ruby.yml
CHANGED
|
@@ -30,3 +30,17 @@ jobs:
|
|
|
30
30
|
run: bundle install --jobs 4 --retry 3
|
|
31
31
|
- name: Run tests
|
|
32
32
|
run: bundle exec rake test
|
|
33
|
+
|
|
34
|
+
# rubocop linting
|
|
35
|
+
rubocop:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v2
|
|
39
|
+
- name: Set up Ruby
|
|
40
|
+
uses: ruby/setup-ruby@v1
|
|
41
|
+
with:
|
|
42
|
+
ruby-version: 3.0
|
|
43
|
+
- name: Install dependencies
|
|
44
|
+
run: bundle install --jobs 4 --retry 3
|
|
45
|
+
- name: Run rubocop
|
|
46
|
+
run: bundle exec rubocop --parallel
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
NewCops: enable
|
|
3
|
+
SuggestExtensions: false
|
|
4
|
+
TargetRubyVersion: 3.1
|
|
5
|
+
|
|
6
|
+
inherit_gem:
|
|
7
|
+
rubocop-ronin: rubocop.yml
|
|
8
|
+
|
|
9
|
+
#
|
|
10
|
+
# ronin specific exceptions
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
# this rule does not take into account the spacing of commented out lines
|
|
14
|
+
Layout/ExtraSpacing:
|
|
15
|
+
Exclude:
|
|
16
|
+
- 'Gemfile'
|
|
17
|
+
|
|
18
|
+
# no need to add `frozen_string_literal: true` to new scripts/projects
|
|
19
|
+
Style/FrozenStringLiteralComment:
|
|
20
|
+
Exclude:
|
|
21
|
+
- 'data/new/**/*'
|
data/ChangeLog.md
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
### 2.0.
|
|
1
|
+
### 2.0.1 / 2023-03-01
|
|
2
|
+
|
|
3
|
+
* Require [ronin-support] ~> 1.0, >= 1.0.1.
|
|
4
|
+
* Require [ronin-core] ~> 0.1, >= 0.1.1.
|
|
5
|
+
* Require [ronin-web] ~> 1.0, >= 1.0.1.
|
|
6
|
+
* Require [ronin-payloads] ~> 0.1, >= 0.1.1.
|
|
7
|
+
* Require [ronin-vulns] ~> 0.1, >= 0.1.2.
|
|
8
|
+
* Require [ronin-exploits] ~> 1.0, >= 1.0.1.
|
|
9
|
+
* Added {Ronin::CLI::HostAndPort} for common `host:port` parsing logic.
|
|
10
|
+
* Minor bug fixes.
|
|
11
|
+
* Improved documentation.
|
|
12
|
+
|
|
13
|
+
#### CLI
|
|
14
|
+
|
|
15
|
+
* Ensure that the `ronin http` command works with IDN host-names.
|
|
16
|
+
|
|
17
|
+
### 2.0.0 / 2023-02-01
|
|
2
18
|
|
|
3
19
|
* Require `ruby` >= 3.0.0.
|
|
4
20
|
* Require [rouge] ~> 3.0
|
|
@@ -756,7 +772,7 @@
|
|
|
756
772
|
* Require Spidr >= 0.1.3.
|
|
757
773
|
* Moved Ronin::Parameters into the parameters 0.1.0 RubyGem.
|
|
758
774
|
* Added a Ronin::Hexdump module:
|
|
759
|
-
* Provides Ronin::Hexdump.dump and Kernel#hexdump, which can hexdump any
|
|
775
|
+
* Provides Ronin::Hexdump.dump and Kernel#hexdump, which can hexdump any
|
|
760
776
|
object that supports the #each_byte method.
|
|
761
777
|
* Refactored Ronin::Chars::CharSet:
|
|
762
778
|
* Now inherites the SortedSet class.
|
data/Gemfile
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source 'https://rubygems.org'
|
|
2
4
|
|
|
3
5
|
gemspec
|
|
@@ -45,9 +47,9 @@ end
|
|
|
45
47
|
# branch: 'main'
|
|
46
48
|
# gem 'ronin-vulns', '~> 0.1', github: "ronin-rb/ronin-vulns",
|
|
47
49
|
# branch: 'main'
|
|
48
|
-
# gem 'ronin-web-server',
|
|
50
|
+
# gem 'ronin-web-server', '~> 0.1', github: "ronin-rb/ronin-web-server",
|
|
49
51
|
# branch: 'main'
|
|
50
|
-
# gem 'ronin-web-spider',
|
|
52
|
+
# gem 'ronin-web-spider', '~> 0.1', github: "ronin-rb/ronin-web-spider",
|
|
51
53
|
# branch: 'main'
|
|
52
54
|
# gem 'ronin-web-user_agents', '~> 0.1', github: "ronin-rb/ronin-web-user_agents",
|
|
53
55
|
# branch: 'main'
|
|
@@ -70,4 +72,6 @@ group :development do
|
|
|
70
72
|
gem 'dead_end', require: false
|
|
71
73
|
gem 'sord', require: false, platform: :mri
|
|
72
74
|
gem 'stackprof', require: false, platform: :mri
|
|
75
|
+
gem 'rubocop', require: false, platform: :mri
|
|
76
|
+
gem 'rubocop-ronin', require: false, platform: :mri
|
|
73
77
|
end
|
data/Rakefile
CHANGED
data/bin/ronin
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
require 'rubygems'
|
|
4
5
|
|
|
5
6
|
root = File.expand_path(File.join(File.dirname(__FILE__),'..'))
|
|
6
7
|
if File.file?(File.join(root,'Gemfile.lock'))
|
|
7
8
|
Dir.chdir(root) do
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
exit -1
|
|
14
|
-
end
|
|
9
|
+
require 'bundler/setup'
|
|
10
|
+
rescue LoadError => e
|
|
11
|
+
warn e.message
|
|
12
|
+
warn "Run `gem install bundler` to install Bundler"
|
|
13
|
+
exit(-1)
|
|
15
14
|
end
|
|
16
15
|
end
|
|
17
16
|
|
|
@@ -4,13 +4,13 @@ source 'https://rubygems.org'
|
|
|
4
4
|
gem 'rake'
|
|
5
5
|
|
|
6
6
|
<%- end -%>
|
|
7
|
-
gem 'ronin-support', '~> 1.0'
|
|
7
|
+
gem 'ronin-support', '~> 1.0' # , github: 'ronin-rb/ronin-support'
|
|
8
8
|
|
|
9
|
-
# gem 'ronin-code-asm', '~> 0.3'
|
|
10
|
-
# gem 'ronin-code-sql', '~> 1.2'
|
|
11
|
-
# gem 'ronin-db', '~> 0.1'
|
|
12
|
-
# gem 'ronin-web-server', '~> 0.1'
|
|
13
|
-
# gem 'ronin-web-spider', '~> 0.1'
|
|
14
|
-
# gem 'ronin-web-user_agents', '~> 0.1'
|
|
15
|
-
# gem 'ronin-payloads', '~> 0.1'
|
|
16
|
-
# gem 'ronin-exploits', '~> 1.0'
|
|
9
|
+
# gem 'ronin-code-asm', '~> 0.3' # , github: 'ronin-rb/ronin-code-asm'
|
|
10
|
+
# gem 'ronin-code-sql', '~> 1.2' # , github: 'ronin-rb/ronin-code-sql'
|
|
11
|
+
# gem 'ronin-db', '~> 0.1' # , github: 'ronin-rb/ronin-db'
|
|
12
|
+
# gem 'ronin-web-server', '~> 0.1' # , github: 'ronin-rb/ronin-web-server'
|
|
13
|
+
# gem 'ronin-web-spider', '~> 0.1' # , github: 'ronin-rb/ronin-web-spider'
|
|
14
|
+
# gem 'ronin-web-user_agents', '~> 0.1' # , github: 'ronin-rb/ronin-web-user_agents'
|
|
15
|
+
# gem 'ronin-payloads', '~> 0.1' # , github: 'ronin-rb/ronin-payloads'
|
|
16
|
+
# gem 'ronin-exploits', '~> 1.0' # , github: 'ronin-rb/ronin-exploits'
|
data/gemspec.yml
CHANGED
|
@@ -2,7 +2,7 @@ name: ronin
|
|
|
2
2
|
summary: A Ruby toolkit for security research and development.
|
|
3
3
|
description:
|
|
4
4
|
Ronin is a free and Open Source Ruby toolkit for security research and
|
|
5
|
-
development.Ronin contains many different CLI commands and Ruby libraries for
|
|
5
|
+
development.Ronin contains many different CLI commands and Ruby libraries for
|
|
6
6
|
a variety of security tasks, such as encoding/decoding data, filter
|
|
7
7
|
IPs/hosts/URLs, querying ASNs, querying DNS, HTTP, scanning for web
|
|
8
8
|
vulnerabilities, spidering websites, install 3rd party repositories of
|
|
@@ -96,17 +96,17 @@ dependencies:
|
|
|
96
96
|
async-io: ~> 1.0
|
|
97
97
|
wordlist: ~> 1.0
|
|
98
98
|
# Ronin dependencies:
|
|
99
|
-
ronin-support: ~> 1.0
|
|
100
|
-
ronin-core: ~> 0.1
|
|
99
|
+
ronin-support: ~> 1.0, >= 1.0.1
|
|
100
|
+
ronin-core: ~> 0.1, >= 0.1.1
|
|
101
101
|
ronin-repos: ~> 0.1
|
|
102
102
|
ronin-db: ~> 0.1
|
|
103
103
|
ronin-fuzzer: ~> 0.1
|
|
104
|
-
ronin-web: ~> 1.0
|
|
104
|
+
ronin-web: ~> 1.0, >= 1.0.1
|
|
105
105
|
ronin-code-asm: ~> 1.0
|
|
106
106
|
ronin-code-sql: ~> 2.0
|
|
107
|
-
ronin-payloads: ~> 0.1
|
|
108
|
-
ronin-exploits: ~> 1.0
|
|
109
|
-
ronin-vulns: ~> 0.1
|
|
107
|
+
ronin-payloads: ~> 0.1, >= 0.1.1
|
|
108
|
+
ronin-exploits: ~> 1.0, >= 1.0.1
|
|
109
|
+
ronin-vulns: ~> 0.1, >= 0.1.2
|
|
110
110
|
|
|
111
111
|
development_dependencies:
|
|
112
112
|
bundler: ~> 2.0
|
|
@@ -24,6 +24,9 @@ require 'ronin/support/crypto/cipher'
|
|
|
24
24
|
module Ronin
|
|
25
25
|
class CLI
|
|
26
26
|
module Commands
|
|
27
|
+
#
|
|
28
|
+
# Base class for all commands which use ciphers.
|
|
29
|
+
#
|
|
27
30
|
class CipherCommand < FileProcessorCommand
|
|
28
31
|
|
|
29
32
|
include KeyOptions
|
|
@@ -142,7 +145,6 @@ module Ronin
|
|
|
142
145
|
cipher.stream(input, block_size: @block_size, output: stdout)
|
|
143
146
|
end
|
|
144
147
|
|
|
145
|
-
|
|
146
148
|
end
|
|
147
149
|
end
|
|
148
150
|
end
|
data/lib/ronin/cli/command.rb
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
require 'ronin/cli/value_processor_command'
|
|
20
|
+
require 'ronin/cli/host_and_port'
|
|
20
21
|
|
|
21
22
|
require 'ronin/support/network/tcp'
|
|
22
23
|
|
|
@@ -42,6 +43,8 @@ module Ronin
|
|
|
42
43
|
#
|
|
43
44
|
class BannerGrab < ValueProcessorCommand
|
|
44
45
|
|
|
46
|
+
include HostAndPort
|
|
47
|
+
|
|
45
48
|
usage '[options] {HOST:PORT} ...'
|
|
46
49
|
|
|
47
50
|
option :with_host_port, desc: 'Print the service with the banner'
|
|
@@ -62,8 +65,7 @@ module Ronin
|
|
|
62
65
|
# The `HOST:PORT` service pair.
|
|
63
66
|
#
|
|
64
67
|
def process_value(service)
|
|
65
|
-
host, port = service
|
|
66
|
-
port = port.to_i
|
|
68
|
+
host, port = host_and_port(service)
|
|
67
69
|
|
|
68
70
|
begin
|
|
69
71
|
banner = Support::Network::TCP.banner(host,port)
|
|
@@ -73,7 +75,7 @@ module Ronin
|
|
|
73
75
|
else
|
|
74
76
|
puts banner
|
|
75
77
|
end
|
|
76
|
-
rescue => error
|
|
78
|
+
rescue StandardError => error
|
|
77
79
|
print_error("#{service}: #{error.message}")
|
|
78
80
|
end
|
|
79
81
|
end
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
require 'ronin/cli/value_processor_command'
|
|
20
|
+
require 'ronin/cli/host_and_port'
|
|
20
21
|
require 'ronin/support/crypto/cert'
|
|
21
22
|
require 'ronin/support/network/ssl/mixin'
|
|
22
23
|
|
|
@@ -62,6 +63,7 @@ module Ronin
|
|
|
62
63
|
include CommandKit::Printing::Indent
|
|
63
64
|
include CommandKit::Printing::Fields
|
|
64
65
|
include CommandKit::Printing::Lists
|
|
66
|
+
include HostAndPort
|
|
65
67
|
|
|
66
68
|
usage '[options] {HOST:PORT | URL | FILE} ...'
|
|
67
69
|
|
|
@@ -100,14 +102,11 @@ module Ronin
|
|
|
100
102
|
def process_value(value)
|
|
101
103
|
case value
|
|
102
104
|
when /\A[^:]+:\d+\z/
|
|
103
|
-
host, port = value
|
|
104
|
-
port = port.to_i
|
|
105
|
+
host, port = host_and_port(value)
|
|
105
106
|
|
|
106
107
|
print_cert(ssl_cert(host,port))
|
|
107
108
|
when /\Ahttps:/
|
|
108
|
-
|
|
109
|
-
host = uri.host
|
|
110
|
-
port = uri.port
|
|
109
|
+
host, port = host_and_port_from_url(value)
|
|
111
110
|
|
|
112
111
|
print_cert(ssl_cert(host,port))
|
|
113
112
|
else
|
|
@@ -180,8 +179,6 @@ module Ronin
|
|
|
180
179
|
|
|
181
180
|
puts
|
|
182
181
|
|
|
183
|
-
fields = {}
|
|
184
|
-
|
|
185
182
|
if options[:extensions]
|
|
186
183
|
puts "Extensions:"
|
|
187
184
|
indent do
|
|
@@ -103,8 +103,8 @@ module Ronin
|
|
|
103
103
|
|
|
104
104
|
option :subject_alt_name, short: '-A',
|
|
105
105
|
value: {
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
type: /[a-z0-9:\._-]+/,
|
|
107
|
+
usage: 'HOST|IP'
|
|
108
108
|
},
|
|
109
109
|
desc: 'Adds HOST or IP to subjectAltName' do |value|
|
|
110
110
|
@subject_alt_names << value
|
|
@@ -277,7 +277,7 @@ module Ronin
|
|
|
277
277
|
@not_after ||= if options[:not_after]
|
|
278
278
|
Time.parse(options[:not_after])
|
|
279
279
|
else
|
|
280
|
-
not_before+Support::Crypto::Cert::ONE_YEAR
|
|
280
|
+
not_before + Support::Crypto::Cert::ONE_YEAR
|
|
281
281
|
end
|
|
282
282
|
end
|
|
283
283
|
|
|
@@ -378,7 +378,7 @@ module Ronin
|
|
|
378
378
|
# @return [String, nil]
|
|
379
379
|
#
|
|
380
380
|
def subject_alt_name_ext
|
|
381
|
-
|
|
381
|
+
unless @subject_alt_names.empty?
|
|
382
382
|
@subject_alt_names.map { |name|
|
|
383
383
|
if name =~ IP_REGEXP
|
|
384
384
|
"IP: #{name}"
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
require 'ronin/cli/value_processor_command'
|
|
20
|
+
require 'ronin/cli/host_and_port'
|
|
20
21
|
require 'ronin/support/network/ssl/mixin'
|
|
21
22
|
|
|
22
23
|
require 'uri'
|
|
@@ -49,6 +50,7 @@ module Ronin
|
|
|
49
50
|
#
|
|
50
51
|
class CertGrab < ValueProcessorCommand
|
|
51
52
|
|
|
53
|
+
include HostAndPort
|
|
52
54
|
include Support::Network::SSL::Mixin
|
|
53
55
|
|
|
54
56
|
usage '[options] {HOST:PORT | URL} ...'
|
|
@@ -63,7 +65,7 @@ module Ronin
|
|
|
63
65
|
examples [
|
|
64
66
|
'github.com:443',
|
|
65
67
|
'93.184.216.34:443',
|
|
66
|
-
'https://github.com/'
|
|
68
|
+
'https://github.com/'
|
|
67
69
|
]
|
|
68
70
|
|
|
69
71
|
man_page 'ronin-cert-grab.1'
|
|
@@ -77,14 +79,11 @@ module Ronin
|
|
|
77
79
|
def process_value(value)
|
|
78
80
|
case value
|
|
79
81
|
when /\A[^:]+:\d+\z/
|
|
80
|
-
host, port = value
|
|
81
|
-
port = port.to_i
|
|
82
|
+
host, port = host_and_port(value)
|
|
82
83
|
|
|
83
84
|
grab_cert(host,port)
|
|
84
85
|
when /\Ahttps:/
|
|
85
|
-
|
|
86
|
-
host = uri.host
|
|
87
|
-
port = uri.port
|
|
86
|
+
host, port = host_and_port_from_url(value)
|
|
88
87
|
|
|
89
88
|
grab_cert(host,port)
|
|
90
89
|
else
|
|
@@ -61,14 +61,14 @@ module Ronin
|
|
|
61
61
|
class Decode < StringMethodsCommand
|
|
62
62
|
|
|
63
63
|
option :base16, desc: 'Base16 decodes the data' do
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
require 'ronin/support/encoding/base16'
|
|
65
|
+
@method_calls << :base16_decode
|
|
66
|
+
end
|
|
67
67
|
|
|
68
68
|
option :base32, desc: 'Base32 decodes the data' do
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
require 'ronin/support/encoding/base32'
|
|
70
|
+
@method_calls << :base32_decode
|
|
71
|
+
end
|
|
72
72
|
|
|
73
73
|
option :base64, short: '-b',
|
|
74
74
|
equals: true,
|
|
@@ -78,11 +78,11 @@ module Ronin
|
|
|
78
78
|
},
|
|
79
79
|
desc: 'Base64 decodes the data' do |mode=nil|
|
|
80
80
|
require 'ronin/support/encoding/base64'
|
|
81
|
-
if mode
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
@method_calls << if mode
|
|
82
|
+
[:base64_decode, [mode]]
|
|
83
|
+
else
|
|
84
|
+
:base64_decode
|
|
85
|
+
end
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
option :zlib, short: '-z',
|
|
@@ -122,9 +122,9 @@ module Ronin
|
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
option :http, desc: 'HTTP decodes the data' do
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
require 'ronin/support/encoding/http'
|
|
126
|
+
@method_calls << :http_decode
|
|
127
|
+
end
|
|
128
128
|
|
|
129
129
|
option :js, short: '-j',
|
|
130
130
|
desc: 'JavaScript decodes the data' do
|
|
@@ -61,14 +61,14 @@ module Ronin
|
|
|
61
61
|
class Encode < StringMethodsCommand
|
|
62
62
|
|
|
63
63
|
option :base16, desc: 'Base16 encodes the data' do
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
require 'ronin/support/encoding/base16'
|
|
65
|
+
@method_calls << :base16_encode
|
|
66
|
+
end
|
|
67
67
|
|
|
68
68
|
option :base32, desc: 'Base32 encodes the data' do
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
require 'ronin/support/encoding/base32'
|
|
70
|
+
@method_calls << :base32_encode
|
|
71
|
+
end
|
|
72
72
|
|
|
73
73
|
option :base64, short: '-b',
|
|
74
74
|
equals: true,
|
|
@@ -78,11 +78,11 @@ module Ronin
|
|
|
78
78
|
},
|
|
79
79
|
desc: 'Base64 encodes the data' do |mode=nil|
|
|
80
80
|
require 'ronin/support/encoding/base64'
|
|
81
|
-
if mode
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
@method_calls << if mode
|
|
82
|
+
[:base64_encode, [mode]]
|
|
83
|
+
else
|
|
84
|
+
:base64_encode
|
|
85
|
+
end
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
option :zlib, short: '-z',
|
|
@@ -122,9 +122,9 @@ module Ronin
|
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
option :http, desc: 'HTTP encodes the data' do
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
require 'ronin/support/encoding/http'
|
|
126
|
+
@method_calls << :http_encode
|
|
127
|
+
end
|
|
128
128
|
|
|
129
129
|
option :js, short: '-j',
|
|
130
130
|
desc: 'JavaScript encodes the data' do
|
|
@@ -136,7 +136,7 @@ module Ronin
|
|
|
136
136
|
def run(*files)
|
|
137
137
|
unless @pattern
|
|
138
138
|
print_error "must specify a pattern to search for"
|
|
139
|
-
exit
|
|
139
|
+
exit(-1)
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
super(*files)
|
|
@@ -151,8 +151,8 @@ module Ronin
|
|
|
151
151
|
def process_input(input)
|
|
152
152
|
filename = filename_of(input)
|
|
153
153
|
|
|
154
|
-
input.each_line(chomp: true).
|
|
155
|
-
match_line(line, filename: filename, line_number: index+1)
|
|
154
|
+
input.each_line(chomp: true).with_index do |line,index|
|
|
155
|
+
match_line(line, filename: filename, line_number: index + 1)
|
|
156
156
|
end
|
|
157
157
|
end
|
|
158
158
|
|
|
@@ -184,7 +184,9 @@ module Ronin
|
|
|
184
184
|
#
|
|
185
185
|
def match_line(line,**kwargs)
|
|
186
186
|
index = 0
|
|
187
|
+
|
|
187
188
|
printed_prefix = false
|
|
189
|
+
only_matching = options[:only_matching]
|
|
188
190
|
|
|
189
191
|
while (match = line.match(@pattern,index))
|
|
190
192
|
unless printed_prefix
|
|
@@ -195,13 +197,13 @@ module Ronin
|
|
|
195
197
|
match_start, match_stop = match.offset(0)
|
|
196
198
|
|
|
197
199
|
# print the text before the match, unless --only-matching is enabled
|
|
198
|
-
print(line[index...match_start]) unless
|
|
200
|
+
print(line[index...match_start]) unless only_matching
|
|
199
201
|
print_match(match)
|
|
200
202
|
|
|
201
203
|
index = match_stop
|
|
202
204
|
end
|
|
203
205
|
|
|
204
|
-
unless
|
|
206
|
+
unless only_matching
|
|
205
207
|
# print the rest of the line, if we've had at least one match
|
|
206
208
|
puts(line[index..]) if index > 0
|
|
207
209
|
end
|