ronin 1.0.0.pre4 → 1.0.0.rc1
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.
- data/.gemtest +0 -0
- data/ChangeLog.md +1 -0
- data/Gemfile +3 -1
- data/README.md +17 -19
- data/Rakefile +1 -0
- data/gemspec.yml +2 -1
- data/lib/ronin.rb +3 -0
- data/lib/ronin/address.rb +7 -3
- data/lib/ronin/arch.rb +2 -2
- data/lib/ronin/bootstrap.rb +3 -0
- data/lib/ronin/cached_file.rb +1 -1
- data/lib/ronin/campaign.rb +3 -32
- data/lib/ronin/class_methods.rb +17 -0
- data/lib/ronin/config.rb +25 -24
- data/lib/ronin/credential.rb +3 -0
- data/lib/ronin/database/migrations.rb +0 -1
- data/lib/ronin/database/migrations/create_credentials_table.rb +1 -2
- data/lib/ronin/database/migrations/graph.rb +6 -3
- data/lib/ronin/database/migrations/migration.rb +3 -0
- data/lib/ronin/database/migrations/migrations.rb +2 -2
- data/lib/ronin/email_address.rb +3 -0
- data/lib/ronin/engine/buildable.rb +3 -0
- data/lib/ronin/engine/class_methods.rb +3 -0
- data/lib/ronin/engine/deployable.rb +3 -0
- data/lib/ronin/engine/engine.rb +14 -0
- data/lib/ronin/engine/instance_methods.rb +3 -0
- data/lib/ronin/engine/verifiable.rb +3 -0
- data/lib/ronin/environment.rb +6 -0
- data/lib/ronin/host_name.rb +3 -0
- data/lib/ronin/host_name_ip_address.rb +3 -0
- data/lib/ronin/ip_address.rb +3 -0
- data/lib/ronin/ip_address_mac_address.rb +3 -0
- data/lib/ronin/license.rb +1 -1
- data/lib/ronin/mac_address.rb +3 -0
- data/lib/ronin/model/cacheable/cacheable.rb +1 -1
- data/lib/ronin/model/class_methods.rb +3 -0
- data/lib/ronin/model/has_authors/class_methods.rb +4 -0
- data/lib/ronin/model/has_authors/has_authors.rb +9 -5
- data/lib/ronin/model/has_description/class_methods.rb +4 -0
- data/lib/ronin/model/has_description/has_description.rb +6 -0
- data/lib/ronin/model/has_license/class_methods.rb +4 -0
- data/lib/ronin/model/has_license/has_license.rb +9 -5
- data/lib/ronin/model/has_name/class_methods.rb +4 -0
- data/lib/ronin/model/has_name/has_name.rb +6 -0
- data/lib/ronin/model/has_title/class_methods.rb +4 -0
- data/lib/ronin/model/has_title/has_title.rb +6 -0
- data/lib/ronin/model/has_unique_name.rb +7 -0
- data/lib/ronin/model/has_version/class_methods.rb +4 -0
- data/lib/ronin/model/has_version/has_version.rb +6 -0
- data/lib/ronin/model/model.rb +7 -0
- data/lib/ronin/model/types/description.rb +7 -2
- data/lib/ronin/open_port.rb +3 -0
- data/lib/ronin/organization.rb +3 -0
- data/lib/ronin/os.rb +2 -2
- data/lib/ronin/os_guess.rb +3 -0
- data/lib/ronin/password.rb +4 -1
- data/lib/ronin/port.rb +6 -1
- data/lib/ronin/ronin.rb +8 -0
- data/lib/ronin/service.rb +3 -0
- data/lib/ronin/service_credential.rb +3 -0
- data/lib/ronin/target.rb +3 -4
- data/lib/ronin/tcp_port.rb +4 -1
- data/lib/ronin/udp_port.rb +4 -1
- data/lib/ronin/ui/cli/cli.rb +1 -1
- data/lib/ronin/ui/cli/command.rb +6 -0
- data/lib/ronin/ui/cli/commands/repos.rb +33 -0
- data/lib/ronin/ui/cli/engine_command.rb +3 -0
- data/lib/ronin/ui/cli/model_command.rb +3 -0
- data/lib/ronin/ui/console.rb +5 -1
- data/lib/ronin/ui/hexdump/hexdump.rb +3 -0
- data/lib/ronin/ui/output/helpers.rb +59 -26
- data/lib/ronin/ui/output/output.rb +3 -0
- data/lib/ronin/ui/output/terminal/color.rb +32 -20
- data/lib/ronin/ui/output/terminal/raw.rb +23 -20
- data/lib/ronin/ui/shell.rb +3 -0
- data/lib/ronin/url.rb +8 -5
- data/lib/ronin/url_query_param.rb +3 -0
- data/lib/ronin/url_scheme.rb +3 -0
- data/lib/ronin/user_name.rb +4 -1
- data/lib/ronin/vendor.rb +1 -1
- data/lib/ronin/version.rb +1 -1
- data/lib/ronin/web_credential.rb +4 -1
- data/ronin.gemspec +7 -2
- data/spec/campaign_spec.rb +0 -25
- data/spec/url_spec.rb +5 -2
- metadata +48 -36
- data/lib/ronin/database/migrations/create_remote_files_table.rb +0 -52
- data/lib/ronin/proxy.rb +0 -178
- data/lib/ronin/proxy_credential.rb +0 -29
- data/lib/ronin/remote_file.rb +0 -152
@@ -1,52 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c) 2006-2011 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
|
-
#
|
4
|
-
# This file is part of Ronin.
|
5
|
-
#
|
6
|
-
# Ronin is free software: you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU General Public License as published by
|
8
|
-
# the Free Software Foundation, either version 3 of the License, or
|
9
|
-
# (at your option) any later version.
|
10
|
-
#
|
11
|
-
# Ronin is distributed in the hope that it will be useful,
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
# GNU General Public License for more details.
|
15
|
-
#
|
16
|
-
# You should have received a copy of the GNU General Public License
|
17
|
-
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
|
-
#
|
19
|
-
|
20
|
-
require 'ronin/database/migrations/create_targets_table'
|
21
|
-
require 'ronin/database/migrations/create_taggings_table'
|
22
|
-
require 'ronin/database/migrations/migrations'
|
23
|
-
|
24
|
-
module Ronin
|
25
|
-
module Database
|
26
|
-
module Migrations
|
27
|
-
migration(
|
28
|
-
:create_remote_files_table,
|
29
|
-
:needs => [:create_targets_table, :create_taggings_table]
|
30
|
-
) do
|
31
|
-
up do
|
32
|
-
create_table :ronin_remote_files do
|
33
|
-
column :id, Integer, :serial => true
|
34
|
-
column :remote_path, String, :not_null => true
|
35
|
-
column :target_id, Integer, :not_null => true
|
36
|
-
column :created_at, Time, :not_null => true
|
37
|
-
column :frozen_tag_list, Text
|
38
|
-
end
|
39
|
-
|
40
|
-
create_index :ronin_remote_files, :remote_path
|
41
|
-
create_index :ronin_remote_files, :target_id, :remote_path,
|
42
|
-
:name => :target_remote_path,
|
43
|
-
:unique => true
|
44
|
-
end
|
45
|
-
|
46
|
-
down do
|
47
|
-
drop_table :ronin_remote_files
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/lib/ronin/proxy.rb
DELETED
@@ -1,178 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c) 2006-2011 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
|
-
#
|
4
|
-
# This file is part of Ronin.
|
5
|
-
#
|
6
|
-
# Ronin is free software: you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU General Public License as published by
|
8
|
-
# the Free Software Foundation, either version 3 of the License, or
|
9
|
-
# (at your option) any later version.
|
10
|
-
#
|
11
|
-
# Ronin is distributed in the hope that it will be useful,
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
# GNU General Public License for more details.
|
15
|
-
#
|
16
|
-
# You should have received a copy of the GNU General Public License
|
17
|
-
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
|
-
#
|
19
|
-
|
20
|
-
require 'ronin/network/http/proxy'
|
21
|
-
require 'ronin/network/http/http'
|
22
|
-
require 'ronin/proxy_credential'
|
23
|
-
require 'ronin/ip_address'
|
24
|
-
require 'ronin/port'
|
25
|
-
require 'ronin/model'
|
26
|
-
|
27
|
-
require 'dm-timestamps'
|
28
|
-
|
29
|
-
module Ronin
|
30
|
-
class Proxy
|
31
|
-
|
32
|
-
include Model
|
33
|
-
|
34
|
-
# The primary-key of the proxy
|
35
|
-
property :id, Serial
|
36
|
-
|
37
|
-
# The type of proxy
|
38
|
-
property :type, String, :set => %w[http socks]
|
39
|
-
|
40
|
-
# Whether the proxy was anonymous
|
41
|
-
property :anonymous, Boolean, :default => false
|
42
|
-
|
43
|
-
# The latency for the proxy
|
44
|
-
property :latency, Float
|
45
|
-
|
46
|
-
# Specifies whether the proxy is dead or alive
|
47
|
-
property :alive, Boolean, :default => true
|
48
|
-
|
49
|
-
# The address of the proxy
|
50
|
-
belongs_to :ip_address, :model => 'Ronin::IPAddress'
|
51
|
-
|
52
|
-
# The port of the proxy
|
53
|
-
belongs_to :port
|
54
|
-
|
55
|
-
# Any credentials used for the proxy
|
56
|
-
has 0..n, :credentials, :model => 'Ronin::ProxyCredential'
|
57
|
-
|
58
|
-
# Specifies when the proxy was first created and last updated at
|
59
|
-
timestamps :at
|
60
|
-
|
61
|
-
#
|
62
|
-
# Determines if the proxy is an HTTP proxy.
|
63
|
-
#
|
64
|
-
# @return [Boolean]
|
65
|
-
# Specifies whether the proxy was an HTTP proxy.
|
66
|
-
#
|
67
|
-
def http?
|
68
|
-
self.type == 'http'
|
69
|
-
end
|
70
|
-
|
71
|
-
#
|
72
|
-
# Determines if the proxy is a SOCKS proxy.
|
73
|
-
#
|
74
|
-
# @return [Boolean]
|
75
|
-
# Specifies whether the proxy was a SOCKS proxy.
|
76
|
-
#
|
77
|
-
def socks?
|
78
|
-
self.type == 'socks'
|
79
|
-
end
|
80
|
-
|
81
|
-
#
|
82
|
-
# Creates an HTTP Proxy.
|
83
|
-
#
|
84
|
-
# @return [Network::HTTP::Proxy]
|
85
|
-
# The HTTP Proxy.
|
86
|
-
#
|
87
|
-
# @since 0.2.0
|
88
|
-
#
|
89
|
-
def http_proxy
|
90
|
-
proxy = Network::HTTP::Proxy.new(
|
91
|
-
:host => self.ip_address.address,
|
92
|
-
:port => self.port.number,
|
93
|
-
)
|
94
|
-
|
95
|
-
unless self.credentials.empty?
|
96
|
-
creds = self.credentials.first
|
97
|
-
|
98
|
-
proxy.user = creds.user
|
99
|
-
proxy.password = creds.password
|
100
|
-
end
|
101
|
-
|
102
|
-
return proxy
|
103
|
-
end
|
104
|
-
|
105
|
-
#
|
106
|
-
# Uses the proxy.
|
107
|
-
#
|
108
|
-
# @return [Boolean]
|
109
|
-
# Specifies if the proxy is being used.
|
110
|
-
#
|
111
|
-
# @since 0.2.0
|
112
|
-
#
|
113
|
-
def use!
|
114
|
-
if http?
|
115
|
-
Network::HTTP.proxy = http_proxy
|
116
|
-
elsif socks?
|
117
|
-
raise(NotImplementedError,"SOCKS proxies not supported yet")
|
118
|
-
end
|
119
|
-
|
120
|
-
return true
|
121
|
-
end
|
122
|
-
|
123
|
-
#
|
124
|
-
# Tests the proxy.
|
125
|
-
#
|
126
|
-
# @return [Boolean]
|
127
|
-
# Specifies whether the proxy is alive or dead.
|
128
|
-
#
|
129
|
-
# @since 0.2.0
|
130
|
-
#
|
131
|
-
def test
|
132
|
-
if http?
|
133
|
-
proxy = http_proxy
|
134
|
-
|
135
|
-
if proxy.valid?
|
136
|
-
self.alive = true
|
137
|
-
self.anonymous = proxy.anonymous?
|
138
|
-
self.latency = proxy.latency
|
139
|
-
return true
|
140
|
-
else
|
141
|
-
self.alive = false
|
142
|
-
return false
|
143
|
-
end
|
144
|
-
elsif socks?
|
145
|
-
# simply return if it is a SOCKS proxy
|
146
|
-
return true
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
#
|
151
|
-
# Converts the proxy to a String.
|
152
|
-
#
|
153
|
-
# @return [String]
|
154
|
-
# The String representation of the proxy.
|
155
|
-
#
|
156
|
-
# @since 0.2.0
|
157
|
-
#
|
158
|
-
def to_s
|
159
|
-
"#{self.ip_address}:#{self.port}"
|
160
|
-
end
|
161
|
-
|
162
|
-
#
|
163
|
-
# Splats the proxy into multiple variables.
|
164
|
-
#
|
165
|
-
# @return [Array]
|
166
|
-
# The IP address and port number of the proxy.
|
167
|
-
#
|
168
|
-
# @example
|
169
|
-
# ip, port = proxy
|
170
|
-
#
|
171
|
-
# @since 1.0.0
|
172
|
-
#
|
173
|
-
def to_ary
|
174
|
-
[self.ip_address.address, self.port.number]
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c) 2006-2011 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
|
-
#
|
4
|
-
# This file is part of Ronin.
|
5
|
-
#
|
6
|
-
# Ronin is free software: you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU General Public License as published by
|
8
|
-
# the Free Software Foundation, either version 3 of the License, or
|
9
|
-
# (at your option) any later version.
|
10
|
-
#
|
11
|
-
# Ronin is distributed in the hope that it will be useful,
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
# GNU General Public License for more details.
|
15
|
-
#
|
16
|
-
# You should have received a copy of the GNU General Public License
|
17
|
-
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
|
-
#
|
19
|
-
|
20
|
-
require 'ronin/credential'
|
21
|
-
require 'ronin/proxy'
|
22
|
-
|
23
|
-
module Ronin
|
24
|
-
class ProxyCredential < Credential
|
25
|
-
|
26
|
-
belongs_to :proxy, :required => false
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
data/lib/ronin/remote_file.rb
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c) 2006-2011 Hal Brodigan (postmodern.mod3 at gmail.com)
|
3
|
-
#
|
4
|
-
# This file is part of Ronin.
|
5
|
-
#
|
6
|
-
# Ronin is free software: you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU General Public License as published by
|
8
|
-
# the Free Software Foundation, either version 3 of the License, or
|
9
|
-
# (at your option) any later version.
|
10
|
-
#
|
11
|
-
# Ronin is distributed in the hope that it will be useful,
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
# GNU General Public License for more details.
|
15
|
-
#
|
16
|
-
# You should have received a copy of the GNU General Public License
|
17
|
-
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
|
-
#
|
19
|
-
|
20
|
-
require 'ronin/target'
|
21
|
-
require 'ronin/model'
|
22
|
-
require 'ronin/extensions/file'
|
23
|
-
|
24
|
-
require 'dm-timestamps'
|
25
|
-
require 'dm-tags'
|
26
|
-
require 'fileutils'
|
27
|
-
|
28
|
-
module Ronin
|
29
|
-
class RemoteFile
|
30
|
-
|
31
|
-
include Model
|
32
|
-
|
33
|
-
# Primary key of the remote file
|
34
|
-
property :id, Serial
|
35
|
-
|
36
|
-
# Remote path of the file
|
37
|
-
property :remote_path, String, :required => true,
|
38
|
-
:index => true
|
39
|
-
|
40
|
-
# The target the file was recovered from
|
41
|
-
belongs_to :target
|
42
|
-
|
43
|
-
# The address the file was recovered from
|
44
|
-
has 1, :address, :through => :target
|
45
|
-
|
46
|
-
# Tracks when the remote file was first recovered
|
47
|
-
timestamps :created_at
|
48
|
-
|
49
|
-
# Tags
|
50
|
-
has_tags_on :tags
|
51
|
-
|
52
|
-
# Validates the uniqueness of the remote_path and the target.
|
53
|
-
validates_uniqueness_of :remote_path, :scope => [:target]
|
54
|
-
|
55
|
-
#
|
56
|
-
# Searches for all remote files with the basename.
|
57
|
-
#
|
58
|
-
# @param [String] basename
|
59
|
-
# The basename of the file.
|
60
|
-
#
|
61
|
-
# @return [Array<RemoteFile>]
|
62
|
-
# The matching remote files.
|
63
|
-
#
|
64
|
-
# @since 1.0.0
|
65
|
-
#
|
66
|
-
def self.named(basename)
|
67
|
-
all(:remote_path => basename) |
|
68
|
-
all(:remote_path.like => "%/#{basename}")
|
69
|
-
end
|
70
|
-
|
71
|
-
#
|
72
|
-
# Searches for all remote files with the file name extension.
|
73
|
-
#
|
74
|
-
# @param [String, Symbol] ext
|
75
|
-
# The file name extension.
|
76
|
-
#
|
77
|
-
# @return [Array<RemoteFile>]
|
78
|
-
# The matching remote files.
|
79
|
-
#
|
80
|
-
# @since 1.0.0
|
81
|
-
#
|
82
|
-
def self.extension(ext)
|
83
|
-
all(:remote_path => "%.#{ext}")
|
84
|
-
end
|
85
|
-
|
86
|
-
#
|
87
|
-
# The local path for the remote file.
|
88
|
-
#
|
89
|
-
# @return [String, nil]
|
90
|
-
# The local path within the `~/.ronin/campaigns` directory.
|
91
|
-
#
|
92
|
-
# @since 1.0.0
|
93
|
-
#
|
94
|
-
def local_path
|
95
|
-
if self.target
|
96
|
-
escaped_path = File.escape_path(self.remote_path)
|
97
|
-
return File.join(self.target.directory,escaped_path)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
#
|
102
|
-
# Determines whether the remote file has been downloaded yet.
|
103
|
-
#
|
104
|
-
# @return [Boolean]
|
105
|
-
# Specifies whether the remote file was downloaded.
|
106
|
-
#
|
107
|
-
# @since 1.0.0
|
108
|
-
#
|
109
|
-
def downloaded?
|
110
|
-
!(File.file?(local_path))
|
111
|
-
end
|
112
|
-
|
113
|
-
#
|
114
|
-
# Opens the downloaded remote file for reading.
|
115
|
-
#
|
116
|
-
# @yield [file]
|
117
|
-
# The opened file will be passed to the given block.
|
118
|
-
#
|
119
|
-
# @yieldparam [File] file
|
120
|
-
# The opened file.
|
121
|
-
#
|
122
|
-
# @return [File, nil]
|
123
|
-
# If no block is given, the opened file will be returned.
|
124
|
-
#
|
125
|
-
# @since 1.0.0
|
126
|
-
#
|
127
|
-
def open(&block)
|
128
|
-
File.open(local_path,'rb',&block)
|
129
|
-
end
|
130
|
-
|
131
|
-
#
|
132
|
-
# Opens a local file for saving the contents of the remote file.
|
133
|
-
#
|
134
|
-
# @yield [file]
|
135
|
-
# The opened file will be passed to the given block.
|
136
|
-
#
|
137
|
-
# @yieldparam [File] file
|
138
|
-
# The opened file.
|
139
|
-
#
|
140
|
-
# @return [File, nil]
|
141
|
-
# If no block is given, the opened file will be returned.
|
142
|
-
#
|
143
|
-
def download!(&block)
|
144
|
-
path = local_path
|
145
|
-
directory = File.dirname(path)
|
146
|
-
|
147
|
-
FileUtils.mkdir_p(directory) unless File.directory?(directory)
|
148
|
-
return File.open(path,'wb',&block)
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
end
|