2014-12-21 22:46:26 +00:00
|
|
|
# -*- coding:binary -*-
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
require 'rex/proto/kerberos'
|
|
|
|
require 'msf/kerberos/client'
|
|
|
|
|
|
|
|
describe Msf::Kerberos::Client::CacheCredential do
|
|
|
|
subject do
|
|
|
|
mod = ::Msf::Exploit.new
|
|
|
|
mod.extend ::Msf::Kerberos::Client
|
|
|
|
mod.send(:initialize)
|
|
|
|
mod
|
|
|
|
end
|
|
|
|
|
2014-12-22 05:47:40 +00:00
|
|
|
let(:cred_opts) do
|
|
|
|
{
|
|
|
|
:flags => 0x580000
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:time_opts) do
|
|
|
|
{
|
|
|
|
:auth_time => 123456
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:key_opts) do
|
|
|
|
{
|
|
|
|
:key_type => 25
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:principal_opts) do
|
|
|
|
{
|
|
|
|
:name_type => 3
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:cache_opts) do
|
|
|
|
{
|
|
|
|
:version => 21
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2014-12-21 22:46:26 +00:00
|
|
|
describe "#create_cache_credential" do
|
|
|
|
context "when no opts" do
|
2014-12-22 05:47:40 +00:00
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Credential" do
|
|
|
|
expect(subject.create_cache_credential). to be_a(Rex::Proto::Kerberos::CredentialCache::Credential)
|
|
|
|
end
|
2014-12-21 22:46:26 +00:00
|
|
|
|
2014-12-22 05:47:40 +00:00
|
|
|
it "initializes the Credential with default values" do
|
|
|
|
expect(subject.create_cache_credential.client.components).to eq([''])
|
2014-12-21 22:46:26 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when opts" do
|
2014-12-22 05:47:40 +00:00
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Credential" do
|
|
|
|
expect(subject.create_cache_credential(cred_opts)).to be_a(Rex::Proto::Kerberos::CredentialCache::Credential)
|
|
|
|
end
|
2014-12-21 22:46:26 +00:00
|
|
|
|
2014-12-22 05:47:40 +00:00
|
|
|
it "initializes the Credential with opts when available" do
|
|
|
|
expect(subject.create_cache_credential(cred_opts).tkt_flags).to eq(0x580000)
|
2014-12-21 22:46:26 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-12-22 05:47:40 +00:00
|
|
|
describe "#create_cache_times" do
|
|
|
|
context "when no opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Time" do
|
|
|
|
expect(subject.create_cache_times).to be_a(Rex::Proto::Kerberos::CredentialCache::Time)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the Time with default values" do
|
|
|
|
expect(subject.create_cache_times.auth_time).to eq(0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Time" do
|
|
|
|
expect(subject.create_cache_times(time_opts)).to be_a(Rex::Proto::Kerberos::CredentialCache::Time)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the Time with opts when available" do
|
|
|
|
expect(subject.create_cache_times(time_opts).auth_time).to eq(123456)
|
|
|
|
end
|
|
|
|
end
|
2014-12-21 22:46:26 +00:00
|
|
|
end
|
|
|
|
|
2014-12-22 05:47:40 +00:00
|
|
|
describe "#create_cache_key_block" do
|
|
|
|
context "when no opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::KeyBlock" do
|
|
|
|
expect(subject.create_cache_key_block).to be_a(Rex::Proto::Kerberos::CredentialCache::KeyBlock)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the KeyBlock with default values" do
|
|
|
|
expect(subject.create_cache_key_block.key_type).to eq(23)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::KeyBlock" do
|
|
|
|
expect(subject.create_cache_key_block(key_opts)).to be_a(Rex::Proto::Kerberos::CredentialCache::KeyBlock)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the KeyBlock with opts when available" do
|
|
|
|
expect(subject.create_cache_key_block(key_opts).key_type).to eq(25)
|
|
|
|
end
|
|
|
|
end
|
2014-12-21 22:46:26 +00:00
|
|
|
end
|
|
|
|
|
2014-12-22 05:47:40 +00:00
|
|
|
describe "#create_cache_principal" do
|
|
|
|
context "when no opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Principal" do
|
|
|
|
expect(subject.create_cache_principal).to be_a(Rex::Proto::Kerberos::CredentialCache::Principal)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the Principal with default values" do
|
|
|
|
expect(subject.create_cache_principal.name_type).to eq(0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Principal" do
|
|
|
|
expect(subject.create_cache_principal(principal_opts)).to be_a(Rex::Proto::Kerberos::CredentialCache::Principal)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the Principal with opts when available" do
|
|
|
|
expect(subject.create_cache_principal(principal_opts).name_type).to eq(3)
|
|
|
|
end
|
|
|
|
end
|
2014-12-21 22:46:26 +00:00
|
|
|
end
|
2014-12-22 05:47:40 +00:00
|
|
|
|
2014-12-21 22:46:26 +00:00
|
|
|
describe "#create_cache" do
|
2014-12-22 05:47:40 +00:00
|
|
|
context "when no opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Cache" do
|
|
|
|
expect(subject.create_cache).to be_a(Rex::Proto::Kerberos::CredentialCache::Cache)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the Cache with default values" do
|
|
|
|
expect(subject.create_cache.version).to eq(Rex::Proto::Kerberos::CredentialCache::VERSION)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when opts" do
|
|
|
|
it "creates a Rex::Proto::Kerberos::CredentialCache::Cache" do
|
|
|
|
expect(subject.create_cache(cache_opts)).to be_a(Rex::Proto::Kerberos::CredentialCache::Cache)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "initializes the Cache with opts when available" do
|
|
|
|
expect(subject.create_cache(cache_opts).version).to eq(21)
|
|
|
|
end
|
|
|
|
end
|
2014-12-21 22:46:26 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|