PWN溢出——整数溢出漏洞分析

文章目录

漏洞原理

漏洞其实就是利用了本机宽度,我的环境是32位的XP,
因此它就有自己的最大宽度,当存储的值超过了本机宽度,就产生了整数溢出。

测试代码

#include <stdio.h>							//头文件

int main()									//程序入口
{
	FILE*fp;								//定义文件流指针
	char FileStr[20] = {0};					//定义一个数组

	int integer = 0x10;						//定义一个变量integer

	int multi = 0;							//定义一个变量multi用来存值

	printf("Welcome!\n");					//输出字符串
	printf("Please input an integer to get through:");

	scanf("%d",&multi);						//获取输入的字符串转化为整型并赋值给multi

	integer = integer * multi;				//将integer的值与multi的值相乘
	
	if((multi != 0)&&(integer == 0))		//判断multi的值与integer的值是否符合条件
	{
		printf("You've got the flag:\n");	//符合输出字符串
		if(fp = fopen("flag.txt","r"))		//判断当前文件夹是否存在flag.txt文件并读取
		{
			fgets(FileStr,48,fp);			//读取文件内容输出到控制台
			printf("%s\n",FileStr);
			fclose(fp);
		}
		else								//若不符合输出字符串
		{
			printf("File error!\n");
		}
	}	
	else									//若不符合输出字符串
	{
		printf("Good Bye!\n");
	}
	
	return 0;								//程序结束
}

这里变量integer = 0x10,那么我们使multi = 0x10000000,则0x10 * 0x10000000=0x100000000,但是int类型的integer是4字节,这里超出了它的最大宽度,所以程序发生了溢出,integer清零,成功符合条件输出文件夹内的flag.txt文件内容。

0x10000000转为十进制为268435456,我们看一下运行结果:
在这里插入图片描述

发布了60 篇原创文章 · 获赞 68 · 访问量 8394

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/105254971
今日推荐