Fix specs
parent
54243d411e
commit
06712817cf
|
@ -17,11 +17,11 @@ module BusyBox
|
||||||
# @note Msf::Post::File#file? doesnt work because test -f is not available in busybox
|
# @note Msf::Post::File#file? doesnt work because test -f is not available in busybox
|
||||||
def busy_box_file_exist?(file_path)
|
def busy_box_file_exist?(file_path)
|
||||||
contents = read_file(file_path)
|
contents = read_file(file_path)
|
||||||
if contents and contents.length > 0
|
if contents.nil? || contents.empty?
|
||||||
return true
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
false
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
# Checks if the directory is writable in the target
|
# Checks if the directory is writable in the target
|
||||||
|
@ -31,7 +31,7 @@ module BusyBox
|
||||||
def busy_box_is_writable_dir?(dir_path)
|
def busy_box_is_writable_dir?(dir_path)
|
||||||
res = false
|
res = false
|
||||||
rand_str = Rex::Text.rand_text_alpha(16)
|
rand_str = Rex::Text.rand_text_alpha(16)
|
||||||
file_path = "#{dir_path}"/"#{rand_str}"
|
file_path = "#{dir_path}/#{rand_str}"
|
||||||
|
|
||||||
cmd_exec("echo #{rand_str}XXX#{rand_str} > #{file_path}")
|
cmd_exec("echo #{rand_str}XXX#{rand_str} > #{file_path}")
|
||||||
Rex::sleep(0.3)
|
Rex::sleep(0.3)
|
||||||
|
|
|
@ -1,42 +1,148 @@
|
||||||
# -*- coding: binary -*-
|
# -*- coding: binary -*-
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
require 'msf/core/post/linux/busybox'
|
require 'msf/core/post/linux/busy_box'
|
||||||
|
|
||||||
describe Msf::Post::Linux::Busybox do
|
describe Msf::Post::Linux::BusyBox do
|
||||||
subject do
|
subject do
|
||||||
mod = Module.new
|
mod = ::Msf::Module.new
|
||||||
mod.extend described_class
|
mod.extend described_class
|
||||||
mod
|
mod
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#file_exists' do
|
describe "#busy_box_file_exist?" do
|
||||||
it "should test for file existence" do
|
describe "when file exists" do
|
||||||
result = subject.file_exists("/etc/passwd")
|
before :each do
|
||||||
result.should be true
|
allow(subject).to receive(:read_file) do
|
||||||
|
'test data'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get_writable_directory' do
|
it "returns true" do
|
||||||
it "should find a writable directory" do
|
expect(subject.busy_box_file_exist?('/etc/passwd')).to be_truthy
|
||||||
result = subject.get_writable_directory()
|
|
||||||
result.should be true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#is_writable_and_write' do
|
describe "when file doesn't exist" do
|
||||||
it "should write and append data to a file in a writable directory" do
|
before :each do
|
||||||
result = false
|
allow(subject).to receive(:read_file) do
|
||||||
writable_directory = get_writable_directory()
|
''
|
||||||
if nil != writable_directory
|
|
||||||
writable_file = writable_directory + "tmp"
|
|
||||||
if is_writable_and_write(writable_file, "test write ", false) and "test write " == read_file(writable_file) and
|
|
||||||
is_writable_and_write(writable_file, "test append", true) and "test write test append" == read_file(writable_file)
|
|
||||||
result = true
|
|
||||||
end
|
end
|
||||||
cmd_exec("rm -f #{writable_file}")
|
|
||||||
end
|
end
|
||||||
result.should be true
|
|
||||||
|
it "returns false" do
|
||||||
|
expect(subject.busy_box_file_exist?('/etc/nonexistent')).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#busy_box_is_writable_dir?" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:cmd_exec) do
|
||||||
|
''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when dir is writable" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:read_file) do
|
||||||
|
"#{'A' * 16}XXX#{'A' * 16}"
|
||||||
|
end
|
||||||
|
|
||||||
|
allow(Rex::Text).to receive(:rand_text_alpha) do
|
||||||
|
'A' * 16
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns true" do
|
||||||
|
expect(subject.busy_box_is_writable_dir?('/tmp/')).to be_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when dir isn't writable" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:read_file) do
|
||||||
|
''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns false" do
|
||||||
|
expect(subject.busy_box_is_writable_dir?('/etc/')).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
describe "#busy_box_writable_dir" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:cmd_exec) do
|
||||||
|
''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when a writable directory doesn't exist" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:read_file) do
|
||||||
|
''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns nil" do
|
||||||
|
expect(subject.busy_box_writable_dir).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when a writable directory exists" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:read_file) do
|
||||||
|
"#{'A' * 16}XXX#{'A' * 16}"
|
||||||
|
end
|
||||||
|
|
||||||
|
allow(Rex::Text).to receive(:rand_text_alpha) do
|
||||||
|
'A' * 16
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns the writable dir path" do
|
||||||
|
expect(subject.busy_box_writable_dir).to eq('/etc/')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
describe "#busy_box_write_file" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:cmd_exec) do
|
||||||
|
''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when the file isn't writable" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:read_file) do
|
||||||
|
''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns false" do
|
||||||
|
expect(subject.busy_box_write_file('/etc/passwd', 'test')).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when the file is writable" do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:read_file) do
|
||||||
|
"#{'A' * 16}XXX#{'A' * 16}"
|
||||||
|
end
|
||||||
|
|
||||||
|
allow(Rex::Text).to receive(:rand_text_alpha) do
|
||||||
|
'A' * 16
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns true" do
|
||||||
|
expect(subject.busy_box_write_file('/tmp/test', 'test')).to be_truthy
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue