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,我們看一下運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章