librex 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|