ronin 0.2.4 → 0.3.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.
- data.tar.gz.sig +0 -0
- data/History.txt +95 -0
- data/Manifest.txt +55 -25
- data/README.txt +64 -52
- data/Rakefile +21 -14
- data/bin/ronin +1 -1
- data/bin/ronin-add +1 -1
- data/bin/ronin-console +1 -1
- data/bin/ronin-help +1 -1
- data/bin/ronin-install +1 -1
- data/bin/ronin-list +1 -1
- data/bin/ronin-remove +1 -1
- data/bin/ronin-uninstall +1 -1
- data/bin/ronin-update +1 -1
- data/lib/ronin.rb +2 -4
- data/lib/ronin/arch.rb +66 -21
- data/lib/ronin/author.rb +27 -18
- data/lib/ronin/cacheable.rb +63 -23
- data/lib/ronin/code/emittable.rb +1 -4
- data/lib/ronin/code/reference.rb +2 -5
- data/lib/ronin/code/symbol_table.rb +1 -4
- data/lib/ronin/code/token.rb +1 -4
- data/lib/ronin/config.rb +31 -10
- data/lib/ronin/database.rb +1 -4
- data/lib/ronin/database/database.rb +42 -23
- data/lib/ronin/database/exceptions.rb +1 -4
- data/lib/ronin/database/exceptions/invalid_config.rb +1 -4
- data/lib/ronin/environment.rb +1 -5
- data/lib/ronin/extensions.rb +1 -5
- data/lib/ronin/extensions/array.rb +8 -6
- data/lib/ronin/extensions/file.rb +9 -4
- data/lib/ronin/extensions/ip_addr.rb +33 -13
- data/lib/ronin/extensions/kernel.rb +44 -9
- data/lib/ronin/extensions/meta.rb +1 -4
- data/lib/ronin/extensions/string.rb +8 -7
- data/lib/ronin/extensions/uri.rb +1 -4
- data/lib/ronin/extensions/uri/http.rb +1 -48
- data/lib/ronin/extensions/uri/query_params.rb +27 -8
- data/lib/ronin/formatting.rb +1 -4
- data/lib/ronin/formatting/binary.rb +1 -4
- data/lib/ronin/formatting/digest.rb +1 -4
- data/lib/ronin/formatting/extensions.rb +1 -4
- data/lib/ronin/formatting/extensions/binary.rb +1 -4
- data/lib/ronin/formatting/extensions/binary/file.rb +3 -28
- data/lib/ronin/formatting/extensions/binary/integer.rb +31 -12
- data/lib/ronin/formatting/extensions/binary/string.rb +59 -36
- data/lib/ronin/formatting/extensions/digest.rb +1 -4
- data/lib/ronin/formatting/extensions/digest/string.rb +31 -9
- data/lib/ronin/formatting/extensions/http.rb +1 -4
- data/lib/ronin/formatting/extensions/http/string.rb +16 -9
- data/lib/ronin/formatting/extensions/text.rb +1 -4
- data/lib/ronin/formatting/extensions/text/array.rb +17 -7
- data/lib/ronin/formatting/extensions/text/string.rb +70 -27
- data/lib/ronin/formatting/http.rb +1 -4
- data/lib/ronin/formatting/text.rb +1 -4
- data/lib/ronin/license.rb +72 -65
- data/lib/ronin/model.rb +1 -4
- data/lib/ronin/model/has_description.rb +37 -8
- data/lib/ronin/model/has_license.rb +12 -8
- data/lib/ronin/model/has_name.rb +10 -7
- data/lib/ronin/model/has_version.rb +14 -4
- data/lib/ronin/model/model.rb +71 -14
- data/lib/ronin/network.rb +1 -4
- data/lib/ronin/network/esmtp.rb +1 -4
- data/lib/ronin/network/extensions.rb +1 -4
- data/lib/ronin/network/extensions/esmtp.rb +1 -4
- data/lib/ronin/network/extensions/esmtp/net.rb +49 -21
- data/lib/ronin/network/extensions/http.rb +1 -4
- data/lib/ronin/network/extensions/http/net.rb +319 -531
- data/lib/ronin/network/extensions/imap.rb +1 -4
- data/lib/ronin/network/extensions/imap/net.rb +50 -23
- data/lib/ronin/network/extensions/pop3.rb +1 -4
- data/lib/ronin/network/extensions/pop3/net.rb +40 -17
- data/lib/ronin/network/extensions/smtp.rb +1 -4
- data/lib/ronin/network/extensions/smtp/net.rb +49 -21
- data/lib/ronin/network/extensions/tcp.rb +1 -4
- data/lib/ronin/network/extensions/tcp/net.rb +234 -31
- data/lib/ronin/network/extensions/telnet.rb +1 -4
- data/lib/ronin/network/extensions/telnet/net.rb +83 -51
- data/lib/ronin/network/extensions/udp.rb +1 -4
- data/lib/ronin/network/extensions/udp/net.rb +164 -27
- data/lib/ronin/{sessions.rb → network/helpers.rb} +10 -13
- data/lib/ronin/network/helpers/esmtp.rb +129 -0
- data/lib/ronin/{sessions/session.rb → network/helpers/helper.rb} +25 -17
- data/lib/ronin/network/helpers/http.rb +444 -0
- data/lib/ronin/network/helpers/imap.rb +115 -0
- data/lib/ronin/network/helpers/pop3.rb +110 -0
- data/lib/ronin/network/helpers/smtp.rb +123 -0
- data/lib/ronin/network/helpers/tcp.rb +309 -0
- data/lib/ronin/network/helpers/telnet.rb +158 -0
- data/lib/ronin/network/helpers/udp.rb +197 -0
- data/lib/ronin/network/http.rb +3 -156
- data/lib/ronin/network/http/exceptions.rb +1 -4
- data/lib/ronin/network/http/exceptions/unknown_request.rb +1 -4
- data/lib/ronin/network/http/http.rb +214 -0
- data/lib/ronin/network/http/proxy.rb +308 -0
- data/lib/ronin/network/imap.rb +7 -6
- data/lib/ronin/network/pop3.rb +7 -6
- data/lib/ronin/network/smtp.rb +1 -4
- data/lib/ronin/network/smtp/email.rb +34 -18
- data/lib/ronin/network/smtp/smtp.rb +19 -7
- data/lib/ronin/network/tcp.rb +1 -4
- data/lib/ronin/network/telnet.rb +25 -12
- data/lib/ronin/network/udp.rb +1 -4
- data/lib/ronin/os.rb +43 -21
- data/lib/ronin/path.rb +29 -9
- data/lib/ronin/platform.rb +1 -4
- data/lib/ronin/platform/exceptions.rb +1 -4
- data/lib/ronin/platform/exceptions/extension_not_found.rb +1 -4
- data/lib/ronin/platform/exceptions/overlay_cached.rb +1 -4
- data/lib/ronin/platform/exceptions/overlay_not_found.rb +1 -4
- data/lib/ronin/platform/extension.rb +195 -52
- data/lib/ronin/platform/extension_cache.rb +60 -24
- data/lib/ronin/platform/maintainer.rb +15 -8
- data/lib/ronin/platform/object_cache.rb +29 -8
- data/lib/ronin/platform/overlay.rb +82 -26
- data/lib/ronin/platform/overlay_cache.rb +179 -56
- data/lib/ronin/platform/platform.rb +154 -58
- data/lib/ronin/platform/ronin.rb +38 -11
- data/lib/ronin/product.rb +17 -17
- data/lib/ronin/rpc.rb +1 -4
- data/lib/ronin/rpc/call.rb +1 -4
- data/lib/ronin/rpc/client.rb +1 -4
- data/lib/ronin/rpc/console.rb +1 -4
- data/lib/ronin/rpc/exceptions.rb +1 -4
- data/lib/ronin/rpc/exceptions/not_implemented.rb +1 -4
- data/lib/ronin/rpc/exceptions/response_missing.rb +1 -4
- data/lib/ronin/rpc/response.rb +1 -4
- data/lib/ronin/rpc/service.rb +1 -4
- data/lib/ronin/rpc/shell.rb +1 -4
- data/lib/ronin/scanners.rb +1 -4
- data/lib/ronin/scanners/exceptions.rb +1 -4
- data/lib/ronin/scanners/exceptions/unknown_category.rb +1 -4
- data/lib/ronin/scanners/scanner.rb +82 -26
- data/lib/ronin/static.rb +1 -4
- data/lib/ronin/static/finders.rb +1 -4
- data/lib/ronin/static/static.rb +16 -7
- data/lib/ronin/templates.rb +2 -4
- data/lib/ronin/templates/erb.rb +24 -10
- data/lib/ronin/templates/template.rb +130 -0
- data/lib/ronin/ui.rb +2 -6
- data/lib/ronin/ui/command_line.rb +1 -4
- data/lib/ronin/ui/command_line/command.rb +137 -68
- data/lib/ronin/ui/command_line/command_line.rb +52 -29
- data/lib/ronin/ui/command_line/commands/add.rb +39 -67
- data/lib/ronin/ui/command_line/commands/console.rb +23 -27
- data/lib/ronin/ui/command_line/commands/help.rb +10 -29
- data/lib/ronin/ui/command_line/commands/install.rb +31 -56
- data/lib/ronin/ui/command_line/commands/list.rb +34 -52
- data/lib/ronin/ui/command_line/commands/remove.rb +12 -32
- data/lib/ronin/ui/command_line/commands/uninstall.rb +11 -31
- data/lib/ronin/ui/command_line/commands/update.rb +15 -35
- data/lib/ronin/ui/command_line/exceptions.rb +1 -4
- data/lib/ronin/ui/command_line/exceptions/unknown_command.rb +1 -4
- data/lib/ronin/ui/console.rb +54 -23
- data/lib/ronin/ui/hexdump.rb +1 -4
- data/lib/ronin/ui/hexdump/extensions.rb +1 -4
- data/lib/ronin/ui/hexdump/extensions/file.rb +8 -6
- data/lib/ronin/ui/hexdump/extensions/kernel.rb +4 -5
- data/lib/ronin/ui/hexdump/hexdump.rb +8 -5
- data/lib/ronin/{sessions/exceptions.rb → ui/output.rb} +3 -5
- data/lib/ronin/ui/output/handler.rb +121 -0
- data/lib/ronin/ui/output/helpers.rb +110 -0
- data/lib/ronin/ui/output/output.rb +144 -0
- data/lib/ronin/ui/shell.rb +38 -12
- data/lib/ronin/version.rb +2 -5
- data/lib/ronin/{sessions/exceptions/variable_missing.rb → yard.rb} +2 -10
- data/lib/ronin/{ronin.rb → yard/handlers.rb} +5 -15
- data/lib/ronin/yard/handlers/ruby.rb +27 -0
- data/lib/ronin/yard/handlers/ruby/base.rb +27 -0
- data/lib/ronin/yard/handlers/ruby/belongs_to_handler.rb +45 -0
- data/lib/ronin/yard/handlers/ruby/eval_block_handler.rb +18 -0
- data/lib/ronin/yard/handlers/ruby/has_handler.rb +49 -0
- data/lib/ronin/yard/handlers/ruby/legacy.rb +26 -0
- data/lib/ronin/yard/handlers/ruby/legacy/belongs_to_handler.rb +41 -0
- data/lib/ronin/yard/handlers/ruby/legacy/eval_block_handler.rb +19 -0
- data/lib/ronin/yard/handlers/ruby/legacy/has_handler.rb +34 -0
- data/lib/ronin/yard/handlers/ruby/legacy/metaclass_eval_handler.rb +21 -0
- data/lib/ronin/yard/handlers/ruby/legacy/property_handler.rb +41 -0
- data/lib/ronin/yard/handlers/ruby/legacy/scanner_handler.rb +61 -0
- data/lib/ronin/yard/handlers/ruby/metaclass_eval_handler.rb +18 -0
- data/lib/ronin/yard/handlers/ruby/property_handler.rb +45 -0
- data/lib/ronin/yard/handlers/ruby/scanner_handler.rb +66 -0
- data/spec/author_spec.rb +3 -3
- data/spec/extensions/classes/some_class.rb +2 -0
- data/spec/extensions/kernel_spec.rb +17 -0
- data/spec/extensions/uri/http_spec.rb +0 -31
- data/spec/formatting/binary/integer_spec.rb +4 -0
- data/spec/formatting/text/string_spec.rb +96 -0
- data/spec/license_spec.rb +6 -6
- data/spec/model/classes/basic_model.rb +13 -0
- data/spec/model/classes/custom_model.rb +17 -0
- data/spec/model/classes/described_model.rb +10 -0
- data/spec/model/has_description_spec.rb +42 -0
- data/spec/model/has_license_spec.rb +18 -4
- data/spec/model/model_spec.rb +68 -0
- data/spec/network/helpers/classes/test_helper.rb +11 -0
- data/spec/network/helpers/classes/uses_test_helper.rb +10 -0
- data/spec/network/helpers/helper_spec.rb +25 -0
- data/spec/network/{http_spec.rb → http/http_spec.rb} +0 -0
- data/spec/network/http/proxy_spec.rb +116 -0
- data/spec/os_spec.rb +4 -4
- data/spec/platform/extension_cache_spec.rb +14 -0
- data/spec/platform/extension_spec.rb +11 -0
- data/spec/platform/platform_spec.rb +8 -0
- data/spec/product_spec.rb +9 -9
- data/spec/spec_helper.rb +1 -1
- data/spec/templates/classes/{uses_erb.rb → example_erb.rb} +1 -1
- data/spec/templates/classes/example_template.rb +21 -0
- data/spec/templates/erb_spec.rb +2 -2
- data/spec/templates/helpers/static.rb +5 -0
- data/spec/templates/helpers/static/templates/_relative.erb +1 -0
- data/spec/templates/helpers/static/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +41 -0
- data/spec/ui/command_line/classes/test_command.rb +23 -0
- data/spec/ui/command_line/command_spec.rb +31 -0
- data/spec/ui/output_spec.rb +29 -0
- data/static/ronin/platform/overlay.xsl +135 -114
- data/tasks/spec.rb +1 -0
- data/tasks/yard.rb +18 -0
- metadata +98 -59
- metadata.gz.sig +0 -0
- data/TODO.txt +0 -15
- data/lib/ronin/extensions/hash.rb +0 -62
- data/lib/ronin/sessions/esmtp.rb +0 -57
- data/lib/ronin/sessions/http.rb +0 -678
- data/lib/ronin/sessions/imap.rb +0 -54
- data/lib/ronin/sessions/pop3.rb +0 -52
- data/lib/ronin/sessions/smtp.rb +0 -57
- data/lib/ronin/sessions/tcp.rb +0 -100
- data/lib/ronin/sessions/telnet.rb +0 -55
- data/lib/ronin/sessions/udp.rb +0 -73
- data/lib/ronin/ui/command_line/options.rb +0 -136
- data/lib/ronin/ui/diagnostics.rb +0 -66
- data/lib/ronin/ui/verbose.rb +0 -58
- data/spec/extensions/hash_spec.rb +0 -38
- data/spec/sessions/classes/test_session.rb +0 -11
- data/spec/sessions/classes/uses_test_session.rb +0 -10
- data/spec/sessions/session_spec.rb +0 -25
- data/spec/ui/verbose_spec.rb +0 -17
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This program 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 2 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This program 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 this program; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'ronin/network/helpers/helper'
|
|
22
|
+
require 'ronin/network/imap'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module Helpers
|
|
27
|
+
module IMAP
|
|
28
|
+
include Helper
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Creates a connection to the IMAP server. The +@host+, +@port+,
|
|
34
|
+
# +@imap_auth+, +@imap_user+ and +@imap_password+ instance
|
|
35
|
+
# variables will also be used to make the connection.
|
|
36
|
+
#
|
|
37
|
+
# @param [Hash] options
|
|
38
|
+
# Additional options.
|
|
39
|
+
#
|
|
40
|
+
# @option options [Integer] :port (IMAP.default_port)
|
|
41
|
+
# The port the IMAP server is running on.
|
|
42
|
+
#
|
|
43
|
+
# @option options [String] :certs
|
|
44
|
+
# The path to the file containing CA certs of the server.
|
|
45
|
+
#
|
|
46
|
+
# @option options [Symbol] :auth
|
|
47
|
+
# The type of authentication to perform when connecting to the
|
|
48
|
+
# server. May be either +:login+ or +:cram_md5+.
|
|
49
|
+
#
|
|
50
|
+
# @option options [String] :user
|
|
51
|
+
# The user to authenticate as when connecting to the server.
|
|
52
|
+
#
|
|
53
|
+
# @option options [String] :password
|
|
54
|
+
# The password to authenticate with when connecting to the
|
|
55
|
+
# server.
|
|
56
|
+
#
|
|
57
|
+
# @option options [Boolean]
|
|
58
|
+
# Indicates wether or not to use SSL when connecting to the
|
|
59
|
+
# server.
|
|
60
|
+
#
|
|
61
|
+
# @since 0.3.0
|
|
62
|
+
#
|
|
63
|
+
def imap_connect(options={},&block)
|
|
64
|
+
require_variable :host
|
|
65
|
+
|
|
66
|
+
options[:port] ||= @port
|
|
67
|
+
options[:auth] ||= @imap_auth
|
|
68
|
+
options[:user] ||= @imap_user
|
|
69
|
+
options[:password] ||= @imap_password
|
|
70
|
+
|
|
71
|
+
if @port
|
|
72
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
73
|
+
else
|
|
74
|
+
print_info "Connecting to #{@host} ..."
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
return ::Net.imap_connect(@host,options,&block)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Starts a session with the IMAP server. The +@host+, +@port+,
|
|
82
|
+
# +@imap_auth+, +@imap_user+ and +@imap_password+ instance
|
|
83
|
+
# variables will also be used to make the connection.
|
|
84
|
+
#
|
|
85
|
+
# @yield [session]
|
|
86
|
+
# If a _block_ is given, it will be passed the newly created
|
|
87
|
+
# IMAP session. After the _block_ has returned, the session will
|
|
88
|
+
# be closed.
|
|
89
|
+
#
|
|
90
|
+
# @yieldparam [Net::IMAP] session
|
|
91
|
+
# The newly created IMAP session object.
|
|
92
|
+
#
|
|
93
|
+
# @see imap_connect
|
|
94
|
+
# @since 0.3.0
|
|
95
|
+
#
|
|
96
|
+
def imap_session(options={},&block)
|
|
97
|
+
imap_connect(options) do |sess|
|
|
98
|
+
block.call(sess) if block
|
|
99
|
+
|
|
100
|
+
print_info "Logging out ..."
|
|
101
|
+
|
|
102
|
+
sess.close
|
|
103
|
+
sess.logout
|
|
104
|
+
|
|
105
|
+
if @port
|
|
106
|
+
print_info "Disconnecting from #{@host}:#{@port}"
|
|
107
|
+
else
|
|
108
|
+
print_info "Disconnecting from #{@host}"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This program 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 2 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This program 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 this program; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'ronin/network/helpers/helper'
|
|
22
|
+
require 'ronin/network/pop3'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module Helpers
|
|
27
|
+
module POP3
|
|
28
|
+
include Helper
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Creates a connection to the POP3 server. The +@host+, +@port+,
|
|
34
|
+
# +@pop3_user+ and +@pop3_password+ instance variables will also
|
|
35
|
+
# be used to connect to the server.
|
|
36
|
+
#
|
|
37
|
+
# @param [Hash] options
|
|
38
|
+
# Additional options.
|
|
39
|
+
#
|
|
40
|
+
# @option options [Integer] :port (Ronin::Network::POP3.default_port)
|
|
41
|
+
# The port the POP3 server is running on.
|
|
42
|
+
#
|
|
43
|
+
# @option options [String] :user
|
|
44
|
+
# The user to authenticate with when connecting to the POP3
|
|
45
|
+
# server.
|
|
46
|
+
#
|
|
47
|
+
# @option options [String] :password
|
|
48
|
+
# The password to authenticate with when connecting to the POP3
|
|
49
|
+
# server.
|
|
50
|
+
#
|
|
51
|
+
# @yield [session]
|
|
52
|
+
# If a _block_ is given, it will be passed the newly created
|
|
53
|
+
# POP3 session.
|
|
54
|
+
#
|
|
55
|
+
# @yieldparam [Net::POP3] session
|
|
56
|
+
# The newly created POP3 session.
|
|
57
|
+
#
|
|
58
|
+
# @return [Net::POP3]
|
|
59
|
+
# The newly created POP3 session.
|
|
60
|
+
#
|
|
61
|
+
# @since 0.3.0
|
|
62
|
+
#
|
|
63
|
+
def pop3_connect(options={},&block)
|
|
64
|
+
require_variable :host
|
|
65
|
+
|
|
66
|
+
options[:port] ||= @port
|
|
67
|
+
options[:user] ||= @pop3_user
|
|
68
|
+
options[:password] ||= @pop3_password
|
|
69
|
+
|
|
70
|
+
if @port
|
|
71
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
72
|
+
else
|
|
73
|
+
print_info "Connecting to #{@host} ..."
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
return ::Net.pop3_connect(@host,options,&block)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# Starts a session with the POP3 server. The +@host+, +@port+,
|
|
81
|
+
# +@pop3_user+ and +@pop3_password+ instance variables will
|
|
82
|
+
# also be used to connect to the server.
|
|
83
|
+
#
|
|
84
|
+
# @yield [session]
|
|
85
|
+
# If a _block_ is given, it will be passed the newly created
|
|
86
|
+
# POP3 session. After the _block_ has returned, the session
|
|
87
|
+
# will be closed.
|
|
88
|
+
#
|
|
89
|
+
# @yieldparam [Net::POP3] session
|
|
90
|
+
# The newly created POP3 session.
|
|
91
|
+
#
|
|
92
|
+
# @see pop3_connect
|
|
93
|
+
# @since 0.3.0
|
|
94
|
+
#
|
|
95
|
+
def pop3_session(options={},&block)
|
|
96
|
+
pop3_connect(options) do |sess|
|
|
97
|
+
block.call(sess) if block
|
|
98
|
+
sess.finish
|
|
99
|
+
|
|
100
|
+
if @port
|
|
101
|
+
print_info "Disconnecting to #{@host}:#{@port}"
|
|
102
|
+
else
|
|
103
|
+
print_info "Disconnecting to #{@host}"
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This program 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 2 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This program 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 this program; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'ronin/network/helpers/helper'
|
|
22
|
+
require 'ronin/network/smtp'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module Helpers
|
|
27
|
+
module SMTP
|
|
28
|
+
include Helper
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# @see Ronin::Network::SMTP.message
|
|
34
|
+
#
|
|
35
|
+
# @since 0.3.0
|
|
36
|
+
#
|
|
37
|
+
def smtp_message(options={},&block)
|
|
38
|
+
Network::SMTP.message(options,&block)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Creates a connection to the SMTP server. The +@host+, +@port+,
|
|
43
|
+
# +@smtp_login+, +@smtp_user+ and +@smtp_password+ instance
|
|
44
|
+
# variables will also be used to connect to the server.
|
|
45
|
+
#
|
|
46
|
+
# @param [Hash] options
|
|
47
|
+
# Additional options.
|
|
48
|
+
#
|
|
49
|
+
# @option options [Integer] :port (Ronin::Network::SMTP.default_port)
|
|
50
|
+
# The port to connect to.
|
|
51
|
+
#
|
|
52
|
+
# @option options [String] :helo
|
|
53
|
+
# The HELO domain.
|
|
54
|
+
#
|
|
55
|
+
# @option options [Symbol] :auth
|
|
56
|
+
# The type of authentication to use. Can be either +:login+,
|
|
57
|
+
# +:plain+ or +:cram_md5+.
|
|
58
|
+
#
|
|
59
|
+
# @option options [String] :user
|
|
60
|
+
# The user-name to authenticate with.
|
|
61
|
+
#
|
|
62
|
+
# @option options [String] :password
|
|
63
|
+
# The password to authenticate with.
|
|
64
|
+
#
|
|
65
|
+
# @yield [session]
|
|
66
|
+
# If a block is given, it will be passed an SMTP session object.
|
|
67
|
+
#
|
|
68
|
+
# @yieldparam [Net::SMTP] session
|
|
69
|
+
# The SMTP session.
|
|
70
|
+
#
|
|
71
|
+
# @return [Net::SMTP]
|
|
72
|
+
# The SMTP session.
|
|
73
|
+
#
|
|
74
|
+
# @since 0.3.0
|
|
75
|
+
#
|
|
76
|
+
def smtp_connect(options={},&block)
|
|
77
|
+
require_variable :host
|
|
78
|
+
|
|
79
|
+
options[:port] ||= @port
|
|
80
|
+
options[:login] ||= @smtp_login
|
|
81
|
+
options[:user] ||= @smtp_user
|
|
82
|
+
options[:password] ||= @smtp_password
|
|
83
|
+
|
|
84
|
+
if @port
|
|
85
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
86
|
+
else
|
|
87
|
+
print_info "Connecting to #{@host} ..."
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
return ::Net.smtp_connect(@host,options,&block)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Starts a session with the SMTP server. The +@host+, +@port+,
|
|
95
|
+
# +@smtp_login+, +@smtp_user+ and +@smtp_password+ instance
|
|
96
|
+
# variables will also be used to connect to the server.
|
|
97
|
+
#
|
|
98
|
+
# @yield [session]
|
|
99
|
+
# If a block is given, it will be passed an SMTP session object.
|
|
100
|
+
# After the block has returned, the session will be closed.
|
|
101
|
+
#
|
|
102
|
+
# @yieldparam [Net::SMTP] session
|
|
103
|
+
# The SMTP session.
|
|
104
|
+
#
|
|
105
|
+
# @see smtp_connect
|
|
106
|
+
# @since 0.3.0
|
|
107
|
+
#
|
|
108
|
+
def smtp_session(options={},&block)
|
|
109
|
+
smtp_connect(options) do |sess|
|
|
110
|
+
block.call(sess) if block
|
|
111
|
+
sess.close
|
|
112
|
+
|
|
113
|
+
if @port
|
|
114
|
+
print_info "Disconnecting to #{@host}:#{@port}"
|
|
115
|
+
else
|
|
116
|
+
print_info "Disconnecting to #{@host}"
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This program 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 2 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This program 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 this program; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'ronin/network/helpers/helper'
|
|
22
|
+
require 'ronin/network/tcp'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module Helpers
|
|
27
|
+
module TCP
|
|
28
|
+
include Helper
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Opens a TCP connection to the host and port specified by the
|
|
34
|
+
# +@host+ and +@port+ instance variables. If the +@local_host+ and
|
|
35
|
+
# +@local_port+ instance variables are set, they will be used for
|
|
36
|
+
# the local host and port of the TCP connection.
|
|
37
|
+
#
|
|
38
|
+
# @yield [socket]
|
|
39
|
+
# If a block is given, it will be passed the newly created socket.
|
|
40
|
+
#
|
|
41
|
+
# @yieldparam [TCPsocket] socket
|
|
42
|
+
# The newly created TCPSocket object.
|
|
43
|
+
#
|
|
44
|
+
# @return [TCPSocket]
|
|
45
|
+
# The newly created TCPSocket object.
|
|
46
|
+
#
|
|
47
|
+
# @example
|
|
48
|
+
# tcp_connect # => TCPSocket
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# tcp_connect do |sock|
|
|
52
|
+
# sock.write("GET /\n\n")
|
|
53
|
+
# puts sock.readlines
|
|
54
|
+
# sock.close
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
# @since 0.3.0
|
|
58
|
+
#
|
|
59
|
+
def tcp_connect(&block)
|
|
60
|
+
require_variable :host
|
|
61
|
+
require_variable :port
|
|
62
|
+
|
|
63
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
64
|
+
|
|
65
|
+
return ::Net.tcp_connect(@host,@port,@local_host,@local_port,&block)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Connects to the host and port specified by the +@host+ and +@port+
|
|
70
|
+
# instance variables, then sends the specified _data_.
|
|
71
|
+
#
|
|
72
|
+
# @param [String] data
|
|
73
|
+
# The data to send through the connection.
|
|
74
|
+
#
|
|
75
|
+
# @yield [socket]
|
|
76
|
+
# If a block is given, it will be passed the newly created socket.
|
|
77
|
+
#
|
|
78
|
+
# @yieldparam [TCPsocket] socket
|
|
79
|
+
# The newly created TCPSocket object.
|
|
80
|
+
#
|
|
81
|
+
# @return [TCPSocket]
|
|
82
|
+
# The newly created TCPSocket object.
|
|
83
|
+
#
|
|
84
|
+
# @since 0.3.0
|
|
85
|
+
#
|
|
86
|
+
def tcp_connect_and_send(data,&block)
|
|
87
|
+
require_variable :host
|
|
88
|
+
require_variable :port
|
|
89
|
+
|
|
90
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
91
|
+
print_debug "Sending data: #{data.inspect}"
|
|
92
|
+
|
|
93
|
+
return ::Net.tcp_connect_and_send(data,@host,@port,@local_host,@local_port,&block)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# Creates a TCP session to the host and port specified by the
|
|
98
|
+
# +@host+ and +@port+ instance variables.
|
|
99
|
+
#
|
|
100
|
+
# @yield [socket]
|
|
101
|
+
# If a block is given, it will be passed the newly created socket.
|
|
102
|
+
# After the block has returned, the socket will be closed.
|
|
103
|
+
#
|
|
104
|
+
# @yieldparam [TCPsocket] socket
|
|
105
|
+
# The newly created TCPSocket object.
|
|
106
|
+
#
|
|
107
|
+
# @since 0.3.0
|
|
108
|
+
#
|
|
109
|
+
def tcp_session(&block)
|
|
110
|
+
require_variable :host
|
|
111
|
+
require_variable :port
|
|
112
|
+
|
|
113
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
114
|
+
|
|
115
|
+
Net.tcp_session(@host,@port,@local_host,@local_port,&block)
|
|
116
|
+
|
|
117
|
+
print_info "Disconnected from #{@host}:#{@port}"
|
|
118
|
+
return nil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
#
|
|
122
|
+
# Connects to the host and port specified by the +@host+ and +@port+
|
|
123
|
+
# instance variables, reads the banner then closes the connection.
|
|
124
|
+
#
|
|
125
|
+
# @yield [banner]
|
|
126
|
+
# If a block is given, it will be passed the grabbed banner.
|
|
127
|
+
#
|
|
128
|
+
# @yieldparam [String] banner
|
|
129
|
+
# The grabbed banner.
|
|
130
|
+
#
|
|
131
|
+
# @return [String]
|
|
132
|
+
# The grabbed banner.
|
|
133
|
+
#
|
|
134
|
+
# @example
|
|
135
|
+
# tcp_banner
|
|
136
|
+
# # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
|
|
137
|
+
#
|
|
138
|
+
# @since 0.3.0
|
|
139
|
+
#
|
|
140
|
+
def tcp_banner(&block)
|
|
141
|
+
require_variable :host
|
|
142
|
+
require_variable :port
|
|
143
|
+
|
|
144
|
+
print_debug "Grabbing banner from #{@host}:#{@port}"
|
|
145
|
+
|
|
146
|
+
return ::Net.tcp_banner(@host,@port,@local_host,@local_port,&block)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
#
|
|
150
|
+
# Connects to the host and port specified by the +@host+ and +@port+
|
|
151
|
+
# instance variables, sends the specified _data_ and then closes the
|
|
152
|
+
# connection.
|
|
153
|
+
#
|
|
154
|
+
# @return [true]
|
|
155
|
+
# The data was successfully sent.
|
|
156
|
+
#
|
|
157
|
+
# @example
|
|
158
|
+
# buffer = "GET /" + ('A' * 4096) + "\n\r"
|
|
159
|
+
# Net.tcp_send(buffer)
|
|
160
|
+
# # => true
|
|
161
|
+
#
|
|
162
|
+
# @since 0.3.0
|
|
163
|
+
#
|
|
164
|
+
def tcp_send(data)
|
|
165
|
+
require_variable :host
|
|
166
|
+
require_variable :port
|
|
167
|
+
|
|
168
|
+
print_info "Connecting to #{@host}:#{@port} ..."
|
|
169
|
+
print_debug "Sending data: #{data.inspect}"
|
|
170
|
+
|
|
171
|
+
::Net.tcp_send(data,@host,@port,@local_host,@local_port)
|
|
172
|
+
|
|
173
|
+
print_info "Disconnected from #{@host}:#{@port}"
|
|
174
|
+
return true
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
#
|
|
178
|
+
# Creates a new TCPServer object listening on the +@server_host+
|
|
179
|
+
# and +@server_port+ instance variables.
|
|
180
|
+
#
|
|
181
|
+
# @yield [server]
|
|
182
|
+
# The given block will be passed the newly created server.
|
|
183
|
+
#
|
|
184
|
+
# @yieldparam [TCPServer] server
|
|
185
|
+
# The newly created server.
|
|
186
|
+
#
|
|
187
|
+
# @return [TCPServer]
|
|
188
|
+
# The newly created server.
|
|
189
|
+
#
|
|
190
|
+
# @example
|
|
191
|
+
# tcp_server
|
|
192
|
+
#
|
|
193
|
+
# @since 0.3.0
|
|
194
|
+
#
|
|
195
|
+
def tcp_server(&block)
|
|
196
|
+
require_variable :server_port
|
|
197
|
+
|
|
198
|
+
if @server_host
|
|
199
|
+
print_info "Listening on #{@server_host}:#{@server_port} ..."
|
|
200
|
+
else
|
|
201
|
+
print_info "Listening on #{@server_port} ..."
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
return ::Net.tcp_server(@server_port,@server_host,&block)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
#
|
|
208
|
+
# Creates a new TCPServer object listening on the +@server_host+
|
|
209
|
+
# and +@server_port+ instance variables, passing it to the given
|
|
210
|
+
# _block_ then closing the server.
|
|
211
|
+
#
|
|
212
|
+
# @yield [server]
|
|
213
|
+
# The given block will be passed the newly created server.
|
|
214
|
+
# When the block has finished, the server will be closed.
|
|
215
|
+
#
|
|
216
|
+
# @yieldparam [TCPServer] server
|
|
217
|
+
# The newly created server.
|
|
218
|
+
#
|
|
219
|
+
# @return [nil]
|
|
220
|
+
#
|
|
221
|
+
# @example
|
|
222
|
+
# tcp_server_session do |server|
|
|
223
|
+
# client1 = server.accept
|
|
224
|
+
# client2 = server.accept
|
|
225
|
+
#
|
|
226
|
+
# client2.write(server.read_line)
|
|
227
|
+
#
|
|
228
|
+
# client1.close
|
|
229
|
+
# client2.close
|
|
230
|
+
# end
|
|
231
|
+
#
|
|
232
|
+
# @since 0.3.0
|
|
233
|
+
#
|
|
234
|
+
def tcp_server_session(&block)
|
|
235
|
+
require_variable :server_port
|
|
236
|
+
|
|
237
|
+
if @server_host
|
|
238
|
+
print_info "Listening on #{@server_host}:#{@server_port} ..."
|
|
239
|
+
else
|
|
240
|
+
print_info "Listening on #{@server_port} ..."
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
::Net.tcp_server_session(&block)
|
|
244
|
+
|
|
245
|
+
if @server_host
|
|
246
|
+
print_info "Closed #{@server_host}:#{@server_port}"
|
|
247
|
+
else
|
|
248
|
+
print_info "Closed #{@server_port}"
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
return nil
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
#
|
|
255
|
+
# Creates a new TCPServer object listening on +@server_host+
|
|
256
|
+
# and +@server_port+ instance variables, accepts one client passing
|
|
257
|
+
# it to the given _block_, then closes both the newly connected
|
|
258
|
+
# client and the server.
|
|
259
|
+
#
|
|
260
|
+
# @yield [client]
|
|
261
|
+
# The given block will be passed the newly connected client.
|
|
262
|
+
# When the block has finished, the newly connected client and
|
|
263
|
+
# the server will be closed.
|
|
264
|
+
#
|
|
265
|
+
# @yieldparam [TCPSocket] client
|
|
266
|
+
# The newly connected client.
|
|
267
|
+
#
|
|
268
|
+
# @return [nil]
|
|
269
|
+
#
|
|
270
|
+
# @example
|
|
271
|
+
# tcp_single_server do |client|
|
|
272
|
+
# client.puts 'lol'
|
|
273
|
+
# end
|
|
274
|
+
#
|
|
275
|
+
# @since 0.3.0
|
|
276
|
+
#
|
|
277
|
+
def tcp_single_server(&block)
|
|
278
|
+
require_variable :server_port
|
|
279
|
+
|
|
280
|
+
if @server_host
|
|
281
|
+
print_info "Listening on #{@server_host}:#{@server_port} ..."
|
|
282
|
+
else
|
|
283
|
+
print_info "Listening on #{@server_port} ..."
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
::Net.tcp_single_server do |client|
|
|
287
|
+
client_addr = client.peeraddr
|
|
288
|
+
client_host = (client_addr[2] || client_addr[3])
|
|
289
|
+
client_port = client_addr[1]
|
|
290
|
+
|
|
291
|
+
print_info "Client connected #{client_host}:#{client_port}"
|
|
292
|
+
|
|
293
|
+
block.call(client) if block
|
|
294
|
+
|
|
295
|
+
print_info "Disconnecting client #{client_host}:#{client_port}"
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
if @server_host
|
|
299
|
+
print_info "Closed #{@server_host}:#{@server_port}"
|
|
300
|
+
else
|
|
301
|
+
print_info "Closed #{@server_port}"
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
return nil
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
end
|