diff --git a/spec/lib/msf/core/exploit/smb/local_paths_spec.rb b/spec/lib/msf/core/exploit/smb/local_paths_spec.rb new file mode 100644 index 0000000000..1ff07b77ae --- /dev/null +++ b/spec/lib/msf/core/exploit/smb/local_paths_spec.rb @@ -0,0 +1,63 @@ +# -*- coding:binary -*- +require 'spec_helper' + +require 'msf/core' +require 'msf/core/data_store' +#require 'msf/core/exploit/smb' +#require 'msf/core/exploit/smb/local_paths' + +describe Msf::Exploit::Remote::SMB::LocalPaths do + subject do + mod = ::Msf::Module.new + mod.extend described_class + mod + end + + before(:all) do + prefix = "local_#{Rex::Text.rand_text_alpha(10)}" + # create a single random file to be used for LPATH + @lpath = prefix + # create file containing several random file names to be used for FILE_LPATHS + @indices = Array(0..(1 + rand(5))).map(&:to_s) + @file_lpaths = Tempfile.new(prefix) + + File.open(@file_lpaths, 'wb') do |f| + @indices.map do |i| + f.puts(i) + end + end + end + + describe '#setup' do + context 'when PATH and FILE_LPATHS are not set correctly' do + it 'should raise if both are set' do + subject.datastore['LPATH'] = @lpath + subject.datastore['FILE_LPATHS'] = @file_lpaths + expect{subject.setup}.to raise_error(RuntimeError, /bad-config/) + end + + it 'should raise if neither are set' do + expect{subject.setup}.to raise_error(RuntimeError, /bad-config/) + end + end + + end + + describe '#local_paths' do + context 'when LPATH and FILE_LPATHS are set correctly' do + it 'should return just one remote file if LPATH is set' do + subject.datastore['LPATH'] = @lpath + expect(subject.local_paths).to eql([@lpath]) + end + + it 'should return all files if FILE_LPATHS is set' do + subject.datastore['FILE_LPATHS'] = @file_lpaths + expect(subject.local_paths).to eql(@indices) + end + end + end + + after(:all) do + @file_lpaths.unlink + end +end diff --git a/spec/lib/msf/core/exploit/smb/remote_paths_spec.rb b/spec/lib/msf/core/exploit/smb/remote_paths_spec.rb new file mode 100644 index 0000000000..f880bee521 --- /dev/null +++ b/spec/lib/msf/core/exploit/smb/remote_paths_spec.rb @@ -0,0 +1,61 @@ +# -*- coding:binary -*- +require 'spec_helper' + +require 'msf/core' +require 'msf/core/data_store' + +describe Msf::Exploit::Remote::SMB::RemotePaths do + subject do + mod = ::Msf::Module.new + mod.extend described_class + mod + end + + before(:all) do + prefix = "remote_#{Rex::Text.rand_text_alpha(10)}" + # create a single random file to be used for RPATH + @rpath = prefix + # create file containing several random file names to be used for FILE_RPATHS + @indices = Array(0..(1 + rand(5))).map(&:to_s) + @file_rpaths = Tempfile.new(prefix) + + File.open(@file_rpaths, 'wb') do |f| + @indices.map do |i| + f.puts(i) + end + end + end + + describe '#setup' do + context 'when RPATH and FILE_RPATHS are not set correctly' do + it 'should raise if both are set' do + subject.datastore['RPATH'] = @rpath + subject.datastore['FILE_RPATHS'] = @file_rpaths + expect{subject.setup}.to raise_error(RuntimeError, /bad-config/) + end + + it 'should raise if neither are set' do + expect{subject.setup}.to raise_error(RuntimeError, /bad-config/) + end + end + + end + + describe '#remote_paths' do + context 'when RPATH and FILE_RPATHS are set correctly' do + it 'should return just one remote file if rpath is set' do + subject.datastore['RPATH'] = @rpath + expect(subject.remote_paths).to eql([@rpath]) + end + + it 'should return all files if FILE_RPATHS is set' do + subject.datastore['FILE_RPATHS'] = @file_rpaths + expect(subject.remote_paths).to eql(@indices) + end + end + end + + after(:all) do + @file_rpaths.unlink + end +end