一个缓冲区溢出示例

一个缓冲区溢出示例

问:下面是一个简单的密码保护功能,你能在不知道密码的情况下将其破解吗?

 1 #include<stdio.h> 

 2 

 3 int main(int argc, char *argv[]) 

 4 {

 5     int flag = 0; 

 6     char passwd[10]; 

 7     memset(passwd,0,sizeof(passwd)); 

 8     strcpy(passwd, argv[1]); 

 9 

10     if(0 == strcmp("LinuxGeek", passwd))

11     {

12         flag = 1;

13     }

14     if(flag) 

15     {

16         printf("\n Password cracked \n");

17     }

18     else

19     {

20         printf("\n Incorrect passwd \n");

21     }

22 

23     return 0; 

24 } 
View Code

答:破解上述加密的关键在于利用攻破strcpy()函数的漏洞。所以用户在向“passwd”缓存输入随机密码的时候并没有提前检查“passwd”的容量是否足够。所以,如果用户输入一个足够造成缓存溢出并且重写“flag”变量默认值所存在位置的内存的长“密码”,即使这个密码无法通过验证,flag验证位也变成了非零,也就可以获得被保护的数据了。例如:

1 $ ./psswd aaaaaaaaaaaaa 

2 

3 Password cracked 
View Code

参考:http://www.kuqin.com/language/20120909/330359.html

你可能感兴趣的:(示例)