ronin 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +53 -0
- data/Manifest.txt +26 -18
- data/README.txt +12 -19
- data/Rakefile +9 -9
- data/TODO.txt +5 -5
- data/lib/ronin/cacheable.rb +246 -0
- data/lib/ronin/database/database.rb +21 -3
- data/lib/ronin/database/exceptions/invalid_config.rb +1 -1
- data/lib/ronin/environment.rb +5 -2
- data/lib/ronin/extensions.rb +2 -0
- data/lib/ronin/{models.rb → extensions/array.rb} +19 -6
- data/lib/ronin/extensions/ip_addr.rb +127 -0
- data/lib/ronin/{objectify/exceptions/object_context_not_found.rb → extensions/kernel.rb} +14 -3
- data/lib/ronin/extensions/uri/query_params.rb +4 -2
- data/lib/ronin/formatting/extensions/binary/integer.rb +6 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +14 -12
- data/lib/ronin/formatting/extensions/text/string.rb +37 -19
- data/lib/ronin/has_license.rb +4 -2
- data/lib/ronin/model.rb +0 -1
- data/lib/ronin/network/extensions/http/net.rb +30 -3
- data/lib/ronin/network/extensions/telnet/net.rb +0 -18
- data/lib/ronin/network/http/exceptions/unknown_request.rb +1 -1
- data/lib/ronin/platform/exceptions/extension_not_found.rb +1 -1
- data/lib/ronin/platform/exceptions/overlay_cached.rb +1 -1
- data/lib/ronin/platform/exceptions/overlay_not_found.rb +1 -1
- data/lib/ronin/platform/extension.rb +18 -3
- data/lib/ronin/platform/extension_cache.rb +7 -1
- data/lib/ronin/platform/object_cache.rb +13 -12
- data/lib/ronin/platform/overlay.rb +14 -6
- data/lib/ronin/platform/overlay_cache.rb +11 -5
- data/lib/ronin/product.rb +20 -3
- data/lib/ronin/ronin.rb +0 -15
- data/lib/ronin/rpc/exceptions/response_missing.rb +1 -1
- data/lib/ronin/sessions/esmtp.rb +1 -10
- data/lib/ronin/{objectify.rb → sessions/exceptions.rb} +3 -3
- data/lib/ronin/{objectify/exceptions/unknown_object_context.rb → sessions/exceptions/variable_missing.rb} +4 -4
- data/lib/ronin/sessions/http.rb +3 -10
- data/lib/ronin/sessions/imap.rb +1 -10
- data/lib/ronin/sessions/pop3.rb +1 -9
- data/lib/ronin/sessions/session.rb +11 -21
- data/lib/ronin/sessions/smtp.rb +1 -10
- data/lib/ronin/sessions/tcp.rb +10 -13
- data/lib/ronin/sessions/telnet.rb +2 -17
- data/lib/ronin/sessions/udp.rb +6 -11
- data/lib/ronin/static/finders.rb +24 -0
- data/lib/ronin/ui/command_line/command_line.rb +41 -21
- data/lib/ronin/ui/command_line/commands/help.rb +7 -3
- data/lib/ronin/ui/command_line/commands/ls.rb +1 -1
- data/lib/ronin/ui/command_line/commands/rm.rb +1 -1
- data/lib/ronin/ui/command_line/exceptions/unknown_command.rb +1 -1
- data/lib/ronin/ui/diagnostics.rb +12 -5
- data/lib/ronin/ui/hexdump/extensions/file.rb +3 -1
- data/lib/ronin/ui/hexdump/hexdump.rb +1 -1
- data/lib/ronin/ui/verbose.rb +14 -0
- data/lib/ronin/version.rb +1 -1
- data/spec/cacheable_spec.rb +150 -0
- data/spec/classes/cacheable_model.rb +15 -0
- data/spec/classes/licensed_model.rb +12 -0
- data/spec/code/classes/thing.rb +13 -0
- data/spec/code/reference_spec.rb +1 -14
- data/spec/extensions/array_spec.rb +34 -0
- data/spec/extensions/ip_addr_spec.rb +44 -0
- data/spec/extensions/kernel_spec.rb +19 -0
- data/spec/extensions/uri/query_params_spec.rb +8 -0
- data/spec/formatting/binary/string_spec.rb +1 -1
- data/spec/formatting/digest/string_spec.rb +84 -0
- data/spec/formatting/http/string_spec.rb +84 -0
- data/spec/formatting/text/string_spec.rb +51 -0
- data/spec/has_license_spec.rb +29 -0
- data/spec/helpers/cacheable.rb +7 -0
- data/spec/helpers/contexts/ronin_cacheable_model.rb +13 -0
- data/spec/helpers/database.rb +5 -0
- data/spec/platform/helpers/overlays/hello/lib/init.rb +1 -0
- data/spec/platform/helpers/overlays/hello/lib/stuff/another_test.rb +6 -0
- data/spec/platform/helpers/overlays/hello/lib/stuff/test.rb +4 -0
- data/spec/platform/overlay_cache_spec.rb +1 -1
- data/spec/platform/overlay_spec.rb +28 -0
- data/spec/product_spec.rb +7 -0
- data/spec/sessions/classes/test_session.rb +11 -0
- data/spec/sessions/classes/uses_test_session.rb +10 -0
- data/spec/sessions/session_spec.rb +13 -44
- data/spec/spec_helper.rb +0 -5
- data/spec/static/{helpers → classes}/static_class.rb +0 -0
- data/spec/static/helpers/static.rb +0 -1
- data/spec/static/static_spec.rb +1 -0
- metadata +44 -35
- data/lib/ronin/objectify/exceptions.rb +0 -25
- data/lib/ronin/objectify/objectify.rb +0 -240
- data/lib/ronin/target.rb +0 -44
- data/lib/ronin/ui/command_line/param_parser.rb +0 -93
- data/spec/formatting/digest_spec.rb +0 -54
- data/spec/formatting/http_spec.rb +0 -53
- data/spec/formatting/text_spec.rb +0 -40
- data/spec/helpers.rb +0 -0
- data/spec/objectify/objectify_spec.rb +0 -31
- data/spec/target_spec.rb +0 -16
- data/spec/ui/command_line/helpers/example_command.rb +0 -21
- data/spec/ui/command_line/param_parser_spec.rb +0 -49
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'ronin/extensions/kernel'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Kernel do
|
6
|
+
it "should provide Kernel#try" do
|
7
|
+
Kernel.respond_to?('try').should == true
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "try" do
|
11
|
+
it "should return the result of the block if nothing is raised" do
|
12
|
+
try { 2 + 2 }.should == 4
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return nil if an exception is raised" do
|
16
|
+
try { 2 + 'a' }.should be_nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -35,4 +35,12 @@ describe URI::QueryParams do
|
|
35
35
|
@uri.query = 'u=3'
|
36
36
|
@uri.query_params['u'].should == '3'
|
37
37
|
end
|
38
|
+
|
39
|
+
it "should properly escape query param values" do
|
40
|
+
@uri.query_params['x'] = '1&2'
|
41
|
+
@uri.query_params['y'] = 'one=two'
|
42
|
+
@uri.query_params['z'] = '?'
|
43
|
+
|
44
|
+
@uri.to_s.should == "http://www.test.com/page.php?x=1%262&y=one%3Dtwo&z=%3F"
|
45
|
+
end
|
38
46
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'ronin/formatting/digest'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe String do
|
6
|
+
before(:all) do
|
7
|
+
@string = "test"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should provide String#md5" do
|
11
|
+
@string.respond_to?('md5').should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should provide String#sha1" do
|
15
|
+
@string.respond_to?('sha1').should == true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should provide String#sha2" do
|
19
|
+
@string.respond_to?('sha2').should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should provide String#sha256" do
|
23
|
+
@string.respond_to?('sha256').should == true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should provide String#sha512" do
|
27
|
+
@string.respond_to?('sha512').should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "md5" do
|
31
|
+
before(:all) do
|
32
|
+
@digest_plain_text = "test"
|
33
|
+
@digest_md5 = "098f6bcd4621d373cade4e832627b4f6"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return the MD5 digest of itself" do
|
37
|
+
@digest_plain_text.md5.should == @digest_md5
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "sha1" do
|
42
|
+
before(:all) do
|
43
|
+
@digest_plain_text = "test"
|
44
|
+
@digest_sha1 = "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return the SHA1 digest of itself" do
|
48
|
+
@digest_plain_text.sha1.should == @digest_sha1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "sha2" do
|
53
|
+
before(:all) do
|
54
|
+
@digest_plain_text = "test"
|
55
|
+
@digest_sha2 = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return the SHA2 digest of itself" do
|
59
|
+
@digest_plain_text.sha2.should == @digest_sha2
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "sha256" do
|
64
|
+
before(:all) do
|
65
|
+
@digest_plain_text = "test"
|
66
|
+
@digest_sha256 = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return the SHA256 digest of itself" do
|
70
|
+
@digest_plain_text.sha256.should == @digest_sha256
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "sha512" do
|
75
|
+
before(:all) do
|
76
|
+
@digest_plain_text = "test"
|
77
|
+
@digest_sha512 = "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should return the SHA512 digest of itself" do
|
81
|
+
@digest_plain_text.sha512.should == @digest_sha512
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'ronin/formatting/http'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe String do
|
6
|
+
before(:all) do
|
7
|
+
@string = "mod % 3"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should provide String#uri_encode" do
|
11
|
+
@string.respond_to?('uri_encode').should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should provide String#uri_decode" do
|
15
|
+
@string.respond_to?('uri_decode').should == true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should provide String#uri_escape" do
|
19
|
+
@string.respond_to?('uri_escape').should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should provide String#uri_unescape" do
|
23
|
+
@string.respond_to?('uri_unescape').should == true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should provide String#format_http" do
|
27
|
+
@string.respond_to?('format_http').should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "uri_encode" do
|
31
|
+
before(:all) do
|
32
|
+
@uri_unencoded = "mod % 3"
|
33
|
+
@uri_encoded = "mod%20%25%203"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should URI encode itself" do
|
37
|
+
@uri_unencoded.uri_encode.should == @uri_encoded
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "uri_decode" do
|
42
|
+
before(:all) do
|
43
|
+
@uri_unencoded = "mod % 3"
|
44
|
+
@uri_encoded = "mod%20%25%203"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should URI decode itself" do
|
48
|
+
@uri_encoded.uri_decode.should == @uri_unencoded
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "uri_escape" do
|
53
|
+
before(:all) do
|
54
|
+
@uri_unescaped = "x + y"
|
55
|
+
@uri_escaped = "x+%2B+y"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should URI escape itself" do
|
59
|
+
@uri_unescaped.uri_escape.should == @uri_escaped
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "uri_unescape" do
|
64
|
+
before(:all) do
|
65
|
+
@uri_unescaped = "x + y"
|
66
|
+
@uri_escaped = "x+%2B+y"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should URI unescape itself" do
|
70
|
+
@uri_escaped.uri_unescape.should == @uri_unescaped
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "format_http" do
|
75
|
+
before(:all) do
|
76
|
+
@uri_unencoded = "mod % 3"
|
77
|
+
@uri_http_encoded = "%6d%6f%64%20%25%20%33"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should format each byte of the String" do
|
81
|
+
@uri_unencoded.format_http.should == @uri_http_encoded
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'ronin/formatting/text'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe String do
|
6
|
+
before(:all) do
|
7
|
+
@string = "hello"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should provide String#format_chars" do
|
11
|
+
@string.respond_to?('format_chars').should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should provide String#format_bytes" do
|
15
|
+
@string.respond_to?('format_bytes').should == true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should provide String#random_case" do
|
19
|
+
@string.respond_to?('random_case').should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "format_chars" do
|
23
|
+
it "should format each character in the String" do
|
24
|
+
@string.format_chars { |c|
|
25
|
+
"_#{c}"
|
26
|
+
}.should == "_h_e_l_l_o"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "format_bytes" do
|
31
|
+
it "should format each byte in the String" do
|
32
|
+
@string.format_bytes { |b|
|
33
|
+
sprintf("%%%x",b)
|
34
|
+
}.should == "%68%65%6c%6c%6f"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "random_case" do
|
39
|
+
it "should capitalize each character when :probability is 1.0" do
|
40
|
+
new_string = @string.random_case(:probability => 1.0)
|
41
|
+
|
42
|
+
@string.upcase.should == new_string
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not capitalize any characters when :probability is 0.0" do
|
46
|
+
new_string = @string.random_case(:probability => 0.0)
|
47
|
+
|
48
|
+
@string.should == new_string
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'ronin/has_license'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'classes/licensed_model'
|
5
|
+
|
6
|
+
describe HasLicense do
|
7
|
+
before(:all) do
|
8
|
+
LicensedModel.auto_migrate!
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should have a license" do
|
12
|
+
model = LicensedModel.new(:content => 'bla')
|
13
|
+
model.license = License.gpl_2
|
14
|
+
model.save!
|
15
|
+
|
16
|
+
model.license.should == License.gpl_2
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should provide helper methods for querying licensed models" do
|
20
|
+
model = LicensedModel.new(:content => 'stuff here')
|
21
|
+
model.license = License.gpl_2
|
22
|
+
model.save!
|
23
|
+
model.reload
|
24
|
+
|
25
|
+
LicensedModel.all(
|
26
|
+
:content.like => '%stuff%'
|
27
|
+
).licensed_under(:gpl_2).first.should == model
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
$hello_overlay_loaded = true
|
@@ -53,7 +53,7 @@ describe Platform::OverlayCache do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should have extensions" do
|
56
|
-
@cache.extensions.should == ['
|
56
|
+
@cache.extensions.should == ['hello', 'random', 'test']
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should provide the paths to specific extensions" do
|
@@ -32,4 +32,32 @@ describe Platform::Overlay do
|
|
32
32
|
@overlay.description.should == %{This is a test overlay used in Ronin's specs.}
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
describe "activate!" do
|
37
|
+
before(:all) do
|
38
|
+
@overlay = Platform::Overlay.new(File.join(OVERLAY_CACHE,'hello'))
|
39
|
+
@overlay.activate!
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should load the init.rb file if present" do
|
43
|
+
$hello_overlay_loaded.should == true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should make the lib directory accessible to Kernel#require" do
|
47
|
+
require('stuff/test').should == true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "deactivate!" do
|
52
|
+
before(:all) do
|
53
|
+
@overlay = Platform::Overlay.new(File.join(OVERLAY_CACHE,'hello'))
|
54
|
+
@overlay.deactivate!
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should make the lib directory unaccessible to Kernel#require" do
|
58
|
+
lambda {
|
59
|
+
require 'stuff/another_test'
|
60
|
+
}.should raise_error(LoadError)
|
61
|
+
end
|
62
|
+
end
|
35
63
|
end
|
data/spec/product_spec.rb
CHANGED
@@ -13,4 +13,11 @@ describe Product do
|
|
13
13
|
@product.version = '0.1.0'
|
14
14
|
@product.should be_valid
|
15
15
|
end
|
16
|
+
|
17
|
+
it "should default the vendor to the name of the product" do
|
18
|
+
@product = Product.new(:name => 'Adobe', :version => '0.1.0')
|
19
|
+
@product.vendor.should == @product.name
|
20
|
+
|
21
|
+
@product.should be_valid
|
22
|
+
end
|
16
23
|
end
|
@@ -1,56 +1,25 @@
|
|
1
1
|
require 'ronin/sessions/session'
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
+
require 'sessions/classes/test_session'
|
5
|
+
require 'sessions/classes/uses_test_session'
|
4
6
|
|
5
7
|
describe Sessions::Session do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
setup_session do
|
11
|
-
parameter :var, :default => :stuff, :description => 'Test parameter'
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_one
|
15
|
-
'this_is_a_test'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class TestSessionClass
|
20
|
-
include TestSession
|
21
|
-
end
|
22
|
-
|
23
|
-
class TestSessionObject
|
24
|
-
end
|
25
|
-
|
26
|
-
@session_obj = TestSessionObject.new
|
27
|
-
@session_obj.extend TestSession
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should add self.setup_session to a Module" do
|
31
|
-
TestSession.methods.include?('setup_session').should == true
|
32
|
-
end
|
33
|
-
|
34
|
-
describe "setup_session" do
|
35
|
-
it "should add self.included and self.extended methods once setup_session is called" do
|
36
|
-
TestSession.methods.include?('included').should == true
|
37
|
-
TestSession.methods.include?('extended').should == true
|
8
|
+
describe "require_variable" do
|
9
|
+
before(:each) do
|
10
|
+
@obj = UsesTestSession.new
|
11
|
+
@obj.host = 'www.example.com'
|
38
12
|
end
|
39
13
|
|
40
|
-
it "should
|
41
|
-
|
14
|
+
it "should raise a VariableMissing exception if a variable is nil" do
|
15
|
+
lambda {
|
16
|
+
@obj.host = nil
|
17
|
+
@obj.connect
|
18
|
+
}.should raise_error(Sessions::VariableMissing)
|
42
19
|
end
|
43
20
|
|
44
|
-
it "should
|
45
|
-
@
|
21
|
+
it "should do nothing if the variable is not nil" do
|
22
|
+
@obj.connect.should == @obj.host
|
46
23
|
end
|
47
24
|
end
|
48
|
-
|
49
|
-
it "should include Parameters once included" do
|
50
|
-
TestSessionClass.include?(Parameters).should == true
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should extend Parameters once extended" do
|
54
|
-
@session_obj.kind_of?(Parameters).should == true
|
55
|
-
end
|
56
25
|
end
|