ronin-support 0.3.0 → 0.4.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/ChangeLog.md +77 -7
  2. data/README.md +19 -3
  3. data/gemspec.yml +2 -2
  4. data/lib/ronin/extensions/regexp.rb +50 -2
  5. data/lib/ronin/extensions/string.rb +1 -0
  6. data/lib/ronin/formatting.rb +1 -0
  7. data/lib/ronin/formatting/extensions.rb +1 -0
  8. data/lib/ronin/formatting/extensions/binary/string.rb +56 -5
  9. data/lib/ronin/formatting/extensions/html/string.rb +6 -7
  10. data/lib/ronin/formatting/extensions/sql/string.rb +34 -0
  11. data/lib/ronin/formatting/extensions/text/string.rb +0 -180
  12. data/lib/ronin/fuzzing.rb +21 -0
  13. data/lib/ronin/fuzzing/extensions.rb +20 -0
  14. data/lib/ronin/fuzzing/extensions/string.rb +380 -0
  15. data/lib/ronin/fuzzing/fuzzing.rb +191 -0
  16. data/lib/ronin/network/esmtp.rb +94 -1
  17. data/lib/ronin/network/extensions/esmtp/net.rb +2 -82
  18. data/lib/ronin/network/extensions/http/net.rb +1 -736
  19. data/lib/ronin/network/extensions/imap/net.rb +1 -103
  20. data/lib/ronin/network/extensions/pop3/net.rb +1 -71
  21. data/lib/ronin/network/extensions/smtp/net.rb +2 -157
  22. data/lib/ronin/network/extensions/ssl/net.rb +1 -132
  23. data/lib/ronin/network/extensions/tcp/net.rb +2 -296
  24. data/lib/ronin/network/extensions/telnet/net.rb +1 -135
  25. data/lib/ronin/network/extensions/udp/net.rb +2 -214
  26. data/lib/ronin/network/http/http.rb +750 -5
  27. data/lib/ronin/network/imap.rb +105 -2
  28. data/lib/ronin/network/mixins.rb +1 -1
  29. data/lib/ronin/network/mixins/esmtp.rb +49 -52
  30. data/lib/ronin/network/mixins/http.rb +49 -53
  31. data/lib/ronin/network/mixins/imap.rb +47 -44
  32. data/lib/ronin/network/mixins/mixin.rb +58 -0
  33. data/lib/ronin/network/mixins/pop3.rb +44 -38
  34. data/lib/ronin/network/mixins/smtp.rb +49 -51
  35. data/lib/ronin/network/mixins/tcp.rb +56 -69
  36. data/lib/ronin/network/mixins/telnet.rb +57 -50
  37. data/lib/ronin/network/mixins/udp.rb +48 -52
  38. data/lib/ronin/network/network.rb +1 -0
  39. data/lib/ronin/network/pop3.rb +72 -2
  40. data/lib/ronin/network/smtp/email.rb +1 -0
  41. data/lib/ronin/network/smtp/smtp.rb +159 -3
  42. data/lib/ronin/network/ssl.rb +131 -2
  43. data/lib/ronin/network/tcp.rb +306 -1
  44. data/lib/ronin/network/telnet.rb +136 -2
  45. data/lib/ronin/network/udp.rb +229 -1
  46. data/lib/ronin/support.rb +2 -3
  47. data/lib/ronin/support/support.rb +38 -0
  48. data/lib/ronin/support/version.rb +1 -1
  49. data/lib/ronin/templates/erb.rb +2 -1
  50. data/lib/ronin/ui/output/helpers.rb +35 -1
  51. data/lib/ronin/ui/shell.rb +12 -2
  52. data/lib/ronin/wordlist.rb +157 -0
  53. data/spec/extensions/regexp_spec.rb +38 -0
  54. data/spec/formatting/html/string_spec.rb +1 -1
  55. data/spec/formatting/sql/string_spec.rb +23 -3
  56. data/spec/formatting/text/string_spec.rb +0 -110
  57. data/spec/fuzzing/string_spec.rb +158 -0
  58. data/spec/wordlist_spec.rb +65 -0
  59. metadata +35 -27
@@ -17,302 +17,8 @@
17
17
  # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
- require 'socket'
20
+ require 'ronin/network/tcp'
21
21
 
22
22
  module Net
23
- #
24
- # Creates a new TCPSocket object connected to a given host and port.
25
- #
26
- # @param [String] host
27
- # The host to connect to.
28
- #
29
- # @param [Integer] port
30
- # The port to connect to.
31
- #
32
- # @param [String] local_host (nil)
33
- # The local host to bind to.
34
- #
35
- # @param [Integer] local_port (nil)
36
- # The local port to bind to.
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
- # Net.tcp_connect('www.hackety.org',80) # => TCPSocket
49
- #
50
- # @example
51
- # Net.tcp_connect('www.wired.com',80) do |sock|
52
- # sock.write("GET /\n\n")
53
- # puts sock.readlines
54
- # sock.close
55
- # end
56
- #
57
- # @api public
58
- #
59
- def Net.tcp_connect(host,port,local_host=nil,local_port=nil)
60
- host = host.to_s
61
- local_host = if local_host
62
- local_host.to_s
63
- end
64
-
65
- sock = TCPSocket.new(host,port,local_host,local_port)
66
-
67
- yield sock if block_given?
68
- return sock
69
- end
70
-
71
- #
72
- # Creates a new TCPSocket object, connected to a given host and port.
73
- # The given data will then be written to the newly created TCPSocket.
74
- #
75
- # @param [String] data
76
- # The data to send through the connection.
77
- #
78
- # @param [String] host
79
- # The host to connect to.
80
- #
81
- # @param [Integer] port
82
- # The port to connect to.
83
- #
84
- # @param [String] local_host (nil)
85
- # The local host to bind to.
86
- #
87
- # @param [Integer] local_port (nil)
88
- # The local port to bind to.
89
- #
90
- # @yield [socket]
91
- # If a block is given, it will be passed the newly created socket.
92
- #
93
- # @yieldparam [TCPsocket] socket
94
- # The newly created TCPSocket object.
95
- #
96
- # @api public
97
- #
98
- def Net.tcp_connect_and_send(data,host,port,local_host=nil,local_port=nil)
99
- sock = Net.tcp_connect(host,port,local_host,local_port)
100
- sock.write(data)
101
-
102
- yield sock if block_given?
103
- return sock
104
- end
105
-
106
- #
107
- # Creates a new temporary TCPSocket object, connected to the given host
108
- # and port.
109
- #
110
- # @param [String] host
111
- # The host to connect to.
112
- #
113
- # @param [Integer] port
114
- # The port to connect to.
115
- #
116
- # @param [String] local_host (nil)
117
- # The local host to bind to.
118
- #
119
- # @param [Integer] local_port (nil)
120
- # The local port to bind to.
121
- #
122
- # @yield [socket]
123
- # If a block is given, it will be passed the newly created socket.
124
- # After the block has returned, the socket will then be closed.
125
- #
126
- # @yieldparam [TCPsocket] socket
127
- # The newly created TCPSocket object.
128
- #
129
- # @return [nil]
130
- #
131
- # @api public
132
- #
133
- def Net.tcp_session(host,port,local_host=nil,local_port=nil)
134
- sock = Net.tcp_connect(host,port,local_host,local_port)
135
-
136
- yield sock if block_given?
137
-
138
- sock.close
139
- return nil
140
- end
141
-
142
- #
143
- # Reads the banner from the service running on the given host and port.
144
- #
145
- # @param [String] host
146
- # The host to connect to.
147
- #
148
- # @param [Integer] port
149
- # The port to connect to.
150
- #
151
- # @param [String] local_host (nil)
152
- # The local host to bind to.
153
- #
154
- # @param [Integer] local_port (nil)
155
- # The local port to bind to.
156
- #
157
- # @yield [banner]
158
- # If a block is given, it will be passed the grabbed banner.
159
- #
160
- # @yieldparam [String] banner
161
- # The grabbed banner.
162
- #
163
- # @return [String]
164
- # The grabbed banner.
165
- #
166
- # @example
167
- # Net.tcp_banner('pop.gmail.com',25)
168
- # # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
169
- #
170
- # @api public
171
- #
172
- def Net.tcp_banner(host,port,local_host=nil,local_port=nil)
173
- banner = nil
174
-
175
- Net.tcp_session(host,port,local_host,local_port) do |sock|
176
- banner = sock.readline.strip
177
- end
178
-
179
- yield banner if block_given?
180
- return banner
181
- end
182
-
183
- #
184
- # Connects to a specified host and port, sends the given data and then
185
- # closes the connection.
186
- #
187
- # @param [String] data
188
- # The data to send through the connection.
189
- #
190
- # @param [String] host
191
- # The host to connect to.
192
- #
193
- # @param [Integer] port
194
- # The port to connect to.
195
- #
196
- # @param [String] local_host (nil)
197
- # The local host to bind to.
198
- #
199
- # @param [Integer] local_port (nil)
200
- # The local port to bind to.
201
- #
202
- # @return [true]
203
- # The data was successfully sent.
204
- #
205
- # @example
206
- # buffer = "GET /" + ('A' * 4096) + "\n\r"
207
- # Net.tcp_send(buffer,'victim.com',80)
208
- # # => true
209
- #
210
- # @api public
211
- #
212
- def Net.tcp_send(data,host,port,local_host=nil,local_port=nil)
213
- Net.tcp_session(host,port,local_host,local_port) do |sock|
214
- sock.write(data)
215
- end
216
-
217
- return true
218
- end
219
-
220
- #
221
- # Creates a new TCPServer listening on a given host and port.
222
- #
223
- # @param [Integer] port
224
- # The local port to listen on.
225
- #
226
- # @param [String] host ('0.0.0.0')
227
- # The host to bind to.
228
- #
229
- # @return [TCPServer]
230
- # The new TCP server.
231
- #
232
- # @example
233
- # Net.tcp_server(1337)
234
- #
235
- # @api public
236
- #
237
- def Net.tcp_server(port,host='0.0.0.0')
238
- host = host.to_s
239
-
240
- server = TCPServer.new(host,port)
241
- server.listen(3)
242
-
243
- yield server if block_given?
244
- return server
245
- end
246
-
247
- #
248
- # Creates a new temporary TCPServer listening on a host and port.
249
- #
250
- # @param [Integer] port
251
- # The local port to bind to.
252
- #
253
- # @param [String] host ('0.0.0.0')
254
- # The host to bind to.
255
- #
256
- # @yield [server]
257
- # The block which will be called after the server has been created.
258
- # After the block has finished, the server will be closed.
259
- #
260
- # @yieldparam [TCPServer] server
261
- # The newly created TCP server.
262
- #
263
- # @return [nil]
264
- #
265
- # @example
266
- # Net.tcp_server_session(1337) do |server|
267
- # client1 = server.accept
268
- # client2 = server.accept
269
- #
270
- # client2.write(server.read_line)
271
- #
272
- # client1.close
273
- # client2.close
274
- # end
275
- #
276
- # @api public
277
- #
278
- def Net.tcp_server_session(port,host='0.0.0.0',&block)
279
- server = Net.tcp_server(port,host,&block)
280
- server.close()
281
- return nil
282
- end
283
-
284
- #
285
- # Creates a new TCPServer listening on a given host and port,
286
- # accepts only one client and then stops listening.
287
- #
288
- # @param [Integer] port
289
- # After the block has finished, the client and the server will be
290
- # closed.
291
- #
292
- # @yieldparam [TCPSocket] client
293
- # The newly connected client.
294
- #
295
- # @return [nil]
296
- #
297
- # @example
298
- # Net.tcp_single_server(1337) do |client|
299
- # client.puts 'lol'
300
- # end
301
- #
302
- # @api public
303
- #
304
- def Net.tcp_single_server(port,host='0.0.0.0')
305
- host = host.to_s
306
-
307
- server = TCPServer.new(host,port)
308
- server.listen(1)
309
-
310
- client = server.accept
311
-
312
- yield client if block_given?
313
-
314
- client.close
315
- server.close
316
- return nil
317
- end
23
+ extend Ronin::Network::TCP
318
24
  end
@@ -19,140 +19,6 @@
19
19
 
20
20
  require 'ronin/network/telnet'
21
21
 
22
- require 'net/telnet'
23
-
24
22
  module Net
25
- #
26
- # Creates a new Telnet connection.
27
- #
28
- # @param [String] host
29
- # The host to connect to.
30
- #
31
- # @param [Hash] options
32
- # Additional options.
33
- #
34
- # @option options [Integer] :port (Ronin::Network::Telnet.default_port)
35
- # The port to connect to.
36
- #
37
- # @option options [Boolean] :binmode
38
- # Indicates that newline substitution shall not be performed.
39
- #
40
- # @option options [String] :output_log
41
- # The name of the file to write connection status messages and all
42
- # received traffic to.
43
- #
44
- # @option options [String] :dump_log
45
- # Similar to the `:output_log` option, but connection output is also
46
- # written in hexdump format.
47
- #
48
- # @option options [Regexp] :prompt (Ronin::Network::Telnet.default_prompt)
49
- # A regular expression matching the host command-line prompt sequence,
50
- # used to determine when a command has finished.
51
- #
52
- # @option options [Boolean] :telnet (true)
53
- # Indicates that the connection shall behave as a telnet connection.
54
- #
55
- # @option options [Boolean] :plain
56
- # Indicates that the connection shall behave as a normal TCP
57
- # connection.
58
- #
59
- # @option options [Integer] :timeout (Ronin::Network::Telnet.default_timeout)
60
- # The number of seconds to wait before timing out both the initial
61
- # attempt to connect to host, and all attempts to read data from the
62
- # host.
63
- #
64
- # @option options [Integer] :wait_time
65
- # The amount of time to wait after seeing what looks like a prompt.
66
- #
67
- # @option options [Net::Telnet, IO] :proxy (Ronin::Network::Telnet.proxy)
68
- # A proxy object to used instead of opening a direct connection to the
69
- # host.
70
- #
71
- # @option options [String] :user
72
- # The user to login as.
73
- #
74
- # @option options [String] :password
75
- # The password to login with.
76
- #
77
- # @yield [session]
78
- # If a block is given, it will be passed the newly created Telnet
79
- # session.
80
- #
81
- # @yieldparam [Net::Telnet] session
82
- # The newly created Telnet session.
83
- #
84
- # @return [Net::Telnet]
85
- # The Telnet session
86
- #
87
- # @example
88
- # Net.telnet_connect('towel.blinkenlights.nl')
89
- # # => #<Net::Telnet: ...>
90
- #
91
- # @api public
92
- #
93
- def Net.telnet_connect(host,options={})
94
- host = host.to_s
95
- telnet_options = {}
96
-
97
- telnet_options['Host'] = host
98
- telnet_options['Port'] = (options[:port] || Ronin::Network::Telnet.default_port)
99
- telnet_options['Binmode'] = options[:binmode]
100
- telnet_options['Output_log'] = options[:output_log]
101
- telnet_options['Dump_log'] = options[:dump_log]
102
- telnet_options['Prompt'] = (options[:prompt] || Ronin::Network::Telnet.default_prompt)
103
-
104
- if (options[:telnet] && !options[:plain])
105
- telnet_options['Telnetmode'] = true
106
- end
107
-
108
- telnet_options['Timeout'] = (options[:timeout] || Ronin::Network::Telnet.default_timeout)
109
- telnet_options['Waittime'] = options[:wait_time]
110
- telnet_options['Proxy'] = (options[:proxy] || Ronin::Network::Telnet.proxy)
111
-
112
- user = options[:user]
113
- passwd = options[:passwd]
114
-
115
- session = Net::Telnet.new(telnet_options)
116
- session.login(user,passwd) if user
117
-
118
- yield session if block_given?
119
- return session
120
- end
121
-
122
- #
123
- # Starts a new Telnet session.
124
- #
125
- # @param [String] host
126
- # The host to connect to.
127
- #
128
- # @param [Hash] options
129
- # Additional options.
130
- #
131
- # @yield [session]
132
- # If a block is given, it will be passed the newly created
133
- # Telnet session. After the block has returned, the Telnet session
134
- # will be closed.
135
- #
136
- # @yieldparam [Net::Telnet] session
137
- # The newly created Telnet session.
138
- #
139
- # @return [nil]
140
- #
141
- # @example
142
- # Net.telnet_session('towel.blinkenlights.nl') do |movie|
143
- # movie.each_line { |line| puts line }
144
- # end
145
- #
146
- # @see Net.telnet_session
147
- #
148
- # @api public
149
- #
150
- def Net.telnet_session(host,options={})
151
- session = Net.telnet_connect(host,options)
152
-
153
- yield session if block_given?
154
-
155
- session.close
156
- return nil
157
- end
23
+ extend Ronin::Network::Telnet
158
24
  end
@@ -17,220 +17,8 @@
17
17
  # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
- require 'socket'
20
+ require 'ronin/network/udp'
21
21
 
22
22
  module Net
23
- #
24
- # Creates a new UDPSocket object connected to a given host and port.
25
- #
26
- # @param [String] host
27
- # The host to connect to.
28
- #
29
- # @param [Integer] port
30
- # The port to connect to.
31
- #
32
- # @param [String] local_host (nil)
33
- # The local host to bind to.
34
- #
35
- # @param [Integer] local_port (nil)
36
- # The local port to bind to.
37
- #
38
- # @yield [socket]
39
- # If a block is given, it will be passed the newly created socket.
40
- #
41
- # @yieldparam [UDPsocket] socket
42
- # The newly created UDPSocket object.
43
- #
44
- # @return [UDPSocket]
45
- # The newly created UDPSocket object.
46
- #
47
- # @example
48
- # Net.udp_connect('www.hackety.org',80)
49
- # # => UDPSocket
50
- #
51
- # @example
52
- # Net.udp_connect('www.wired.com',80) do |sock|
53
- # puts sock.readlines
54
- # end
55
- #
56
- # @api public
57
- #
58
- def Net.udp_connect(host,port,local_host=nil,local_port=nil)
59
- host = host.to_s
60
- local_host = if local_host
61
- local_host.to_s
62
- end
63
-
64
- sock = UDPSocket.new(host,port,local_host,local_port)
65
-
66
- yield sock if block_given?
67
- return sock
68
- end
69
-
70
- #
71
- # Creates a new UDPSocket object, connected to a given host and port.
72
- # The given data will then be written to the newly created UDPSocket.
73
- #
74
- # @param [String] data
75
- # The data to send through the connection.
76
- #
77
- # @param [String] host
78
- # The host to connect to.
79
- #
80
- # @param [Integer] port
81
- # The port to connect to.
82
- #
83
- # @param [String] local_host (nil)
84
- # The local host to bind to.
85
- #
86
- # @param [Integer] local_port (nil)
87
- # The local port to bind to.
88
- #
89
- # @yield [socket]
90
- # If a block is given, it will be passed the newly created socket.
91
- #
92
- # @yieldparam [UDPsocket] socket
93
- # The newly created UDPSocket object.
94
- #
95
- # @return [UDPSocket]
96
- # The newly created UDPSocket object.
97
- #
98
- # @api public
99
- #
100
- def Net.udp_connect_and_send(data,host,port,local_host=nil,local_port=nil)
101
- sock = Net.udp_connect(host,port,local_host,local_port)
102
- sock.write(data)
103
-
104
- yield sock if block_given?
105
- return sock
106
- end
107
-
108
- #
109
- # Creates a new temporary UDPSocket object, connected to the given host
110
- # and port.
111
- #
112
- # @param [String] host
113
- # The host to connect to.
114
- #
115
- # @param [Integer] port
116
- # The port to connect to.
117
- #
118
- # @param [String] local_host (nil)
119
- # The local host to bind to.
120
- #
121
- # @param [Integer] local_port (nil)
122
- # The local port to bind to.
123
- #
124
- # @yield [socket]
125
- # If a block is given, it will be passed the newly created socket.
126
- # After the block has returned, the socket will then be closed.
127
- #
128
- # @yieldparam [UDPsocket] socket
129
- # The newly created UDPSocket object.
130
- #
131
- # @return [nil]
132
- #
133
- # @api public
134
- #
135
- def Net.udp_session(host,port,local_host=nil,local_port=nil)
136
- sock = Net.udp_connect(host,port,local_host,local_port)
137
-
138
- yield sock if block_given?
139
-
140
- sock.close
141
- return nil
142
- end
143
-
144
- #
145
- # Reads the banner from the service running on the given host and port.
146
- #
147
- # @param [String] host
148
- # The host to connect to.
149
- #
150
- # @param [Integer] port
151
- # The port to connect to.
152
- #
153
- # @param [String] local_host (nil)
154
- # The local host to bind to.
155
- #
156
- # @param [Integer] local_port (nil)
157
- # The local port to bind to.
158
- #
159
- # @yield [banner]
160
- # If a block is given, it will be passed the grabbed banner.
161
- #
162
- # @yieldparam [String] banner
163
- # The grabbed banner.
164
- #
165
- # @return [String]
166
- # The grabbed banner.
167
- #
168
- # @api public
169
- #
170
- def Net.udp_banner(host,port,local_host=nil,local_port=nil)
171
- banner = nil
172
-
173
- Net.udp_session(host,port,local_host,local_port) do |sock|
174
- banner = sock.readline
175
- end
176
-
177
- yield banner if block_given?
178
- return banner
179
- end
180
-
181
- #
182
- # Creates a new UDPServer listening on a given host and port.
183
- #
184
- # @param [Integer] port
185
- # The local port to listen on.
186
- #
187
- # @param [String] host ('0.0.0.0')
188
- # The host to bind to.
189
- #
190
- # @return [UDPServer]
191
- # The new UDP server.
192
- #
193
- # @example
194
- # Net.udp_server(1337)
195
- #
196
- # @api public
197
- #
198
- def Net.udp_server(port,host='0.0.0.0')
199
- host = host.to_s
200
- server = UDPServer.new(host,port)
201
-
202
- yield server if block_given?
203
- return server
204
- end
205
-
206
- #
207
- # Creates a new temporary UDPServer listening on a given host and port.
208
- #
209
- # @param [Integer] port
210
- # The local port to bind to.
211
- #
212
- # @param [String] host ('0.0.0.0')
213
- # The host to bind to.
214
- #
215
- # @yield [server]
216
- # The block which will be called after the server has been created.
217
- # After the block has finished, the server will be closed.
218
- #
219
- # @yieldparam [UDPServer] server
220
- # The newly created UDP server.
221
- #
222
- # @return [nil]
223
- #
224
- # @example
225
- # Net.udp_server_session(1337) do |server|
226
- # data, sender = server.recvfrom(1024)
227
- # end
228
- #
229
- # @api public
230
- #
231
- def Net.udp_server_session(port,host='0.0.0.0',&block)
232
- server = Net.udp_server(port,host,&block)
233
- server.close()
234
- return nil
235
- end
23
+ extend Ronin::Network::UDP
236
24
  end