librex 0.0.39 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +1 -1
- data/lib/rex/exploitation/javascriptosdetect.rb +6 -1
- data/lib/rex/io/stream_abstraction.rb +4 -1
- data/lib/rex/post/meterpreter/client_core.rb +2 -1
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +41 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +20 -0
- data/lib/rex/text.rb +24 -0
- metadata +3 -3
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: 13097
|
7
7
|
|
8
8
|
# Credits
|
9
9
|
The Metasploit development team <http://www.metasploit.com>
|
@@ -73,6 +73,7 @@ function getVersion(){
|
|
73
73
|
case "344": // opera-9.0-20060616.1-static-qt.i386-en-344
|
74
74
|
case "2091": // opera-9.52-2091.gcc3-shared-qt3.i386.rpm
|
75
75
|
case "2444": // opera-9.60.gcc4-shared-qt3.i386.rpm
|
76
|
+
case "6386": // 10.61
|
76
77
|
os_name = "#{oses::LINUX}";
|
77
78
|
break;
|
78
79
|
case "8502": // "Opera 9 Eng Setup.exe"
|
@@ -82,8 +83,12 @@ function getVersion(){
|
|
82
83
|
case "8801": // "Opera_9.22_Eng_Setup.exe"
|
83
84
|
case "10108": // "Opera_952_10108_en.exe"
|
84
85
|
case "10467": // "Opera_962_en_Setup.exe"
|
86
|
+
case "3445": // 10.61
|
85
87
|
os_name = "#{oses::WINDOWS}";
|
86
88
|
break;
|
89
|
+
case "6386": // 10.61
|
90
|
+
os_name = "#{oses::MAC_OSX}";
|
91
|
+
break;
|
87
92
|
//default:
|
88
93
|
// document.write(opera.buildNumber('inconspicuous'));
|
89
94
|
// break;
|
@@ -133,7 +138,7 @@ function getVersion(){
|
|
133
138
|
if (platform.match(/x86_64/)) {
|
134
139
|
arch = "#{ARCH_X86_64}";
|
135
140
|
} else if (platform.match(/arm/)) {
|
136
|
-
// Android
|
141
|
+
// Android and maemo
|
137
142
|
arch = "#{ARCH_ARMLE}";
|
138
143
|
}
|
139
144
|
} else if (platform.match(/windows/)) {
|
@@ -311,7 +311,8 @@ class ClientCore < Extension
|
|
311
311
|
#
|
312
312
|
def shutdown
|
313
313
|
request = Packet.create_request('core_shutdown')
|
314
|
-
response
|
314
|
+
# Don't wait for the response since the server will be dead
|
315
|
+
self.client.send_packet(request)
|
315
316
|
true
|
316
317
|
end
|
317
318
|
|
@@ -90,6 +90,47 @@ Separator = "\\"
|
|
90
90
|
return response.get_tlv_value(TLV_TYPE_FILE_PATH)
|
91
91
|
end
|
92
92
|
|
93
|
+
|
94
|
+
#
|
95
|
+
# Calculates the MD5 (16-bytes raw) of a remote file
|
96
|
+
#
|
97
|
+
def File.md5(path)
|
98
|
+
request = Packet.create_request('stdapi_fs_md5')
|
99
|
+
|
100
|
+
request.add_tlv(TLV_TYPE_FILE_PATH, path)
|
101
|
+
|
102
|
+
response = client.send_request(request)
|
103
|
+
|
104
|
+
return response.get_tlv_value(TLV_TYPE_FILE_NAME)
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# Calculates the SHA1 (20-bytes raw) of a remote file
|
109
|
+
#
|
110
|
+
def File.sha1(path)
|
111
|
+
request = Packet.create_request('stdapi_fs_sha1')
|
112
|
+
|
113
|
+
request.add_tlv(TLV_TYPE_FILE_PATH, path)
|
114
|
+
|
115
|
+
response = client.send_request(request)
|
116
|
+
|
117
|
+
return response.get_tlv_value(TLV_TYPE_FILE_NAME)
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# Expands a file path, substituting all environment variables, such as
|
122
|
+
# %TEMP%.
|
123
|
+
#
|
124
|
+
def File.expand_path(path)
|
125
|
+
request = Packet.create_request('stdapi_fs_file_expand_path')
|
126
|
+
|
127
|
+
request.add_tlv(TLV_TYPE_FILE_PATH, path)
|
128
|
+
|
129
|
+
response = client.send_request(request)
|
130
|
+
|
131
|
+
return response.get_tlv_value(TLV_TYPE_FILE_PATH)
|
132
|
+
end
|
133
|
+
|
93
134
|
#
|
94
135
|
# Performs a stat on a file and returns a FileStat instance.
|
95
136
|
#
|
@@ -39,6 +39,26 @@ class Registry
|
|
39
39
|
# the supplied permissions. Right now this is merely a wrapper around
|
40
40
|
# create_key.
|
41
41
|
#
|
42
|
+
|
43
|
+
def Registry.load_key(root_key,base_key,hive_file)
|
44
|
+
request = Packet.create_request('stdapi_registry_load_key')
|
45
|
+
request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
|
46
|
+
request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
|
47
|
+
request.add_tlv(TLV_TYPE_FILE_PATH,hive_file)
|
48
|
+
|
49
|
+
response = client.send_request(request)
|
50
|
+
return response.get_tlv(TLV_TYPE_RESULT).value
|
51
|
+
end
|
52
|
+
|
53
|
+
def Registry.unload_key(root_key,base_key)
|
54
|
+
request = Packet.create_request('stdapi_registry_unload_key')
|
55
|
+
request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
|
56
|
+
request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
|
57
|
+
response = client.send_request(request)
|
58
|
+
return response.get_tlv(TLV_TYPE_RESULT).value
|
59
|
+
end
|
60
|
+
|
61
|
+
|
42
62
|
def Registry.open_key(root_key, base_key, perm = KEY_READ)
|
43
63
|
# If no base key was provided, just return the root_key.
|
44
64
|
if (base_key == nil or base_key.length == 0)
|
data/lib/rex/text.rb
CHANGED
@@ -704,6 +704,30 @@ module Text
|
|
704
704
|
Digest::MD5.hexdigest(str)
|
705
705
|
end
|
706
706
|
|
707
|
+
#
|
708
|
+
# Convert hex-encoded characters to literals.
|
709
|
+
# Example: "AA\\x42CC" becomes "AABCC"
|
710
|
+
#
|
711
|
+
def self.dehex(str)
|
712
|
+
return str unless str.respond_to? :match
|
713
|
+
return str unless str.respond_to? :gsub
|
714
|
+
regex = /\x5cx[0-9a-f]{2}/mi
|
715
|
+
if str.match(regex)
|
716
|
+
str.gsub(regex) { |x| x[2,2].to_i(16).chr }
|
717
|
+
else
|
718
|
+
str
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
#
|
723
|
+
# Convert and replace hex-encoded characters to literals.
|
724
|
+
#
|
725
|
+
def self.dehex!(str)
|
726
|
+
return str unless str.respond_to? :match
|
727
|
+
return str unless str.respond_to? :gsub
|
728
|
+
regex = /\x5cx[0-9a-f]{2}/mi
|
729
|
+
str.gsub!(regex) { |x| x[2,2].to_i(16).chr }
|
730
|
+
end
|
707
731
|
|
708
732
|
##
|
709
733
|
#
|
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.40
|
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-
|
14
|
+
date: 2011-07-04 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 13097
|
19
19
|
email:
|
20
20
|
- hdm@metasploit.com
|
21
21
|
- jacob.hammack@hammackj.com
|