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.
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