ronin-support 0.1.0.pre1
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/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +504 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +23 -0
- data/README.md +98 -0
- data/Rakefile +29 -0
- data/gemspec.yml +20 -0
- data/lib/ronin/extensions.rb +28 -0
- data/lib/ronin/extensions/file.rb +63 -0
- data/lib/ronin/extensions/ip_addr.rb +220 -0
- data/lib/ronin/extensions/kernel.rb +45 -0
- data/lib/ronin/extensions/meta.rb +22 -0
- data/lib/ronin/extensions/meta/object.rb +24 -0
- data/lib/ronin/extensions/string.rb +200 -0
- data/lib/ronin/formatting.rb +26 -0
- data/lib/ronin/formatting/binary.rb +22 -0
- data/lib/ronin/formatting/digest.rb +22 -0
- data/lib/ronin/formatting/extensions.rb +25 -0
- data/lib/ronin/formatting/extensions/binary.rb +24 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
- data/lib/ronin/formatting/extensions/digest.rb +23 -0
- data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
- data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
- data/lib/ronin/formatting/extensions/http.rb +23 -0
- data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
- data/lib/ronin/formatting/extensions/http/string.rb +102 -0
- data/lib/ronin/formatting/extensions/text.rb +23 -0
- data/lib/ronin/formatting/extensions/text/array.rb +125 -0
- data/lib/ronin/formatting/extensions/text/string.rb +206 -0
- data/lib/ronin/formatting/http.rb +22 -0
- data/lib/ronin/formatting/text.rb +22 -0
- data/lib/ronin/network.rb +29 -0
- data/lib/ronin/network/esmtp.rb +22 -0
- data/lib/ronin/network/extensions.rb +29 -0
- data/lib/ronin/network/extensions/esmtp.rb +22 -0
- data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
- data/lib/ronin/network/extensions/http.rb +22 -0
- data/lib/ronin/network/extensions/http/net.rb +661 -0
- data/lib/ronin/network/extensions/imap.rb +22 -0
- data/lib/ronin/network/extensions/imap/net.rb +124 -0
- data/lib/ronin/network/extensions/pop3.rb +22 -0
- data/lib/ronin/network/extensions/pop3/net.rb +92 -0
- data/lib/ronin/network/extensions/smtp.rb +22 -0
- data/lib/ronin/network/extensions/smtp/net.rb +110 -0
- data/lib/ronin/network/extensions/ssl.rb +22 -0
- data/lib/ronin/network/extensions/ssl/net.rb +147 -0
- data/lib/ronin/network/extensions/tcp.rb +22 -0
- data/lib/ronin/network/extensions/tcp/net.rb +304 -0
- data/lib/ronin/network/extensions/telnet.rb +22 -0
- data/lib/ronin/network/extensions/telnet/net.rb +156 -0
- data/lib/ronin/network/extensions/udp.rb +22 -0
- data/lib/ronin/network/extensions/udp/net.rb +226 -0
- data/lib/ronin/network/http.rb +24 -0
- data/lib/ronin/network/http/exceptions.rb +22 -0
- data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
- data/lib/ronin/network/http/http.rb +290 -0
- data/lib/ronin/network/http/proxy.rb +307 -0
- data/lib/ronin/network/imap.rb +49 -0
- data/lib/ronin/network/network.rb +41 -0
- data/lib/ronin/network/pop3.rb +49 -0
- data/lib/ronin/network/smtp.rb +24 -0
- data/lib/ronin/network/smtp/email.rb +143 -0
- data/lib/ronin/network/smtp/smtp.rb +68 -0
- data/lib/ronin/network/ssl.rb +47 -0
- data/lib/ronin/network/tcp.rb +22 -0
- data/lib/ronin/network/telnet.rb +109 -0
- data/lib/ronin/network/udp.rb +22 -0
- data/lib/ronin/path.rb +132 -0
- data/lib/ronin/support.rb +28 -0
- data/lib/ronin/support/inflector.rb +40 -0
- data/lib/ronin/support/version.rb +27 -0
- data/lib/ronin/templates.rb +23 -0
- data/lib/ronin/templates/erb.rb +75 -0
- data/lib/ronin/templates/template.rb +161 -0
- data/ronin-support.gemspec +10 -0
- data/spec/extensions/file_spec.rb +24 -0
- data/spec/extensions/ip_addr_spec.rb +171 -0
- data/spec/extensions/kernel_spec.rb +30 -0
- data/spec/extensions/string_spec.rb +177 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
- data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
- data/spec/formatting/binary/integer_spec.rb +140 -0
- data/spec/formatting/binary/string_spec.rb +306 -0
- data/spec/formatting/digest/string_spec.rb +82 -0
- data/spec/formatting/http/integer_spec.rb +42 -0
- data/spec/formatting/http/string_spec.rb +76 -0
- data/spec/formatting/text/array_spec.rb +105 -0
- data/spec/formatting/text/string_spec.rb +180 -0
- data/spec/network/http/http_spec.rb +280 -0
- data/spec/network/http/proxy_spec.rb +150 -0
- data/spec/network/network_spec.rb +8 -0
- data/spec/network/ssl_spec.rb +14 -0
- data/spec/path_spec.rb +84 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support_spec.rb +8 -0
- data/spec/templates/classes/example_erb.rb +11 -0
- data/spec/templates/classes/example_template.rb +35 -0
- data/spec/templates/erb_spec.rb +21 -0
- data/spec/templates/helpers/data.rb +9 -0
- data/spec/templates/helpers/data/includes/_relative.erb +1 -0
- data/spec/templates/helpers/data/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +54 -0
- metadata +286 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/smtp/email'
|
|
23
|
+
require 'ronin/network/smtp/smtp'
|
|
24
|
+
require 'ronin/network/extensions/smtp'
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Network
|
|
24
|
+
module SMTP
|
|
25
|
+
class Email
|
|
26
|
+
|
|
27
|
+
# Sender of the email
|
|
28
|
+
attr_accessor :from
|
|
29
|
+
|
|
30
|
+
# Recipient of the email
|
|
31
|
+
attr_accessor :to
|
|
32
|
+
|
|
33
|
+
# Subject of the email
|
|
34
|
+
attr_accessor :subject
|
|
35
|
+
|
|
36
|
+
# Date of the email
|
|
37
|
+
attr_accessor :date
|
|
38
|
+
|
|
39
|
+
# Unique message-id string
|
|
40
|
+
attr_accessor :message_id
|
|
41
|
+
|
|
42
|
+
# Body of the email
|
|
43
|
+
attr_accessor :body
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Creates a new Email object.
|
|
47
|
+
#
|
|
48
|
+
# @param [Hash] options
|
|
49
|
+
# Additional options.
|
|
50
|
+
#
|
|
51
|
+
# @option options [String] :from
|
|
52
|
+
# The address the email is from.
|
|
53
|
+
#
|
|
54
|
+
# @option options [String] :to
|
|
55
|
+
# The address that the email should be sent to.
|
|
56
|
+
#
|
|
57
|
+
# @option options [String] :subject
|
|
58
|
+
# The subject of the email.
|
|
59
|
+
#
|
|
60
|
+
# @option options [String] :message_id
|
|
61
|
+
# Message-ID of the email.
|
|
62
|
+
#
|
|
63
|
+
# @option options [String, Time] :date (Time.now)
|
|
64
|
+
# The date the email was sent on.
|
|
65
|
+
#
|
|
66
|
+
# @option options [String, Array<String>] :body
|
|
67
|
+
# The body of the email.
|
|
68
|
+
#
|
|
69
|
+
# @yield [email]
|
|
70
|
+
# If a block is given, it will be passed the newly created email
|
|
71
|
+
# object.
|
|
72
|
+
#
|
|
73
|
+
# @yieldparam [Email] email
|
|
74
|
+
# The newly created email object.
|
|
75
|
+
#
|
|
76
|
+
def initialize(options={})
|
|
77
|
+
@from = options[:from]
|
|
78
|
+
@to = options[:to]
|
|
79
|
+
@subject = options[:subject]
|
|
80
|
+
@date = options[:date] || Time.now
|
|
81
|
+
@message_id = options[:message_id]
|
|
82
|
+
@body = []
|
|
83
|
+
|
|
84
|
+
if options[:body].kind_of?(Array)
|
|
85
|
+
@body += options[:body]
|
|
86
|
+
else
|
|
87
|
+
@body << options[:body]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
yield self if block_given?
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Formats the email into a SMTP message.
|
|
95
|
+
#
|
|
96
|
+
# @return [String]
|
|
97
|
+
# Properly formatted SMTP message.
|
|
98
|
+
#
|
|
99
|
+
# @see http://www.ruby-doc.org/stdlib/libdoc/net/smtp/rdoc/classes/Net/SMTP.html
|
|
100
|
+
#
|
|
101
|
+
def to_s
|
|
102
|
+
address = lambda { |info|
|
|
103
|
+
if info.kind_of?(Array)
|
|
104
|
+
return "#{info[0]} <#{info[1]}>"
|
|
105
|
+
elsif info.kind_of?(Hash)
|
|
106
|
+
return "#{info[:name]} <#{info[:email]}>"
|
|
107
|
+
else
|
|
108
|
+
return info
|
|
109
|
+
end
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
message = []
|
|
113
|
+
|
|
114
|
+
if @from
|
|
115
|
+
message << "From: #{address.call(@from)}"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
if @to
|
|
119
|
+
message << "To: #{address.call(@to)}"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if @subject
|
|
123
|
+
message << "Subject: #{@subject}"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
if @date
|
|
127
|
+
message << "Date: #{@date}"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
if @message_id
|
|
131
|
+
message << "Message-Id: <#{@message_id}>"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
message << ''
|
|
135
|
+
message += @body
|
|
136
|
+
|
|
137
|
+
return message.join("\n")
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/smtp/email'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module SMTP
|
|
27
|
+
# Default smtp port
|
|
28
|
+
DEFAULT_PORT = 25
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# @return [Integer]
|
|
32
|
+
# The default Ronin SMTP port.
|
|
33
|
+
#
|
|
34
|
+
def SMTP.default_port
|
|
35
|
+
@default_port ||= DEFAULT_PORT
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Sets the default Ronin SMTP port.
|
|
40
|
+
#
|
|
41
|
+
# @param [Integer] port
|
|
42
|
+
# The new default Ronin SMTP port.
|
|
43
|
+
#
|
|
44
|
+
def SMTP.default_port=(port)
|
|
45
|
+
@default_port = port
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#
|
|
49
|
+
# Creates a properly formatted email.
|
|
50
|
+
#
|
|
51
|
+
# @yield [email]
|
|
52
|
+
# If a block is given, it will be passed the newly created Email
|
|
53
|
+
# object.
|
|
54
|
+
#
|
|
55
|
+
# @yieldparam [Ronin::Network::Email::SMTP] email
|
|
56
|
+
# The new Email object.
|
|
57
|
+
#
|
|
58
|
+
# @return [String]
|
|
59
|
+
# Formatted SMTP email.
|
|
60
|
+
#
|
|
61
|
+
# @see Ronin::Network::SMTP::Email
|
|
62
|
+
#
|
|
63
|
+
def SMTP.message(options={},&block)
|
|
64
|
+
Email.new(options,&block).to_s
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/extensions/ssl'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module SSL
|
|
27
|
+
#
|
|
28
|
+
# Returns the OpenSSL verify mode.
|
|
29
|
+
#
|
|
30
|
+
# @param [Symbol, String] mode
|
|
31
|
+
# The name of the verify mode.
|
|
32
|
+
#
|
|
33
|
+
# @return [Integer]
|
|
34
|
+
# The verify mode number used by OpenSSL.
|
|
35
|
+
#
|
|
36
|
+
def SSL.verify(mode=nil)
|
|
37
|
+
verify_mode = 'VERIFY_' + (mode || :none).to_s.upcase
|
|
38
|
+
|
|
39
|
+
unless OpenSSL::SSL.const_defined?(verify_mode)
|
|
40
|
+
raise(RuntimeError,"unknown verify mode #{mode}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
return OpenSSL::SSL.const_get(verify_mode)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/extensions/tcp'
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/extensions/telnet'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Network
|
|
26
|
+
module Telnet
|
|
27
|
+
# Default telnet port
|
|
28
|
+
DEFAULT_PORT = 23
|
|
29
|
+
|
|
30
|
+
# The default prompt regular expression
|
|
31
|
+
DEFAULT_PROMPT = /[$%#>] \z/n
|
|
32
|
+
|
|
33
|
+
# The default timeout
|
|
34
|
+
DEFAULT_TIMEOUT = 10
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# @return [Integer]
|
|
38
|
+
# The default Ronin Telnet port.
|
|
39
|
+
#
|
|
40
|
+
def Telnet.default_port
|
|
41
|
+
@default_port ||= DEFAULT_PORT
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# Sets the default Ronin Telnet port.
|
|
46
|
+
#
|
|
47
|
+
# @param [Integer] port
|
|
48
|
+
# The new default Ronin Telnet port.
|
|
49
|
+
#
|
|
50
|
+
def Telnet.default_port=(port)
|
|
51
|
+
@default_port = port
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# @return [Regexp]
|
|
56
|
+
# The default Ronin Telnet prompt pattern.
|
|
57
|
+
#
|
|
58
|
+
def Telnet.default_prompt
|
|
59
|
+
@default_prompt ||= DEFAULT_PROMPT
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
#
|
|
63
|
+
# Sets the default Ronin Telnet prompt pattern.
|
|
64
|
+
#
|
|
65
|
+
# @param [Regexp] prompt
|
|
66
|
+
# The new default Ronin Telnet prompt pattern.
|
|
67
|
+
#
|
|
68
|
+
def Telnet.default_prompt=(prompt)
|
|
69
|
+
@default_prompt = prompt
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# @return [Integer]
|
|
74
|
+
# The default Ronin Telnet timeout.
|
|
75
|
+
#
|
|
76
|
+
def Telnet.default_timeout
|
|
77
|
+
@default_timeout ||= DEFAULT_TIMEOUT
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Sets the default Ronin Telnet timeout.
|
|
82
|
+
#
|
|
83
|
+
# @param [Integer] timeout
|
|
84
|
+
# The new default Ronin Telnet timeout.
|
|
85
|
+
#
|
|
86
|
+
def Telnet.default_timeout=(timeout)
|
|
87
|
+
@default_timeout = timeout
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
#
|
|
91
|
+
# @return [Telnet, IO, nil]
|
|
92
|
+
# The Ronin Telnet proxy.
|
|
93
|
+
#
|
|
94
|
+
def Telnet.proxy
|
|
95
|
+
@proxy ||= nil
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#
|
|
99
|
+
# Sets the Ronin Telnet proxy.
|
|
100
|
+
#
|
|
101
|
+
# @param [Telnet, IO, nil] new_proxy
|
|
102
|
+
# The new Ronin Telnet proxy.
|
|
103
|
+
#
|
|
104
|
+
def Telnet.proxy=(new_proxy)
|
|
105
|
+
@proxy = new_proxy
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/extensions/udp'
|
data/lib/ronin/path.rb
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'pathname'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
#
|
|
26
|
+
# The {Path} class extends `Pathname` to allow representing directory
|
|
27
|
+
# traversal paths.
|
|
28
|
+
#
|
|
29
|
+
class Path < Pathname
|
|
30
|
+
|
|
31
|
+
# The separator to join paths together with
|
|
32
|
+
attr_accessor :separator
|
|
33
|
+
|
|
34
|
+
def initialize(path)
|
|
35
|
+
@separator = File::SEPARATOR
|
|
36
|
+
|
|
37
|
+
super(path)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# The root path.
|
|
42
|
+
#
|
|
43
|
+
# @return [Path]
|
|
44
|
+
# The root path.
|
|
45
|
+
#
|
|
46
|
+
def Path.root
|
|
47
|
+
Path.new('/')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# Creates a new path object for upward directory traversal.
|
|
52
|
+
#
|
|
53
|
+
# @param [Integer, Array, Range] n
|
|
54
|
+
# The number of directories to go up.
|
|
55
|
+
#
|
|
56
|
+
# @param [String] separator
|
|
57
|
+
# Path separator.
|
|
58
|
+
#
|
|
59
|
+
# @return [Path]
|
|
60
|
+
# The new path object.
|
|
61
|
+
#
|
|
62
|
+
# @raise [ArgumentError]
|
|
63
|
+
# A negative number was given as the first argument.
|
|
64
|
+
#
|
|
65
|
+
# @example Generate a relative path that goes up 7 directories.
|
|
66
|
+
# Path.up(7)
|
|
67
|
+
# # => #<Ronin::Path:../../../../../../..>
|
|
68
|
+
#
|
|
69
|
+
# @example Generate multiple relative paths, going up 1 to 3 directories.
|
|
70
|
+
# Path.up(1..3)
|
|
71
|
+
# # => [#<Ronin::Path:..>, #<Ronin::Path:../..>,
|
|
72
|
+
# #<Ronin::Path:../../..>]
|
|
73
|
+
#
|
|
74
|
+
def self.up(n,separator=File::SEPARATOR)
|
|
75
|
+
if n.kind_of?(Integer)
|
|
76
|
+
if n == 0
|
|
77
|
+
return separator
|
|
78
|
+
elsif n < 0
|
|
79
|
+
raise(ArgumentError,"negative argument")
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
path = self.new('..')
|
|
83
|
+
path.separator = separator
|
|
84
|
+
|
|
85
|
+
dirs = (['..'] * (n-1))
|
|
86
|
+
|
|
87
|
+
return Path.new(path.join(*dirs))
|
|
88
|
+
elsif n.kind_of?(Enumerable)
|
|
89
|
+
return n.map { |i| self.up(i) }
|
|
90
|
+
else
|
|
91
|
+
raise(ArgumentError,"The first argument of Path.up must be either an Integer or Enumerable")
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# Joins directory names together with the path, but does not resolve
|
|
97
|
+
# the resulting path.
|
|
98
|
+
#
|
|
99
|
+
# @param [Array] names
|
|
100
|
+
# The names to join together.
|
|
101
|
+
#
|
|
102
|
+
# @return [Path]
|
|
103
|
+
# The joined path.
|
|
104
|
+
#
|
|
105
|
+
# @example
|
|
106
|
+
# Path.up(7).join('etc/passwd')
|
|
107
|
+
# # => #<Ronin::Path:../../../../../../../etc/passwd>
|
|
108
|
+
#
|
|
109
|
+
def join(*names)
|
|
110
|
+
sub_dirs = names.map { |name| name.to_s }
|
|
111
|
+
|
|
112
|
+
# filter out errant directory separators
|
|
113
|
+
sub_dirs.reject! { |dir| dir == @separator }
|
|
114
|
+
|
|
115
|
+
# join the path
|
|
116
|
+
sub_path = sub_dirs.join(@separator)
|
|
117
|
+
|
|
118
|
+
path = if self.root?
|
|
119
|
+
# prefix the root dir
|
|
120
|
+
self.to_s + sub_path
|
|
121
|
+
else
|
|
122
|
+
# join the path with the sub-path
|
|
123
|
+
[self.to_s, sub_path].join(@separator)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
return self.class.new(path)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
alias / join
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
end
|