• 旧书重温:0day2【1】 简单的缓冲区溢出案例


    0x01 准备:

    VMwarePlayer

    (我是在360软件管家那搜到的下载的)

    xp sp2 http://user.qzone.qq.com/252738331/blog/1357138598

    (这是我的QQ空间文章,平时收藏的一些windows老版系统,用来做实验用的)

    vc++6.0绿色完整版 网上自己下巴(30M左右)

    ollydby (OllyDBG_1.10_second_cao_cong看雪上下的

    winhex (网上有很多的)

    知识点:

    CPU(Intel,x86)各主要寄存器的一般用途:
    EAX:存储器:用于执行计算,并用于存储函数的返回值。基本操作,如加,减,比较使用
    这个通用寄存器
    EBX:存储数据
    ECX:计数器:常用于计数循环的次数。
    EDX:数据
    ESP:栈顶指针
    EBP:基指针(常用来表示一个函数帧的底部)
    ESI:源操作数指针
    EDI:目的地址指针
    EIP:指令指针

    安装好VM、做好虚拟机(xp sp2)、虚拟机里安好vc++6.0 , ollydby winhex ....

    0x02 生成带缓冲区溢出漏洞的程序

     1 include <stdio.h>
     2 #include <windows.h>
     3 #define PASSWORD "1234567"
     4 
     5 int verify(char * passwd)
     6 {
     7     int iRet;
     8     char buffer[8];
     9     iRet = strcmp(passwd,PASSWORD);
    10     strcpy(buffer,passwd);
    11     return iRet;
    12 
    13 }
    14 
    15 int main()
    16 {
    17 
    18     int flag = 0;
    19     char passwd[1024];
    20     FILE * fp;
    21     LoadLibrary("user32.dll");
    22     //MessageBox(NULL,"dd","xx",1);
    23     if(!(fp=fopen("password2.txt","rw+")))
    24     {
    25         printf("fp fopen flaid 
    ");
    26         int e = GetLastError();
    27         exit(0);
    28     }
    29     fscanf(fp,"%s",passwd);
    30     flag = verify(passwd);
    31     if(flag)
    32     {
    33         printf("incorrect password 
    ");
    34     }
    35     else
    36     {
    37         printf("correct password 
    ");
    38     }
    39     fclose(fp);
    40     return 0;
    41     
    42 }

    以上参考0day2

    0x03触发 溢出 

    把debug目录下password2.txt,内容输入abcdefjh.....xyz 保存、运行生成的exe 、溢出

    offset:74737371   tsrq 控制eip 

    0x04 分析

    设置ollydby为默认实时调试器

    运行exe ollydby断下

    仔细观察发现  tsrq 处 控制了eip , esp指向 uvwxyz 

    所以可以用 jmp esp 策略 使用 lion万能 jmp esp 0x7ffa4512 反向填充tsrq处,

    0x 9083EC4033DB536877657374686661696C8BC453505053B81661D677FFD0 为shellcode 填充uvwxyz....

    (其中我的xp sp2 上的 messageboxw的地址1661D677,因为我的messageboxA 的地址含0较多截断了字符串所以用了W的)

    自己根据情况修改红处( 以上修改文件都是用winhex修改)

  • 相关阅读:
    【Java学习】maven生命周期
    【Java学习】Project Structure详解
    html表格宽度设置失效
    1002. A+B for Polynomials (25)
    1001. A+B Format (20)
    自测-3 数组元素循环右移问题
    自测-5 Shuffling Machine
    自测-4 Have Fun with Numbers
    关联规则算法
    自测-2 素数对猜想
  • 原文地址:https://www.cnblogs.com/witty/p/3455439.html
Copyright © 2020-2023  润新知