Skip to content

Commit 1b3dfe6

Browse files
author
HD Moore
committed
Lands rapid7#4977, updates test module to support arbitrary base filename.
2 parents 2d1adf6 + d77f8ff commit 1b3dfe6

File tree

2 files changed

+57
-45
lines changed

2 files changed

+57
-45
lines changed

test/modules/post/test/file.rb

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ def initialize(info={})
2323
'Platform' => [ 'windows', 'linux', 'java' ],
2424
'SessionTypes' => [ 'meterpreter', 'shell' ]
2525
))
26+
27+
register_options(
28+
[
29+
OptString.new("BaseFileName" , [true, "File name to create", "meterpreter-test"])
30+
], self.class)
2631
end
2732

2833
#
@@ -68,13 +73,13 @@ def test_file
6873
end
6974

7075
it "should create text files" do
71-
write_file("pwned", "foo")
76+
write_file(datastore["BaseFileName"], "foo")
7277

73-
file?("pwned")
78+
file?(datastore["BaseFileName"])
7479
end
7580

7681
it "should read the text we just wrote" do
77-
f = read_file("pwned")
82+
f = read_file(datastore["BaseFileName"])
7883
ret = ("foo" == f)
7984
unless ret
8085
print_error("Didn't read what we wrote, actual file on target: #{f}")
@@ -85,11 +90,11 @@ def test_file
8590

8691
it "should append text files" do
8792
ret = true
88-
append_file("pwned", "bar")
93+
append_file(datastore["BaseFileName"], "bar")
8994

90-
ret &&= read_file("pwned") == "foobar"
91-
append_file("pwned", "baz")
92-
final_contents = read_file("pwned")
95+
ret &&= read_file(datastore["BaseFileName"]) == "foobar"
96+
append_file(datastore["BaseFileName"], "baz")
97+
final_contents = read_file(datastore["BaseFileName"])
9398
ret &&= final_contents == "foobarbaz"
9499
unless ret
95100
print_error("Didn't read what we wrote, actual file on target: #{final_contents}")
@@ -99,9 +104,9 @@ def test_file
99104
end
100105

101106
it "should delete text files" do
102-
file_rm("pwned")
107+
file_rm(datastore["BaseFileName"])
103108

104-
not file_exist?("pwned")
109+
not file_exist?(datastore["BaseFileName"])
105110
end
106111

107112
it "should move files" do
@@ -131,30 +136,30 @@ def test_binary_files
131136
it "should write binary data" do
132137
vprint_status "Writing #{binary_data.length} bytes"
133138
t = Time.now
134-
write_file("pwned", binary_data)
139+
write_file(datastore["BaseFileName"], binary_data)
135140
vprint_status("Finished in #{Time.now - t}")
136141

137-
file_exist?("pwned")
142+
file_exist?(datastore["BaseFileName"])
138143
end
139144

140145
it "should read the binary data we just wrote" do
141-
bin = read_file("pwned")
146+
bin = read_file(datastore["BaseFileName"])
142147
vprint_status "Read #{bin.length} bytes"
143148

144149
bin == binary_data
145150
end
146151

147152
it "should delete binary files" do
148-
file_rm("pwned")
153+
file_rm(datastore["BaseFileName"])
149154

150-
not file_exist?("pwned")
155+
not file_exist?(datastore["BaseFileName"])
151156
end
152157

153158
it "should append binary data" do
154-
write_file("pwned", "\xde\xad")
155-
append_file("pwned", "\xbe\xef")
156-
bin = read_file("pwned")
157-
file_rm("pwned")
159+
write_file(datastore["BaseFileName"], "\xde\xad")
160+
append_file(datastore["BaseFileName"], "\xbe\xef")
161+
bin = read_file(datastore["BaseFileName"])
162+
file_rm(datastore["BaseFileName"])
158163

159164
bin == "\xde\xad\xbe\xef"
160165
end

test/modules/post/test/meterpreter.rb

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ def initialize(info={})
1919
'Platform' => [ 'windows', 'linux', 'java' ],
2020
'SessionTypes' => [ 'meterpreter' ]
2121
))
22-
22+
register_options(
23+
[
24+
OptString.new("BaseFileName" , [true, "File/dir base name", "meterpreter-test"])
25+
], self.class)
2326
end
2427

2528
#
@@ -164,66 +167,68 @@ def test_fs
164167
end
165168

166169
it "should create and remove a dir" do
167-
session.fs.dir.rmdir("meterpreter-test-dir") rescue nil
168-
res = create_directory("meterpreter-test-dir")
170+
dir_name = "#{datastore["BaseFileName"]}-dir"
171+
session.fs.dir.rmdir(dir_name) rescue nil
172+
res = create_directory(dir_name)
169173
if (res)
170-
session.fs.dir.rmdir("meterpreter-test-dir")
171-
res &&= !session.fs.dir.entries.include?("meterpreter-test-dir")
174+
session.fs.dir.rmdir(dir_name)
175+
res &&= !session.fs.dir.entries.include?(dir_name)
172176
vprint_status("Directory removed successfully")
173177
end
174178

175179
res
176180
end
177181

178182
it "should change directories" do
179-
session.fs.dir.rmdir("meterpreter-test-dir") rescue nil
180-
res = create_directory("meterpreter-test-dir")
183+
dir_name = "#{datastore["BaseFileName"]}-dir"
184+
session.fs.dir.rmdir(dir_name) rescue nil
185+
res = create_directory(dir_name)
181186

182187
old_wd = session.fs.dir.pwd
183188
vprint_status("Old CWD: #{old_wd}")
184189

185190
if res
186-
session.fs.dir.chdir("meterpreter-test-dir")
191+
session.fs.dir.chdir(dir_name)
187192
new_wd = session.fs.dir.pwd
188193
vprint_status("New CWD: #{new_wd}")
189-
res &&= (new_wd =~ /meterpreter-test-dir$/)
190194

195+
res &&= new_wd.include? dir_name
191196
if res
192197
session.fs.dir.chdir("..")
193198
wd = session.fs.dir.pwd
194199
vprint_status("Back to old CWD: #{wd}")
195200
end
196201
end
197-
session.fs.dir.rmdir("meterpreter-test-dir")
198-
res &&= !session.fs.dir.entries.include?("meterpreter-test-dir")
202+
session.fs.dir.rmdir(dir_name)
203+
res &&= !session.fs.dir.entries.include?(dir_name)
199204
vprint_status("Directory removed successfully")
200205

201206
res
202207
end
203208

204209
it "should create and remove files" do
205210
res = true
206-
res &&= session.fs.file.open("meterpreter-test", "wb") { |fd|
211+
file_name = datastore["BaseFileName"]
212+
res &&= session.fs.file.open(file_name, "wb") { |fd|
207213
fd.write("test")
208214
}
209215

210-
vprint_status("Wrote to meterpreter-test, checking contents")
211-
res &&= session.fs.file.open("meterpreter-test", "rb") { |fd|
216+
vprint_status("Wrote to #{file_name}, checking contents")
217+
res &&= session.fs.file.open(file_name, "rb") { |fd|
212218
contents = fd.read
213219
vprint_status("Wrote #{contents}")
214220
(contents == "test")
215221
}
216222

217-
session.fs.file.rm("meterpreter-test")
218-
res &&= !session.fs.dir.entries.include?("meterpreter-test")
223+
session.fs.file.rm(file_name)
224+
res &&= !session.fs.dir.entries.include?(file_name)
219225

220226
res
221227
end
222228

223229
it "should upload a file" do
224230
res = true
225-
226-
remote = "meterpreter-test-file.txt"
231+
remote = "#{datastore["BaseFileName"]}-file.txt"
227232
local = __FILE__
228233
vprint_status("uploading")
229234
session.fs.file.upload_file(remote, local)
@@ -249,31 +254,33 @@ def test_fs
249254
if session.commands.include?("stdapi_fs_file_move")
250255
it "should move files" do
251256
res = true
257+
src_name = datastore["BaseFileName"]
258+
dst_name = "#{datastore["BaseFileName"]}-moved"
252259

253260
# Make sure we don't have leftovers from a previous run
254-
session.fs.file.rm("meterpreter-test") rescue nil
255-
session.fs.file.rm("meterpreter-test-moved") rescue nil
261+
session.fs.file.rm(src_name) rescue nil
262+
session.fs.file.rm(dst_name) rescue nil
256263

257264
# touch a new file
258-
fd = session.fs.file.open("meterpreter-test", "wb")
265+
fd = session.fs.file.open(src_name, "wb")
259266
fd.close
260267

261-
session.fs.file.mv("meterpreter-test", "meterpreter-test-moved")
268+
session.fs.file.mv(src_name, dst_name)
262269
entries = session.fs.dir.entries
263-
res &&= entries.include?("meterpreter-test-moved")
264-
res &&= !entries.include?("meterpreter-test")
270+
res &&= entries.include?(dst_name)
271+
res &&= !entries.include?(src_name)
265272

266273
# clean up
267-
session.fs.file.rm("meterpreter-test") rescue nil
268-
session.fs.file.rm("meterpreter-test-moved") rescue nil
274+
session.fs.file.rm(src_name) rescue nil
275+
session.fs.file.rm(dst_name) rescue nil
269276

270277
res
271278
end
272279
end
273280

274281
it "should do md5 and sha1 of files" do
275282
res = true
276-
remote = "meterpreter-test-file.txt"
283+
remote = "#{datastore["BaseFileName"]}-file.txt"
277284
local = __FILE__
278285
vprint_status("uploading")
279286
session.fs.file.upload_file(remote, local)

0 commit comments

Comments
 (0)