39 lines
2.1 KiB
Ruby
Executable File
39 lines
2.1 KiB
Ruby
Executable File
RSpec.describe Msf::Sessions::CommandShellUnix do
|
|
describe 'to_cmd processing' do
|
|
it 'should not do anything for simple args' do
|
|
expect(described_class.to_cmd(['./test'] + [])).to eq('./test')
|
|
expect(described_class.to_cmd(['sh'] + [])).to eq('sh')
|
|
expect(described_class.to_cmd(['./test'] + ['basic','args'])).to eq('./test basic args')
|
|
expect(described_class.to_cmd(['basic','args'])).to eq('basic args')
|
|
end
|
|
|
|
it 'should escape spaces' do
|
|
expect(described_class.to_cmd(['/home/user/some folder/some program'] + [])).to eq("'/home/user/some folder/some program'")
|
|
expect(described_class.to_cmd(['./test'] + ['with space'])).to eq("./test 'with space'")
|
|
end
|
|
|
|
it 'should escape logical operators' do
|
|
expect(described_class.to_cmd(['./test'] + ['&&', 'echo', 'words'])).to eq("./test '&&' echo words")
|
|
expect(described_class.to_cmd(['./test'] + ['||', 'echo', 'words'])).to eq("./test '||' echo words")
|
|
expect(described_class.to_cmd(['./test'] + ['&echo', 'words'])).to eq("./test '&echo' words")
|
|
expect(described_class.to_cmd(['./test'] + ['run&echo', 'words'])).to eq("./test 'run&echo' words")
|
|
end
|
|
|
|
it 'should quote if single quotes are present' do
|
|
expect(described_class.to_cmd(['./test'] + ["it's"])).to eq("./test it\\'s")
|
|
expect(described_class.to_cmd(['./test'] + ["it's a param"])).to eq("./test it\\''s a param'")
|
|
end
|
|
|
|
it 'should escape redirectors' do
|
|
expect(described_class.to_cmd(['./test'] + ['>', 'out.txt'])).to eq("./test '>' out.txt")
|
|
expect(described_class.to_cmd(['./test'] + ['<', 'in.txt'])).to eq("./test '<' in.txt")
|
|
end
|
|
|
|
it 'should not expand env vars' do
|
|
expect(described_class.to_cmd(['./test'] + ['$PATH'])).to eq("./test '$PATH'")
|
|
expect(described_class.to_cmd(['./test'] + ["it's $PATH"])).to eq("./test it\\''s $PATH'")
|
|
expect(described_class.to_cmd(['./test'] + ["\"$PATH\""])).to eq("./test '\"$PATH\"'")
|
|
expect(described_class.to_cmd(['./test'] + ["it's \"$PATH\""])).to eq("./test it\\''s \"$PATH\"'")
|
|
end
|
|
end
|
|
end |