avatar

漏洞测试作业五:整数溢出漏洞

整数溢出漏洞

题目

请在XP VC6生成课本示例4-2的案例(DEBUG模式)。进而,修改input.txt文件,使得程序运行时弹出计算器。
提示:input.txt在利用IDE调试时需要放到cpp文件相对目录下;单独运行exe的时候,需要放到exe所在目录中

解答

课本示例

#include <iostream>
#include <windows.h>
#include <shellapi.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_INFO 32767
using namespace std;

void func()
{
ShellExecute(NULL,"open","notepad",NULL,NULL,SW_SHOW);
}
void func1()
{
ShellExecute(NULL,"open","calc",NULL,NULL,SW_SHOW);
}

int main()
{
void (*fuc_ptr)()=func;
char info[MAX_INFO];
char info1[30000]; char info2[30000];

freopen("inputtxt","r",stdin);
cin.getline(info1,30000,' ');
cin.getline(info2,30000,' ');

short len1=strlen(info1);
short len2=strlen(info2);
short all_len=len1+len2;

if(all_len<MAX_INFO)
{
strcpy(info,info1);
strcat(info,info2);
}
fuc_ptr();
return 0;
}

思路

len1len2均较大时,short all_len = len1 + len2; 使all_len发生溢出,进入if代码块,info长度为len1+len2,超过short范围,即MAX_INFO,info覆盖函数指针fuc_ptr的值。将原来fuc_ptr指向func函数改为指向func1函数即可

过程

  • compile,下断点,debug运行,查看funcfunc1地址

func地址

func1地址

  • 正常情况下运行弹出记事本

    image-20200415175701205
  • input.txt中应为两段字符串,中间用空格隔开。当栈中info数据超出定义时的限制便会覆盖函数指针的内容,使用ultraedit修改input.txt,将超出部分修改为待调用函数的地址

    image-20200416234435774
  • 运行,弹出计算器

image-20200415191536378
Author: Michelle19l
Link: https://gitee.com/michelle19l/michelle19l/2020/05/15/漏测作业/漏测作业五/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶