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.
Files changed (127) hide show
  1. data/.document +4 -0
  2. data/.rspec +1 -0
  3. data/.yardopts +1 -0
  4. data/COPYING.txt +504 -0
  5. data/ChangeLog.md +4 -0
  6. data/Gemfile +23 -0
  7. data/README.md +98 -0
  8. data/Rakefile +29 -0
  9. data/gemspec.yml +20 -0
  10. data/lib/ronin/extensions.rb +28 -0
  11. data/lib/ronin/extensions/file.rb +63 -0
  12. data/lib/ronin/extensions/ip_addr.rb +220 -0
  13. data/lib/ronin/extensions/kernel.rb +45 -0
  14. data/lib/ronin/extensions/meta.rb +22 -0
  15. data/lib/ronin/extensions/meta/object.rb +24 -0
  16. data/lib/ronin/extensions/string.rb +200 -0
  17. data/lib/ronin/formatting.rb +26 -0
  18. data/lib/ronin/formatting/binary.rb +22 -0
  19. data/lib/ronin/formatting/digest.rb +22 -0
  20. data/lib/ronin/formatting/extensions.rb +25 -0
  21. data/lib/ronin/formatting/extensions/binary.rb +24 -0
  22. data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
  23. data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
  24. data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
  25. data/lib/ronin/formatting/extensions/digest.rb +23 -0
  26. data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
  27. data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
  28. data/lib/ronin/formatting/extensions/http.rb +23 -0
  29. data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
  30. data/lib/ronin/formatting/extensions/http/string.rb +102 -0
  31. data/lib/ronin/formatting/extensions/text.rb +23 -0
  32. data/lib/ronin/formatting/extensions/text/array.rb +125 -0
  33. data/lib/ronin/formatting/extensions/text/string.rb +206 -0
  34. data/lib/ronin/formatting/http.rb +22 -0
  35. data/lib/ronin/formatting/text.rb +22 -0
  36. data/lib/ronin/network.rb +29 -0
  37. data/lib/ronin/network/esmtp.rb +22 -0
  38. data/lib/ronin/network/extensions.rb +29 -0
  39. data/lib/ronin/network/extensions/esmtp.rb +22 -0
  40. data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
  41. data/lib/ronin/network/extensions/http.rb +22 -0
  42. data/lib/ronin/network/extensions/http/net.rb +661 -0
  43. data/lib/ronin/network/extensions/imap.rb +22 -0
  44. data/lib/ronin/network/extensions/imap/net.rb +124 -0
  45. data/lib/ronin/network/extensions/pop3.rb +22 -0
  46. data/lib/ronin/network/extensions/pop3/net.rb +92 -0
  47. data/lib/ronin/network/extensions/smtp.rb +22 -0
  48. data/lib/ronin/network/extensions/smtp/net.rb +110 -0
  49. data/lib/ronin/network/extensions/ssl.rb +22 -0
  50. data/lib/ronin/network/extensions/ssl/net.rb +147 -0
  51. data/lib/ronin/network/extensions/tcp.rb +22 -0
  52. data/lib/ronin/network/extensions/tcp/net.rb +304 -0
  53. data/lib/ronin/network/extensions/telnet.rb +22 -0
  54. data/lib/ronin/network/extensions/telnet/net.rb +156 -0
  55. data/lib/ronin/network/extensions/udp.rb +22 -0
  56. data/lib/ronin/network/extensions/udp/net.rb +226 -0
  57. data/lib/ronin/network/http.rb +24 -0
  58. data/lib/ronin/network/http/exceptions.rb +22 -0
  59. data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
  60. data/lib/ronin/network/http/http.rb +290 -0
  61. data/lib/ronin/network/http/proxy.rb +307 -0
  62. data/lib/ronin/network/imap.rb +49 -0
  63. data/lib/ronin/network/network.rb +41 -0
  64. data/lib/ronin/network/pop3.rb +49 -0
  65. data/lib/ronin/network/smtp.rb +24 -0
  66. data/lib/ronin/network/smtp/email.rb +143 -0
  67. data/lib/ronin/network/smtp/smtp.rb +68 -0
  68. data/lib/ronin/network/ssl.rb +47 -0
  69. data/lib/ronin/network/tcp.rb +22 -0
  70. data/lib/ronin/network/telnet.rb +109 -0
  71. data/lib/ronin/network/udp.rb +22 -0
  72. data/lib/ronin/path.rb +132 -0
  73. data/lib/ronin/support.rb +28 -0
  74. data/lib/ronin/support/inflector.rb +40 -0
  75. data/lib/ronin/support/version.rb +27 -0
  76. data/lib/ronin/templates.rb +23 -0
  77. data/lib/ronin/templates/erb.rb +75 -0
  78. data/lib/ronin/templates/template.rb +161 -0
  79. data/ronin-support.gemspec +10 -0
  80. data/spec/extensions/file_spec.rb +24 -0
  81. data/spec/extensions/ip_addr_spec.rb +171 -0
  82. data/spec/extensions/kernel_spec.rb +30 -0
  83. data/spec/extensions/string_spec.rb +177 -0
  84. data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
  85. data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
  86. data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
  87. data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
  88. data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
  89. data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
  90. data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
  91. data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
  92. data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
  93. data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
  94. data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
  95. data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
  96. data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
  97. data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
  98. data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
  99. data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
  100. data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
  101. data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
  102. data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
  103. data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
  104. data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
  105. data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
  106. data/spec/formatting/binary/integer_spec.rb +140 -0
  107. data/spec/formatting/binary/string_spec.rb +306 -0
  108. data/spec/formatting/digest/string_spec.rb +82 -0
  109. data/spec/formatting/http/integer_spec.rb +42 -0
  110. data/spec/formatting/http/string_spec.rb +76 -0
  111. data/spec/formatting/text/array_spec.rb +105 -0
  112. data/spec/formatting/text/string_spec.rb +180 -0
  113. data/spec/network/http/http_spec.rb +280 -0
  114. data/spec/network/http/proxy_spec.rb +150 -0
  115. data/spec/network/network_spec.rb +8 -0
  116. data/spec/network/ssl_spec.rb +14 -0
  117. data/spec/path_spec.rb +84 -0
  118. data/spec/spec_helper.rb +4 -0
  119. data/spec/support_spec.rb +8 -0
  120. data/spec/templates/classes/example_erb.rb +11 -0
  121. data/spec/templates/classes/example_template.rb +35 -0
  122. data/spec/templates/erb_spec.rb +21 -0
  123. data/spec/templates/helpers/data.rb +9 -0
  124. data/spec/templates/helpers/data/includes/_relative.erb +1 -0
  125. data/spec/templates/helpers/data/templates/example.erb +1 -0
  126. data/spec/templates/template_spec.rb +54 -0
  127. metadata +286 -0
@@ -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/imap/net'
@@ -0,0 +1,124 @@
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/imap'
23
+ require 'ronin/network/ssl'
24
+
25
+ require 'net/imap'
26
+
27
+ module Net
28
+ #
29
+ # Creates a connection to the IMAP server.
30
+ #
31
+ # @param [String] host
32
+ # The host to connect to.
33
+ #
34
+ # @param [Hash] options
35
+ # Additional options.
36
+ #
37
+ # @option options [Integer] :port (IMAP.default_port)
38
+ # The port the IMAP server is running on.
39
+ #
40
+ # @option options [String] :certs
41
+ # The path to the file containing CA certs of the server.
42
+ #
43
+ # @option options [Symbol] :auth
44
+ # The type of authentication to perform when connecting to the server.
45
+ # May be either `:login` or `:cram_md5`.
46
+ #
47
+ # @option options [String] :user
48
+ # The user to authenticate as when connecting to the server.
49
+ #
50
+ # @option options [String] :password
51
+ # The password to authenticate with when connecting to the server.
52
+ #
53
+ # @yield [session]
54
+ # If a block is given, it will be passed the newly created IMAP
55
+ # session.
56
+ #
57
+ # @yieldparam [Net::IMAP] session
58
+ # The newly created IMAP session object.
59
+ #
60
+ # @return [Net::IMAP]
61
+ # The newly created IMAP session object.
62
+ #
63
+ def Net.imap_connect(host,options={})
64
+ host = host.to_s
65
+ port = (options[:port] || Ronin::Network::IMAP.default_port)
66
+ certs = options[:certs]
67
+ auth = options[:auth]
68
+ user = options[:user]
69
+ passwd = options[:password]
70
+
71
+ if options[:ssl]
72
+ ssl = true
73
+ ssl_certs = options[:ssl][:certs]
74
+ ssl_verify = Ronin::Network::SSL.verify(options[:ssl][:verify])
75
+ else
76
+ ssl = false
77
+ ssl_verify = false
78
+ end
79
+
80
+ session = Net::IMAP.new(host,port,ssl,ssl_certs,ssl_verify)
81
+
82
+ if user
83
+ if auth == :cram_md5
84
+ session.authenticate('CRAM-MD5',user,passwd)
85
+ else
86
+ session.authenticate('LOGIN',user,passwd)
87
+ end
88
+ end
89
+
90
+ yield session if block_given?
91
+ return session
92
+ end
93
+
94
+ #
95
+ # Starts an IMAP session with the IMAP server.
96
+ #
97
+ # @param [String] host
98
+ # The host to connect to.
99
+ #
100
+ # @param [Hash] options
101
+ # Additional options.
102
+ #
103
+ # @yield [session]
104
+ # If a block is given, it will be passed the newly created IMAP
105
+ # session. After the block has returned, the session will be closed.
106
+ #
107
+ # @yieldparam [Net::IMAP] session
108
+ # The newly created IMAP session object.
109
+ #
110
+ # @return [nil]
111
+ #
112
+ # @see Net.imap_connect
113
+ #
114
+ def Net.imap_session(host,options={})
115
+ session = Net.imap_connect(host,options)
116
+
117
+ yield session if block_given?
118
+
119
+ session.logout if options[:user]
120
+ session.close
121
+ session.disconnect
122
+ return nil
123
+ end
124
+ 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/pop3/net'
@@ -0,0 +1,92 @@
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/pop3'
23
+
24
+ require 'net/pop'
25
+
26
+ module Net
27
+ #
28
+ # Creates a connection to the POP3 server.
29
+ #
30
+ # @param [String] host
31
+ # The host to connect to.
32
+ #
33
+ # @param [Hash] options
34
+ # Additional options.
35
+ #
36
+ # @option options [Integer] :port (Ronin::Network::POP3.default_port)
37
+ # The port the POP3 server is running on.
38
+ #
39
+ # @option options [String] :user
40
+ # The user to authenticate with when connecting to the POP3 server.
41
+ #
42
+ # @option options [String] :password
43
+ # The password to authenticate with when connecting to the POP3 server.
44
+ #
45
+ # @yield [session]
46
+ # If a block is given, it will be passed the newly created POP3 session.
47
+ #
48
+ # @yieldparam [Net::POP3] session
49
+ # The newly created POP3 session.
50
+ #
51
+ # @return [Net::POP3]
52
+ # The newly created POP3 session.
53
+ #
54
+ def Net.pop3_connect(host,options={})
55
+ host = host.to_s
56
+ port = (options[:port] || Ronin::Network::POP3.default_port)
57
+ user = options[:user]
58
+ password = options[:password]
59
+
60
+ session = Net::POP3.start(host,port,user,password)
61
+
62
+ yield session if block_given?
63
+ return session
64
+ end
65
+
66
+ #
67
+ # Starts a session with the POP3 server.
68
+ #
69
+ # @param [String] host
70
+ # The host to connect to.
71
+ #
72
+ # @param [Hash] options
73
+ # Additional options.
74
+ #
75
+ # @yield [session]
76
+ # If a block is given, it will be passed the newly created POP3 session.
77
+ # After the block has returned, the session will be closed.
78
+ #
79
+ # @yieldparam [Net::POP3] session
80
+ # The newly created POP3 session.
81
+ #
82
+ # @return [nil]
83
+ #
84
+ def Net.pop3_session(host,options={})
85
+ session = Net.pop3_connect(host,options)
86
+
87
+ yield session if block_given?
88
+
89
+ session.finish
90
+ return nil
91
+ end
92
+ 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/smtp/net'
@@ -0,0 +1,110 @@
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
+ require 'net/smtp'
25
+
26
+ module Net
27
+ #
28
+ # @see Ronin::Network::SMTP.message
29
+ #
30
+ def Net.smtp_message(options={},&block)
31
+ Ronin::Network::SMTP.message(options,&block)
32
+ end
33
+
34
+ #
35
+ # Creates a connection to the SMTP server.
36
+ #
37
+ # @param [String] host
38
+ # The host to connect to.
39
+ #
40
+ # @param [Hash] options
41
+ # Additional options.
42
+ #
43
+ # @option options [Integer] :port (Ronin::Network::SMTP.default_port)
44
+ # The port to connect to.
45
+ #
46
+ # @option options [String] :helo
47
+ # The HELO domain.
48
+ #
49
+ # @option options [Symbol] :auth
50
+ # The type of authentication to use. Can be either `:login`, `:plain`,
51
+ # or `:cram_md5`.
52
+ #
53
+ # @option options [String] :user
54
+ # The user-name to authenticate with.
55
+ #
56
+ # @option options [String] :password
57
+ # The password to authenticate with.
58
+ #
59
+ # @yield [session]
60
+ # If a block is given, it will be passed an SMTP session object.
61
+ #
62
+ # @yieldparam [Net::SMTP] session
63
+ # The SMTP session.
64
+ #
65
+ # @return [Net::SMTP]
66
+ # The SMTP session.
67
+ #
68
+ def Net.smtp_connect(host,options={})
69
+ host = host.to_s
70
+ port = (options[:port] || Ronin::Network::SMTP.default_port)
71
+
72
+ helo = options[:helo]
73
+
74
+ auth = options[:auth]
75
+ user = options[:user]
76
+ password = options[:password]
77
+
78
+ session = Net::SMTP.start(host,port,helo,user,password,auth)
79
+
80
+ yield session if block_given?
81
+ return session
82
+ end
83
+
84
+ #
85
+ # Starts a session with the SMTP server.
86
+ #
87
+ # @param [String] host
88
+ # The host to connect to.
89
+ #
90
+ # @param [Hash] options
91
+ # Additional options.
92
+ #
93
+ # @yield [session]
94
+ # If a block is given, it will be passed an SMTP session object.
95
+ # After the block has returned, the session will be closed.
96
+ #
97
+ # @yieldparam [Net::SMTP] session
98
+ # The SMTP session.
99
+ #
100
+ # @see Net.smtp_connect
101
+ #
102
+ def Net.smtp_session(host,options={})
103
+ session = Net.smtp_connect(host,options)
104
+
105
+ yield session if block_given?
106
+
107
+ session.finish
108
+ return nil
109
+ end
110
+ 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/ssl/net'
@@ -0,0 +1,147 @@
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/net'
23
+ require 'ronin/network/ssl'
24
+
25
+ begin
26
+ require 'openssl'
27
+ rescue ::LoadError
28
+ end
29
+
30
+ module Net
31
+ #
32
+ # Establishes a SSL connection.
33
+ #
34
+ # @param [String] host
35
+ # The host to connect to.
36
+ #
37
+ # @param [Integer] port
38
+ # The port to connect to.
39
+ #
40
+ # @param [Hash] options
41
+ # Additional options.
42
+ #
43
+ # @option options [String] :local_host
44
+ # The local host to bind to.
45
+ #
46
+ # @option options [Integer] :local_port
47
+ # The local port to bind to.
48
+ #
49
+ # @option options [Symbol] :verify
50
+ # Specifies whether to verify the SSL certificate.
51
+ #
52
+ # @option options [String] :cert
53
+ # The path to the SSL certificate.
54
+ #
55
+ # @option options [String] :key
56
+ # The path to the SSL key.
57
+ #
58
+ # @yield [ssl_socket]
59
+ # The given block will be passed the new SSL Socket.
60
+ #
61
+ # @yieldparam [OpenSSL::SSL::SSLSocket] ssl_socket
62
+ # The new SSL Socket.
63
+ #
64
+ # @return [OpenSSL::SSL::SSLSocket]
65
+ # the new SSL Socket.
66
+ #
67
+ # @example
68
+ # socket = Net.ssl_connect('twitter.com',443)
69
+ #
70
+ def Net.ssl_connect(host,port,options={})
71
+ local_host = options[:local_host]
72
+ local_port = options[:local_port]
73
+
74
+ socket = Net.tcp_connect(host,port,local_host,local_port)
75
+
76
+ ssl_context = OpenSSL::SSL::SSLContext.new()
77
+ ssl_context.verify_mode = Ronin::Network::SSL.verify(options[:verify])
78
+
79
+ if options[:cert]
80
+ cert_file = File.new(options[:cert])
81
+ ssl_context.cert = OpenSSL::X509::Certificate.new(cert_file)
82
+ end
83
+
84
+ if options[:key]
85
+ key_file = File.new(options[:key])
86
+ ssl_context.key = OpenSSL::PKey::RSA.new(key_file)
87
+ end
88
+
89
+ ssl_socket = OpenSSL::SSL::SSLSocket.new(socket,ssl_context)
90
+ ssl_socket.sync_close = true
91
+ ssl_socket.connect
92
+
93
+ yield ssl_socket if block_given?
94
+ return ssl_socket
95
+ end
96
+
97
+ #
98
+ # Creates a new temporary SSL connection.
99
+ #
100
+ # @param [String] host
101
+ # The host to connect to.
102
+ #
103
+ # @param [Integer] port
104
+ # The port to connect to.
105
+ #
106
+ # @param [Hash] options
107
+ # Additional options.
108
+ #
109
+ # @option options [String] :local_host
110
+ # The local host to bind to.
111
+ #
112
+ # @option options [Integer] :local_port
113
+ # The local port to bind to.
114
+ #
115
+ # @option options [Symbol] :verify
116
+ # Specifies whether to verify the SSL certificate.
117
+ #
118
+ # @option options [String] :cert
119
+ # The path to the SSL certificate.
120
+ #
121
+ # @option options [String] :key
122
+ # The path to the SSL key.
123
+ #
124
+ # @yield [ssl_socket]
125
+ # The given block will be passed the temporary SSL Socket.
126
+ #
127
+ # @yieldparam [OpenSSL::SSL::SSLSocket] ssl_socket
128
+ # The temporary SSL Socket.
129
+ #
130
+ # @return [nil]
131
+ #
132
+ # @example
133
+ # Net.ssl_session('twitter.com',443) do |sock|
134
+ # sock.write("GET /\n\n")
135
+ #
136
+ # sock.each_line { |line| puts line }
137
+ # end
138
+ #
139
+ def Net.ssl_session(host,port)
140
+ ssl_socket = Net.ssl_connect(host,port)
141
+
142
+ yield ssl_socket if block_given?
143
+
144
+ ssl_socket.close
145
+ return nil
146
+ end
147
+ end