librex 0.0.6 → 0.0.7
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.md +3 -5
- data/Rakefile +26 -0
- data/lib/rex/compat.rb +1 -1
- data/lib/rex/exploitation/javascriptosdetect.rb +125 -62
- data/lib/rex/file.rb +15 -0
- data/lib/rex/io/stream.rb +1 -1
- data/lib/rex/parser/nmap_xml.rb +6 -0
- data/lib/rex/poly/block.rb +9 -0
- data/lib/rex/post/meterpreter/client.rb +0 -8
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +6 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +1 -1
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +49 -35
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +26 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +9 -2
- data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +630 -0
- data/lib/rex/post/meterpreter/packet.rb +3 -1
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +143 -57
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +6 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +9 -3
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +6 -4
- data/lib/rex/proto.rb +1 -0
- data/lib/rex/proto/dhcp/server.rb +4 -2
- data/lib/rex/proto/http/packet.rb +5 -6
- data/lib/rex/proto/ntlm.rb +7 -0
- data/lib/rex/proto/ntlm.rb.ut.rb +177 -0
- data/lib/rex/proto/ntlm/base.rb +326 -0
- data/lib/rex/proto/ntlm/constants.rb +74 -0
- data/lib/rex/proto/ntlm/crypt.rb +340 -0
- data/lib/rex/proto/ntlm/exceptions.rb +9 -0
- data/lib/rex/proto/ntlm/message.rb +533 -0
- data/lib/rex/proto/ntlm/utils.rb +358 -0
- data/lib/rex/proto/smb/client.rb +548 -86
- data/lib/rex/proto/smb/client.rb.ut.rb +4 -4
- data/lib/rex/proto/smb/constants.rb +7 -24
- data/lib/rex/proto/smb/crypt.rb +12 -71
- data/lib/rex/proto/smb/exceptions.rb +12 -0
- data/lib/rex/proto/smb/simpleclient.rb +17 -5
- data/lib/rex/proto/smb/utils.rb +3 -460
- data/lib/rex/proto/tftp/server.rb +2 -2
- data/lib/rex/script/base.rb +2 -2
- data/lib/rex/socket.rb +12 -0
- data/lib/rex/socket.rb.ut.rb +31 -10
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +15 -5
- data/lib/rex/text.rb +55 -4
- data/lib/rex/ui/output.rb +0 -2
- data/lib/rex/ui/text/dispatcher_shell.rb +95 -10
- data/lib/rex/ui/text/output/buffer.rb +0 -4
- data/lib/rex/ui/text/shell.rb +8 -0
- data/lib/rex/ui/text/table.rb +21 -1
- metadata +15 -19
- data/lib/rex/proto/smb/crypt.rb.ut.rb +0 -20
data/README.md
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
REX
|
2
|
-
===
|
1
|
+
# REX
|
3
2
|
|
4
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.
|
5
4
|
|
6
5
|
Currently based on:
|
7
|
-
SVN Revision:
|
6
|
+
SVN Revision: 11930
|
8
7
|
|
9
|
-
Credits
|
10
|
-
===
|
8
|
+
# Credits
|
11
9
|
The Metasploit development team <http://www.metasploit.com>
|
12
10
|
|
data/Rakefile
CHANGED
@@ -11,3 +11,29 @@ end
|
|
11
11
|
task :clean do
|
12
12
|
system "rm *.gem"
|
13
13
|
end
|
14
|
+
|
15
|
+
task :update_rex do
|
16
|
+
puts "[*] Removing old rex code"
|
17
|
+
system "git rm lib/rex.rb"
|
18
|
+
system "git rm lib/rex.rb.ts.rb"
|
19
|
+
system "git rm -rf lib/rex/"
|
20
|
+
system "git commit -a -m \"Removed old code.\""
|
21
|
+
system "mkdir lib"
|
22
|
+
|
23
|
+
puts "[*] Checking out Metasploit trunk"
|
24
|
+
results = `svn co https://www.metasploit.com/svn/framework3/trunk/ /tmp/msftmp`
|
25
|
+
rev = results.match(/^Checked out revision (.*)\.$/)
|
26
|
+
|
27
|
+
puts "[*] Checkout Revision: #{rev[1]}"
|
28
|
+
|
29
|
+
puts "[*] Copying new files"
|
30
|
+
system "mv /tmp/msftmp/lib/rex.rb lib/"
|
31
|
+
system "mv /tmp/msftmp/lib/rex.rb.ts.rb lib/"
|
32
|
+
system "mv /tmp/msftmp/lib/rex/ lib/"
|
33
|
+
system "find . -iname '.svn' -exec rm -rf {} \\;"
|
34
|
+
system "git add lib/"
|
35
|
+
system "git commit -m \"Updated for Revision #{rev[1]}\""
|
36
|
+
|
37
|
+
puts "[*] Cleaning up tmp files"
|
38
|
+
system "rm -rf /tmp/msftmp"
|
39
|
+
end
|
data/lib/rex/compat.rb
CHANGED
@@ -121,7 +121,7 @@ def self.open_browser(url='http://metasploit.com/')
|
|
121
121
|
end
|
122
122
|
return if not @@loaded_win32api
|
123
123
|
Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", url, nil, nil, 0)
|
124
|
-
when /mswin32/
|
124
|
+
when /mswin32|mingw/
|
125
125
|
return if not @@loaded_win32api
|
126
126
|
Win32API.new("shell32.dll", "ShellExecute", ["PPPPPL"], "L").call(nil, "open", url, nil, nil, 0)
|
127
127
|
when /darwin/
|
@@ -58,6 +58,9 @@ function getVersion(){
|
|
58
58
|
//--
|
59
59
|
if (window.opera) {
|
60
60
|
ua_name = "#{clients::OPERA}";
|
61
|
+
if (!navigator.userAgent.match(/Opera/)) {
|
62
|
+
ua_is_lying = true;
|
63
|
+
}
|
61
64
|
// This seems to be completely accurate, e.g. "9.21" is the return
|
62
65
|
// value of opera.version() when run on Opera 9.21
|
63
66
|
ua_version = opera.version();
|
@@ -90,24 +93,53 @@ function getVersion(){
|
|
90
93
|
// Then this is webkit, could be Safari or Chrome.
|
91
94
|
// Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1
|
92
95
|
// Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5
|
96
|
+
// Mozilla/5.0 (Linux; U; Android 2.2; en-au; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
|
97
|
+
// Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8C148
|
98
|
+
// Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
|
99
|
+
// Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
|
93
100
|
|
94
|
-
// Google Chrome has window.google (
|
95
|
-
if (window.chromium || window.google) {
|
101
|
+
// Google Chrome has window.google (older versions), window.chromium (older versions), and window.window.chrome (3+)
|
102
|
+
if (window.chromium || window.google || window.chrome) {
|
96
103
|
ua_name = "#{clients::CHROME}";
|
97
104
|
search = "Chrome";
|
98
105
|
} else {
|
99
|
-
// navigator.language for;
|
100
|
-
// Safari on Mac (OS X, iPod, and iPhone): lower case language & lower case country code (en-us)
|
101
|
-
// Safari on Windows: lower case language & upper case country code (en-US).
|
102
|
-
if (navigator.language.toLowerCase() == navigator.language) {
|
103
|
-
os_name = "#{oses::MAC_OSX}";
|
104
|
-
} else {
|
105
|
-
os_name = "#{oses::WINDOWS}";
|
106
|
-
}
|
107
|
-
|
108
106
|
ua_name = "#{clients::SAFARI}";
|
109
107
|
search = "Version";
|
110
108
|
}
|
109
|
+
|
110
|
+
platform = navigator.platform.toLowerCase();
|
111
|
+
// Just to be a pain, iPod and iPad both leave off "Safari" and
|
112
|
+
// "Version" in the UA, see example above. Grab the webkit version
|
113
|
+
// instead. =/
|
114
|
+
if (platform.match(/ipod/)) {
|
115
|
+
os_name = "#{oses::MAC_OSX}";
|
116
|
+
os_flavor = "iPod";
|
117
|
+
arch = "#{ARCH_ARMLE}";
|
118
|
+
search = "AppleWebKit";
|
119
|
+
} else if (platform.match(/ipad/)) {
|
120
|
+
os_name = "#{oses::MAC_OSX}";
|
121
|
+
os_flavor = "iPad";
|
122
|
+
arch = "#{ARCH_ARMLE}";
|
123
|
+
search = "AppleWebKit";
|
124
|
+
} else if (platform.match(/iphone/)) {
|
125
|
+
os_name = "#{oses::MAC_OSX}";
|
126
|
+
os_flavor = "iPhone";
|
127
|
+
arch = "#{ARCH_ARMLE}";
|
128
|
+
} else if (platform.match(/macintel/)) {
|
129
|
+
os_name = "#{oses::MAC_OSX}";
|
130
|
+
arch = "#{ARCH_X86}";
|
131
|
+
} else if (platform.match(/linux/)) {
|
132
|
+
os_name = "#{oses::LINUX}";
|
133
|
+
if (platform.match(/x86_64/)) {
|
134
|
+
arch = "#{ARCH_X86_64}";
|
135
|
+
} else if (platform.match(/arm/)) {
|
136
|
+
// Android
|
137
|
+
arch = "#{ARCH_ARMLE}";
|
138
|
+
}
|
139
|
+
} else if (platform.match(/windows/)) {
|
140
|
+
os_name = "#{oses::WINDOWS}";
|
141
|
+
}
|
142
|
+
|
111
143
|
ua_version = searchVersion(search, navigator.userAgent);
|
112
144
|
if (!ua_version || 0 == ua_version.length) {
|
113
145
|
ua_is_lying = true;
|
@@ -137,6 +169,9 @@ function getVersion(){
|
|
137
169
|
ua_version = "1";
|
138
170
|
}
|
139
171
|
|
172
|
+
if (navigator.oscpu != navigator.platform) {
|
173
|
+
ua_is_lying = true;
|
174
|
+
}
|
140
175
|
// oscpu is unaffected by changes in the useragent and has values like:
|
141
176
|
// "Linux i686"
|
142
177
|
// "Windows NT 6.0"
|
@@ -170,7 +205,7 @@ function getVersion(){
|
|
170
205
|
//
|
171
206
|
// This technique, and the laboriously compiled associated table,
|
172
207
|
// submitted by Mark Fioravanti.
|
173
|
-
|
208
|
+
|
174
209
|
var buildid = navigator.buildID;
|
175
210
|
|
176
211
|
switch(buildid) {
|
@@ -268,14 +303,14 @@ function getVersion(){
|
|
268
303
|
case "20090824085743": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; break;
|
269
304
|
case "20090824101458": ua_version = "3.5.3"; os_name = "#{oses::WINDOWS}"; break;
|
270
305
|
case "2009082707": ua_version = "3.0.14"; break;
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
306
|
+
case "2009090216": ua_version = "3.0.14"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
307
|
+
case "20090914014745": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
|
308
|
+
case "20090915065903": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break;
|
309
|
+
case "20090915070141": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break;
|
310
|
+
case "20091007090112": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
|
311
|
+
case "20091007095328": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
|
277
312
|
case "2009101600":
|
278
|
-
|
313
|
+
switch (navigator.productSub) {
|
279
314
|
case "2009101600": ua_version = "3.0.15"; break; // Can be either Mac or Linux
|
280
315
|
case "20091016": ua_version = "3.5.4"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; arch = "#{ARCH_X86}"; break;
|
281
316
|
} break;
|
@@ -283,96 +318,96 @@ function getVersion(){
|
|
283
318
|
case "20091016081620": ua_version = "3.5.4"; os_name = "#{oses::MAC_OSX}"; break;
|
284
319
|
case "20091016081727": ua_version = "3.5.4"; os_name = "#{oses::LINUX}"; break;
|
285
320
|
case "20091016092926": ua_version = "3.5.4"; os_name = "#{oses::WINDOWS}"; break;
|
286
|
-
|
321
|
+
case "20091020122601": ua_version = "3.5.4"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
|
287
322
|
case "2009102814":
|
288
|
-
|
323
|
+
switch (navigator.productSub) {
|
289
324
|
case "2009121601": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
|
290
325
|
case "2009121602": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
|
291
326
|
case "2010010604": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; break;
|
292
327
|
case "2010021501": ua_version = "3.0.17;xul1.9.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; arch = "#{ARCH_X86}"; break;
|
293
328
|
case "2010021502": ua_version = "3.0.17;xul1.9.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; arch = "#{ARCH_X86_64}"; break;
|
294
329
|
} break;
|
295
|
-
|
296
|
-
|
330
|
+
case "2009102815":
|
331
|
+
switch (navigator.productSub) {
|
297
332
|
case "2009102815": ua_version = "3.0.15"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
298
333
|
case "2009121601": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
299
334
|
} break;
|
300
|
-
|
335
|
+
case "20091029152254": ua_version = "3.6.0.b1"; os_name = "#{oses::LINUX}"; break;
|
301
336
|
case "20091029171059": ua_version = "3.6.0.b1"; os_name = "#{oses::WINDOWS}"; break;
|
302
337
|
case "20091102134505": ua_version = "3.5.5"; os_name = "#{oses::MAC_OSX}"; break;
|
303
338
|
case "20091102141836": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; break;
|
304
339
|
case "20091102152451": ua_version = "3.5.5"; os_name = "#{oses::WINDOWS}"; break;
|
305
340
|
case "2009110421": ua_version = "3.0.15"; os_name = "#{oses::FREEBSD}"; arch = "#{ARCH_X86}"; break;
|
306
|
-
|
341
|
+
case "20091106091959": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
|
307
342
|
case "20091106140514": ua_version = "3.5.5"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
|
308
343
|
case "20091106145609": ua_version = "3.5.5"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
|
309
|
-
|
344
|
+
case "20091108163911": ua_version = "3.6.0.b2"; os_name = "#{oses::LINUX}"; break;
|
310
345
|
case "20091108181924": ua_version = "3.6.0.b2"; os_name = "#{oses::WINDOWS}"; break;
|
311
|
-
|
312
|
-
|
346
|
+
case "20091109125225":
|
347
|
+
switch (navigator.productSub) {
|
313
348
|
case "20091109": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
314
349
|
case "20091215": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
315
350
|
} break;
|
316
351
|
case "20091109134913": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
317
|
-
|
352
|
+
case "20091115172547": ua_version = "3.6.0.b3"; os_name = "#{oses::LINUX}"; break;
|
318
353
|
case "20091115182845": ua_version = "3.6.0.b3"; os_name = "#{oses::WINDOWS}"; break;
|
319
354
|
case "20091124201530": ua_version = "3.6.0.b4"; os_name = "#{oses::MAC_OSX}"; break;
|
320
355
|
case "20091124201751": ua_version = "3.6.0.b4"; os_name = "#{oses::LINUX}"; break;
|
321
356
|
case "20091124213835": ua_version = "3.6.0.b4"; os_name = "#{oses::WINDOWS}"; break;
|
322
|
-
|
357
|
+
case "2009120100": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
|
323
358
|
case "20091201203240": ua_version = "3.5.6"; os_name = "#{oses::MAC_OSX}"; break;
|
324
359
|
case "20091201204959": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; break;
|
325
360
|
case "20091201220228": ua_version = "3.5.6"; os_name = "#{oses::WINDOWS}"; break;
|
326
|
-
|
361
|
+
case "2009120206": ua_version = "3.0.16"; break; // Can be either Mac or Linux
|
327
362
|
case "2009120208": ua_version = "3.0.16"; os_name = "#{oses::WINDOWS}"; break;
|
328
363
|
case "20091204132459": ua_version = "3.6.0.b5"; os_name = "#{oses::LINUX}"; break;
|
329
364
|
case "20091204132509": ua_version = "3.6.0.b5"; os_name = "#{oses::MAC_OSX}"; break;
|
330
365
|
case "20091204143806": ua_version = "3.6.0.b5"; os_name = "#{oses::WINDOWS}"; break;
|
331
366
|
case "20091215230859": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
332
367
|
case "20091215230946": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
333
|
-
|
334
|
-
|
335
|
-
|
368
|
+
case "20091215231400": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
|
369
|
+
case "20091215231754":
|
370
|
+
switch (navigator.productSub) {
|
336
371
|
case "20091215": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
337
372
|
case "20100106": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
|
338
373
|
} break;
|
339
|
-
|
340
|
-
|
374
|
+
case "2009121601":
|
375
|
+
switch (navigator.productSub) {
|
341
376
|
case "2009121601": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
342
377
|
case "2010010604": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break; // Could also be Mint x86-64
|
343
378
|
} break;
|
344
|
-
|
345
|
-
|
379
|
+
case "2009121602": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
|
380
|
+
case "20091216104148": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; break;
|
346
381
|
case "20091216132458": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
|
347
382
|
case "20091216132537": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
|
348
383
|
case "20091216142458": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
|
349
384
|
case "20091216142519": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
|
350
385
|
case "2009121708": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "CentOS"; arch = "#{ARCH_X86}"; break;
|
351
|
-
|
352
|
-
|
386
|
+
case "2009122115": ua_version = "3.0.17"; break; // Can be either Mac or Linux
|
387
|
+
case "2009122116": ua_version = "3.0.17"; os_name = "#{oses::WINDOWS}"; break;
|
353
388
|
case "20091221151141": ua_version = "3.5.7"; os_name = "#{oses::MAC_OSX}"; break;
|
354
389
|
case "20091221152502": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; break;
|
355
390
|
case "20091221164558": ua_version = "3.5.7"; os_name = "#{oses::WINDOWS}"; break;
|
356
|
-
|
357
|
-
|
391
|
+
case "2009122200": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
|
392
|
+
case "20091223231431": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "PCLunixOS"; arch = "#{ARCH_X86}"; break;
|
358
393
|
case "20100105194006": ua_version = "3.6.0.rc1"; os_name = "#{oses::MAC_OSX}"; break;
|
359
394
|
case "20100105194116": ua_version = "3.6.0.rc1"; os_name = "#{oses::LINUX}"; break;
|
360
395
|
case "20100105212446": ua_version = "3.6.0.rc1"; os_name = "#{oses::WINDOWS}"; break;
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
396
|
+
case "2010010604": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
|
397
|
+
case "2010010605": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
398
|
+
case "20100106054534": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
|
399
|
+
case "20100106054634": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
|
365
400
|
case "20100106211825": ua_version = "3.5.7"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
|
366
401
|
case "20100106212742": ua_version = "3.5.7"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
|
367
402
|
case "20100106215614": ua_version = "3.5.7"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
|
368
|
-
|
403
|
+
case "20100110112429": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; break;
|
369
404
|
case "20100115132715": ua_version = "3.6.0"; os_name = "#{oses::MAC_OSX}"; break;
|
370
405
|
case "20100115133306": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; break;
|
371
406
|
case "20100115144158": ua_version = "3.6.0"; os_name = "#{oses::WINDOWS}"; break;
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
407
|
+
case "20100125074043": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
|
408
|
+
case "20100125074127": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
|
409
|
+
case "20100125204847": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
|
410
|
+
case "20100125204903": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
|
376
411
|
case "20100202152834": ua_version = "3.5.8"; os_name = "#{oses::MAC_OSX}"; break;
|
377
412
|
case "20100202153512": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; break;
|
378
413
|
case "20100202165920": ua_version = "3.5.8"; os_name = "#{oses::WINDOWS}"; break;
|
@@ -500,6 +535,8 @@ function getVersion(){
|
|
500
535
|
case "20100709115208": ua_version = "3.6.7.b1"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
|
501
536
|
case "20100709183408": ua_version = "3.6.7.b1"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
502
537
|
case "20100716093011": ua_version = "3.6.7.b2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
|
538
|
+
case "20101203075014": ua_version = "3.6.13"; os_name = "#{oses::WINDOWS}"; break;
|
539
|
+
case "20101206122825": ua_version = "3.6.13"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
|
503
540
|
default:
|
504
541
|
version = searchVersion("Firefox", navigator.userAgent);
|
505
542
|
// Verify whether the ua string is lying by checking if it contains
|
@@ -600,6 +637,8 @@ function getVersion(){
|
|
600
637
|
os_flavor = "XP";
|
601
638
|
os_sp = "SP3";
|
602
639
|
break;
|
640
|
+
case "5822960":
|
641
|
+
// IE 8.0.6001.18702, XP Professional SP3 Greek
|
603
642
|
case "5818702":
|
604
643
|
// IE 8.0.6001.18702, XP Professional SP3 English
|
605
644
|
ua_version = "8.0";
|
@@ -611,10 +650,18 @@ function getVersion(){
|
|
611
650
|
// IE 8.0.7100.0, Windows 7 64-bit English
|
612
651
|
case "5816385":
|
613
652
|
// IE 8.0.7600.16385, Windows 7 English
|
653
|
+
case "5816475":
|
614
654
|
ua_version = "8.0";
|
615
655
|
os_flavor = "7";
|
616
656
|
os_sp = "SP0";
|
617
657
|
break;
|
658
|
+
case "9016406":
|
659
|
+
// IE 9.0.7930.16406, Windows 7 64-bit
|
660
|
+
ua_version = "9.0";
|
661
|
+
os_flavor = "7";
|
662
|
+
os_sp = "SP0";
|
663
|
+
break;
|
664
|
+
|
618
665
|
//default:
|
619
666
|
// document.writeln(version);
|
620
667
|
// break;
|
@@ -654,11 +701,12 @@ function getVersion(){
|
|
654
701
|
//--
|
655
702
|
// Flavor
|
656
703
|
//--
|
657
|
-
if (
|
658
|
-
// Then this is Gecko and we can do it without the useragent
|
659
|
-
version = navigator.oscpu.toLowerCase();
|
660
|
-
} else if (!ua_is_lying) {
|
704
|
+
if (!ua_is_lying) {
|
661
705
|
version = useragent.toLowerCase();
|
706
|
+
} else if (navigator.oscpu) {
|
707
|
+
// Then this is Gecko and we can get at least os_name without the
|
708
|
+
// useragent
|
709
|
+
version = navigator.oscpu.toLowerCase();
|
662
710
|
} else {
|
663
711
|
// All we have left is the useragent and we know it's lying, so don't bother
|
664
712
|
version = " ";
|
@@ -680,14 +728,16 @@ function getVersion(){
|
|
680
728
|
else if (version.indexOf("windows nt 6.1") != -1) { os_flavor = "7"; }
|
681
729
|
}
|
682
730
|
if (os_name == "#{oses::LINUX}" && (!os_flavor || 0 == os_flavor.length)) {
|
683
|
-
if (version.indexOf("gentoo") != -1)
|
684
|
-
else if (version.indexOf("ubuntu") != -1)
|
685
|
-
else if (version.indexOf("debian") != -1)
|
686
|
-
else if (version.indexOf("rhel") != -1)
|
687
|
-
else if (version.indexOf("red hat") != -1){ os_flavor = "RHEL";
|
688
|
-
else if (version.indexOf("centos") != -1)
|
731
|
+
if (version.indexOf("gentoo") != -1) { os_flavor = "Gentoo"; }
|
732
|
+
else if (version.indexOf("ubuntu") != -1) { os_flavor = "Ubuntu"; }
|
733
|
+
else if (version.indexOf("debian") != -1) { os_flavor = "Debian"; }
|
734
|
+
else if (version.indexOf("rhel") != -1) { os_flavor = "RHEL"; }
|
735
|
+
else if (version.indexOf("red hat") != -1) { os_flavor = "RHEL"; }
|
736
|
+
else if (version.indexOf("centos") != -1) { os_flavor = "CentOS"; }
|
737
|
+
else if (version.indexOf("fedora") != -1) { os_flavor = "Fedora"; }
|
738
|
+
else if (version.indexOf("android") != -1) { os_flavor = "Android"; }
|
689
739
|
}
|
690
|
-
|
740
|
+
|
691
741
|
//--
|
692
742
|
// Language
|
693
743
|
//--
|
@@ -706,7 +756,20 @@ function getVersion(){
|
|
706
756
|
//--
|
707
757
|
// Architecture
|
708
758
|
//--
|
759
|
+
if (typeof(navigator.cpuClass) != 'undefined') {
|
760
|
+
// Then this is IE or Opera9+ and we can grab the arch directly
|
761
|
+
switch (navigator.cpuClass) {
|
762
|
+
case "x86":
|
763
|
+
arch = "#{ARCH_X86}";
|
764
|
+
break;
|
765
|
+
case "x64":
|
766
|
+
arch = "#{ARCH_X86_64}";
|
767
|
+
break;
|
768
|
+
}
|
769
|
+
}
|
709
770
|
if (!arch || 0 == arch.length) {
|
771
|
+
// We don't have the handy-dandy navagator.cpuClass, so infer from
|
772
|
+
// platform
|
710
773
|
version = navigator.platform;
|
711
774
|
//document.write(version + "\\n");
|
712
775
|
// IE 8 does a bit of wacky user-agent switching for "Compatibility View";
|
data/lib/rex/file.rb
CHANGED
@@ -12,6 +12,21 @@ module Rex
|
|
12
12
|
###
|
13
13
|
module FileUtils
|
14
14
|
|
15
|
+
#
|
16
|
+
# This methods cleans the supplied path of directory traversal sequences
|
17
|
+
# It must accept path/with/..a/folder../starting/or/ending/in/two/dots
|
18
|
+
# but clean ../something as well as path/with/..\traversal
|
19
|
+
#
|
20
|
+
def self.clean_path(old)
|
21
|
+
path = old
|
22
|
+
while(path.index(/\/..\/|\/..\\|\\..\\|\\..\/|\A..\\|\A..\//) != nil)
|
23
|
+
path.gsub!(/\A..\\|\A..\//,'') #eliminate starting ..\ or ../
|
24
|
+
path.gsub!(/\/..\/|\/..\\/,'/') #clean linux style
|
25
|
+
path.gsub!(/\\..\\|\\..\//,'\\') #clean windows style
|
26
|
+
end
|
27
|
+
path
|
28
|
+
end
|
29
|
+
|
15
30
|
#
|
16
31
|
# This method searches the PATH environment variable for
|
17
32
|
# a fully qualified path to the supplied file name.
|
data/lib/rex/io/stream.rb
CHANGED
@@ -94,7 +94,7 @@ module Stream
|
|
94
94
|
else
|
95
95
|
false
|
96
96
|
end
|
97
|
-
rescue ::Errno::EBADF
|
97
|
+
rescue ::Errno::EBADF, ::Errno::ENOTSOCK
|
98
98
|
return ::EOFError
|
99
99
|
rescue StreamClosedError, ::IOError, ::EOFError, ::Errno::EPIPE
|
100
100
|
# If the thing that lead to the closure was an abortive close, then
|
data/lib/rex/parser/nmap_xml.rb
CHANGED
@@ -87,6 +87,12 @@ class NmapXMLStreamParser
|
|
87
87
|
# Store any service info with the associated port. There shouldn't
|
88
88
|
# be any collisions on attribute names here, so just merge them.
|
89
89
|
@host["ports"].last.merge!(attributes)
|
90
|
+
when "trace"
|
91
|
+
@host["trace"] = {"port" => attributes["port"], "proto" => attributes["proto"], "hops" => [] }
|
92
|
+
when "hop"
|
93
|
+
if @host["trace"]
|
94
|
+
@host["trace"]["hops"].push(attributes)
|
95
|
+
end
|
90
96
|
end
|
91
97
|
end
|
92
98
|
|
data/lib/rex/poly/block.rb
CHANGED
@@ -289,6 +289,15 @@ class LogicalBlock
|
|
289
289
|
(@state.first_phase) ? 0 : reg.regnum
|
290
290
|
end
|
291
291
|
|
292
|
+
def size_of(lblock)
|
293
|
+
@state.block_list.map { |b, p|
|
294
|
+
if b == lblock
|
295
|
+
return p.length
|
296
|
+
end
|
297
|
+
}
|
298
|
+
0
|
299
|
+
end
|
300
|
+
|
292
301
|
#
|
293
302
|
# This attributes contains the currently assigned offset of the permutation
|
294
303
|
# associated with this block into the polymorphic buffer that is being
|