欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-20 09:05:34
...

文章目录

漏洞原理

漏洞其实就是利用了本机宽度,我的环境是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,我们看一下运行结果:
PWN溢出——整数溢出漏洞分析

相关标签: PWN