librex 0.0.40 → 0.0.41
Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
A non-official re-packaging of the Rex library as a gem for easy of usage of the Metasploit REX framework in a non Metasploit application. I received permission from HDM to create this package.
|
4
4
|
|
5
5
|
Currently based on:
|
6
|
-
SVN Revision:
|
6
|
+
SVN Revision: 13139
|
7
7
|
|
8
8
|
# Credits
|
9
9
|
The Metasploit development team <http://www.metasploit.com>
|
@@ -96,7 +96,7 @@ class Dir < Rex::Post::Dir
|
|
96
96
|
|
97
97
|
files <<
|
98
98
|
{
|
99
|
-
'FileName' => file_name.value,
|
99
|
+
'FileName' => file_name.value,
|
100
100
|
'FilePath' => fpath[idx].value,
|
101
101
|
'StatBuf' => st,
|
102
102
|
}
|
@@ -189,7 +189,7 @@ class Dir < Rex::Post::Dir
|
|
189
189
|
##
|
190
190
|
|
191
191
|
#
|
192
|
-
# Downloads the contents of a remote directory a
|
192
|
+
# Downloads the contents of a remote directory a
|
193
193
|
# local directory, optionally in a recursive fashion.
|
194
194
|
#
|
195
195
|
def Dir.download(dst, src, recursive = false, force = true, &stat)
|
@@ -205,7 +205,7 @@ class Dir < Rex::Post::Dir
|
|
205
205
|
|
206
206
|
if (src_stat.file?)
|
207
207
|
stat.call('downloading', src_item, dst_item) if (stat)
|
208
|
-
begin
|
208
|
+
begin
|
209
209
|
client.fs.file.download(dst_item, src_item)
|
210
210
|
stat.call('downloaded', src_item, dst_item) if (stat)
|
211
211
|
rescue ::Rex::Post::Meterpreter::RequestError => e
|
@@ -234,7 +234,7 @@ class Dir < Rex::Post::Dir
|
|
234
234
|
end
|
235
235
|
|
236
236
|
#
|
237
|
-
# Uploads the contents of a local directory to a remote
|
237
|
+
# Uploads the contents of a local directory to a remote
|
238
238
|
# directory, optionally in a recursive fashion.
|
239
239
|
#
|
240
240
|
def Dir.upload(dst, src, recursive = false, &stat)
|
@@ -272,7 +272,7 @@ class Dir < Rex::Post::Dir
|
|
272
272
|
#
|
273
273
|
# The path of the directory that was opened.
|
274
274
|
#
|
275
|
-
attr_reader :path
|
275
|
+
attr_reader :path
|
276
276
|
protected
|
277
277
|
attr_accessor :client # :nodoc:
|
278
278
|
attr_writer :path # :nodoc:
|
@@ -23,8 +23,11 @@ module Fs
|
|
23
23
|
###
|
24
24
|
class File < Rex::Post::Meterpreter::Extensions::Stdapi::Fs::IO
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
#
|
27
|
+
# This should be replaced with a platform-specific value.
|
28
|
+
#
|
29
|
+
SEPARATOR = "\\"
|
30
|
+
Separator = "\\"
|
28
31
|
|
29
32
|
include Rex::Post::File
|
30
33
|
|
@@ -68,12 +71,13 @@ Separator = "\\"
|
|
68
71
|
#
|
69
72
|
def File.basename(*a)
|
70
73
|
path = a[0]
|
71
|
-
sep = "\\" + File::SEPARATOR
|
72
74
|
|
73
|
-
#
|
74
|
-
|
75
|
+
# Allow both kinds of dir serparators since lots and lots of code
|
76
|
+
# assumes one or the other so this ends up getting called with strings
|
77
|
+
# like: "C:\\foo/bar"
|
78
|
+
path =~ %r#.*[/\\](.*)$#
|
75
79
|
|
76
|
-
Rex::FileUtils.clean_path($
|
80
|
+
Rex::FileUtils.clean_path($1 || path)
|
77
81
|
end
|
78
82
|
|
79
83
|
#
|
@@ -208,16 +212,16 @@ Separator = "\\"
|
|
208
212
|
# Download one or more files from the remote computer to the local
|
209
213
|
# directory supplied in destination.
|
210
214
|
#
|
211
|
-
def File.download(
|
215
|
+
def File.download(dest, *src_files, &stat)
|
212
216
|
src_files.each { |src|
|
213
|
-
dest
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
if (::File.basename(destination) != File.basename(src))
|
217
|
+
if (::File.basename(dest) != File.basename(src))
|
218
|
+
# The destination when downloading is a local file so use this
|
219
|
+
# system's separator
|
218
220
|
dest += ::File::SEPARATOR + File.basename(src)
|
219
221
|
end
|
220
222
|
|
223
|
+
stat.call('downloading', src, dest) if (stat)
|
224
|
+
|
221
225
|
download_file(dest, src)
|
222
226
|
|
223
227
|
stat.call('downloaded', src, dest) if (stat)
|
@@ -229,7 +233,9 @@ Separator = "\\"
|
|
229
233
|
#
|
230
234
|
def File.download_file(dest_file, src_file)
|
231
235
|
src_fd = client.fs.file.new(src_file, "rb")
|
232
|
-
::
|
236
|
+
dir = ::File.dirname(dest_file)
|
237
|
+
::FileUtils.mkdir_p(dir) if dir and not ::File.directory?(dir)
|
238
|
+
|
233
239
|
dst_fd = ::File.new(dest_file, "wb")
|
234
240
|
|
235
241
|
# Keep transferring until EOF is reached...
|
@@ -183,7 +183,7 @@ class Console::CommandDispatcher::Stdapi::Fs
|
|
183
183
|
alias :cmd_del :cmd_rm
|
184
184
|
|
185
185
|
def cmd_download_help
|
186
|
-
print_line "Usage: download [options] src1 src2 src3 ... destination"
|
186
|
+
print_line "Usage: download [options] src1 src2 src3 ... destination"
|
187
187
|
print_line
|
188
188
|
print_line "Downloads remote files and directories to the local machine."
|
189
189
|
print_line @@download_opts.usage
|
@@ -206,23 +206,29 @@ class Console::CommandDispatcher::Stdapi::Fs
|
|
206
206
|
|
207
207
|
@@download_opts.parse(args) { |opt, idx, val|
|
208
208
|
case opt
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
end
|
215
|
-
|
216
|
-
last = val
|
209
|
+
when "-r"
|
210
|
+
recursive = true
|
211
|
+
when nil
|
212
|
+
src_items << last if (last)
|
213
|
+
last = val
|
217
214
|
end
|
218
215
|
}
|
219
216
|
|
220
|
-
|
217
|
+
# No files given, nothing to do
|
218
|
+
if not last
|
219
|
+
cmd_download_help
|
220
|
+
return true
|
221
|
+
end
|
221
222
|
|
222
223
|
# Source and destination will be the same
|
223
|
-
|
224
|
-
|
225
|
-
|
224
|
+
if src_items.empty?
|
225
|
+
src_items << last
|
226
|
+
# Use the basename of the remote filename so we don't end up with
|
227
|
+
# a file named c:\\boot.ini in linux
|
228
|
+
dest = ::Rex::Post::Meterpreter::Extensions::Stdapi::Fs::File.basename(last)
|
229
|
+
else
|
230
|
+
dest = last
|
231
|
+
end
|
226
232
|
|
227
233
|
# Go through each source item and download them
|
228
234
|
src_items.each { |src|
|
@@ -301,7 +307,7 @@ class Console::CommandDispatcher::Stdapi::Fs
|
|
301
307
|
path = args[0] || client.fs.dir.getwd
|
302
308
|
tbl = Rex::Ui::Text::Table.new(
|
303
309
|
'Header' => "Listing: #{path}",
|
304
|
-
'Columns' =>
|
310
|
+
'Columns' =>
|
305
311
|
[
|
306
312
|
'Mode',
|
307
313
|
'Size',
|
@@ -315,12 +321,12 @@ class Console::CommandDispatcher::Stdapi::Fs
|
|
315
321
|
# Enumerate each item...
|
316
322
|
client.fs.dir.entries_with_info(path).sort { |a,b| a['FileName'] <=> b['FileName'] }.each { |p|
|
317
323
|
|
318
|
-
tbl <<
|
319
|
-
[
|
324
|
+
tbl <<
|
325
|
+
[
|
320
326
|
p['StatBuf'] ? p['StatBuf'].prettymode : '',
|
321
|
-
p['StatBuf'] ? p['StatBuf'].size : '',
|
322
|
-
p['StatBuf'] ? p['StatBuf'].ftype[0,3] : '',
|
323
|
-
p['StatBuf'] ? p['StatBuf'].mtime : '',
|
327
|
+
p['StatBuf'] ? p['StatBuf'].size : '',
|
328
|
+
p['StatBuf'] ? p['StatBuf'].ftype[0,3] : '',
|
329
|
+
p['StatBuf'] ? p['StatBuf'].mtime : '',
|
324
330
|
p['FileName'] || 'unknown'
|
325
331
|
]
|
326
332
|
|
@@ -368,7 +374,7 @@ class Console::CommandDispatcher::Stdapi::Fs
|
|
368
374
|
#
|
369
375
|
def cmd_rmdir(*args)
|
370
376
|
if (args.length == 0 or args.include?("-h"))
|
371
|
-
|
377
|
+
print_line("Usage: rmdir dir1 dir2 dir3 ...")
|
372
378
|
return true
|
373
379
|
end
|
374
380
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: librex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.41
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Metasploit Development Team
|
@@ -11,11 +11,11 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-07-
|
14
|
+
date: 2011-07-09 00:00:00 -05:00
|
15
15
|
default_executable:
|
16
16
|
dependencies: []
|
17
17
|
|
18
|
-
description: Rex provides a variety of classes useful for security testing and exploit development. Based on SVN Revision
|
18
|
+
description: Rex provides a variety of classes useful for security testing and exploit development. Based on SVN Revision 13139
|
19
19
|
email:
|
20
20
|
- hdm@metasploit.com
|
21
21
|
- jacob.hammack@hammackj.com
|