librex 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/README.md +3 -5
  2. data/Rakefile +26 -0
  3. data/lib/rex/compat.rb +1 -1
  4. data/lib/rex/exploitation/javascriptosdetect.rb +125 -62
  5. data/lib/rex/file.rb +15 -0
  6. data/lib/rex/io/stream.rb +1 -1
  7. data/lib/rex/parser/nmap_xml.rb +6 -0
  8. data/lib/rex/poly/block.rb +9 -0
  9. data/lib/rex/post/meterpreter/client.rb +0 -8
  10. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +6 -0
  11. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +1 -1
  12. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +49 -35
  13. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +26 -0
  14. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +9 -2
  15. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +630 -0
  16. data/lib/rex/post/meterpreter/packet.rb +3 -1
  17. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +143 -57
  18. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +6 -0
  19. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +9 -3
  20. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +6 -4
  21. data/lib/rex/proto.rb +1 -0
  22. data/lib/rex/proto/dhcp/server.rb +4 -2
  23. data/lib/rex/proto/http/packet.rb +5 -6
  24. data/lib/rex/proto/ntlm.rb +7 -0
  25. data/lib/rex/proto/ntlm.rb.ut.rb +177 -0
  26. data/lib/rex/proto/ntlm/base.rb +326 -0
  27. data/lib/rex/proto/ntlm/constants.rb +74 -0
  28. data/lib/rex/proto/ntlm/crypt.rb +340 -0
  29. data/lib/rex/proto/ntlm/exceptions.rb +9 -0
  30. data/lib/rex/proto/ntlm/message.rb +533 -0
  31. data/lib/rex/proto/ntlm/utils.rb +358 -0
  32. data/lib/rex/proto/smb/client.rb +548 -86
  33. data/lib/rex/proto/smb/client.rb.ut.rb +4 -4
  34. data/lib/rex/proto/smb/constants.rb +7 -24
  35. data/lib/rex/proto/smb/crypt.rb +12 -71
  36. data/lib/rex/proto/smb/exceptions.rb +12 -0
  37. data/lib/rex/proto/smb/simpleclient.rb +17 -5
  38. data/lib/rex/proto/smb/utils.rb +3 -460
  39. data/lib/rex/proto/tftp/server.rb +2 -2
  40. data/lib/rex/script/base.rb +2 -2
  41. data/lib/rex/socket.rb +12 -0
  42. data/lib/rex/socket.rb.ut.rb +31 -10
  43. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +15 -5
  44. data/lib/rex/text.rb +55 -4
  45. data/lib/rex/ui/output.rb +0 -2
  46. data/lib/rex/ui/text/dispatcher_shell.rb +95 -10
  47. data/lib/rex/ui/text/output/buffer.rb +0 -4
  48. data/lib/rex/ui/text/shell.rb +8 -0
  49. data/lib/rex/ui/text/table.rb +21 -1
  50. metadata +15 -19
  51. 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: 11474
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
@@ -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 (all versions), window.chromium (all versions), and window.window.chrome (3+)
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
- case "2009090216": ua_version = "3.0.14"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
272
- case "20090914014745": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
273
- case "20090915065903": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break;
274
- case "20090915070141": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break;
275
- case "20091007090112": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
276
- 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
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
- switch (navigator.productSub) {
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
- 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
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
- switch (navigator.productSub) {
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
- case "2009102815":
296
- switch (navigator.productSub) {
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
- case "20091029152254": ua_version = "3.6.0.b1"; os_name = "#{oses::LINUX}"; break;
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
- case "20091106091959": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
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
- case "20091108163911": ua_version = "3.6.0.b2"; os_name = "#{oses::LINUX}"; break;
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
- case "20091109125225":
312
- switch (navigator.productSub) {
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
- case "20091115172547": ua_version = "3.6.0.b3"; os_name = "#{oses::LINUX}"; break;
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
- case "2009120100": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
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
- case "2009120206": ua_version = "3.0.16"; break; // Can be either Mac or Linux
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
- case "20091215231400": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
334
- case "20091215231754":
335
- switch (navigator.productSub) {
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
- case "2009121601":
340
- switch (navigator.productSub) {
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
- case "2009121602": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
345
- case "20091216104148": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; break;
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
- case "2009122115": ua_version = "3.0.17"; break; // Can be either Mac or Linux
352
- case "2009122116": ua_version = "3.0.17"; os_name = "#{oses::WINDOWS}"; break;
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
- case "2009122200": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
357
- case "20091223231431": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "PCLunixOS"; arch = "#{ARCH_X86}"; break;
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
- case "2010010604": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
362
- case "2010010605": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
363
- case "20100106054534": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
364
- 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
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
- case "20100110112429": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; break;
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
- case "20100125074043": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
373
- 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
374
- case "20100125204847": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
375
- 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
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 (navigator.oscpu) {
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) { os_flavor = "Gentoo"; }
684
- else if (version.indexOf("ubuntu") != -1) { os_flavor = "Ubuntu"; }
685
- else if (version.indexOf("debian") != -1) { os_flavor = "Debian"; }
686
- else if (version.indexOf("rhel") != -1) { os_flavor = "RHEL"; }
687
- else if (version.indexOf("red hat") != -1){ os_flavor = "RHEL"; }
688
- else if (version.indexOf("centos") != -1) { os_flavor = "CentOS"; }
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";
@@ -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.
@@ -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
@@ -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
 
@@ -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