104 lines
2.6 KiB
Ruby
104 lines
2.6 KiB
Ruby
load Metasploit::Framework.root.join('tools/exploit/egghunter.rb').to_path
|
|
|
|
require 'stringio'
|
|
|
|
describe Egghunter do
|
|
|
|
describe Egghunter::Driver do
|
|
|
|
subject do
|
|
Egghunter::Driver.new
|
|
end
|
|
|
|
let(:egg) {
|
|
'W00T'
|
|
}
|
|
|
|
describe '#run' do
|
|
|
|
def get_stdout(&block)
|
|
out = $stdout
|
|
$stdout = fake = StringIO.new
|
|
begin
|
|
yield
|
|
ensure
|
|
$stdout = out
|
|
end
|
|
fake.string
|
|
end
|
|
|
|
let(:default_opts) {
|
|
{ :platform => 'windows', :format => 'c', :eggtag => egg, :arch => 'x86' }
|
|
}
|
|
|
|
before(:each) do
|
|
allow(Egghunter::OptsConsole).to receive(:parse).with(any_args).and_return(options)
|
|
end
|
|
|
|
context 'when the platform is windows' do
|
|
let(:options) { default_opts }
|
|
|
|
it 'returns a windows egghunter' do
|
|
output = get_stdout { subject.run }
|
|
expect(output).to include("\\x66\\x81\\xca\\xff")
|
|
end
|
|
end
|
|
|
|
context 'when the platform is linux' do
|
|
let(:options) do
|
|
{ :platform => 'linux', :format => 'c', :eggtag => egg, :arch => 'x86' }
|
|
end
|
|
|
|
it 'returns a linux egghunter' do
|
|
output = get_stdout { subject.run }
|
|
expect(output).to include("\\xfc\\x66\\x81\\xc9\\xff")
|
|
end
|
|
end
|
|
|
|
context 'when the egg is WOOT' do
|
|
let(:options) { default_opts }
|
|
|
|
it 'includes W00T in the egghunter' do
|
|
output = get_stdout { subject.run }
|
|
expect(output).to include("\\x57\\x30\\x30\\x54")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
describe Egghunter::OptsConsole do
|
|
subject do
|
|
Egghunter::OptsConsole
|
|
end
|
|
|
|
context 'when no options are given' do
|
|
it 'raises OptionParser::MissingArgument' do
|
|
expect{subject.parse([])}.to raise_error(OptionParser::MissingArgument)
|
|
end
|
|
end
|
|
|
|
context 'when no format is specified and --list-formats isn\'t used' do
|
|
it 'raises OptionParser::MissingArgument' do
|
|
args = '-e AAAA'.split
|
|
expect{subject.parse(args)}.to raise_error(OptionParser::MissingArgument)
|
|
end
|
|
end
|
|
|
|
context 'when no egg is specified and --list-formats isn\'t used' do
|
|
it 'raises OptionParser::MissingArgument' do
|
|
args = '-f python'.split
|
|
expect{subject.parse(args)}.to raise_error(OptionParser::MissingArgument)
|
|
end
|
|
end
|
|
|
|
context 'when :depsize is a string' do
|
|
it 'raises OptionParser::InvalidOption' do
|
|
args = '-e AAAA -f c --depsize STRING'.split
|
|
expect{subject.parse(args)}.to raise_error(OptionParser::InvalidOption)
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|