是否可以在不输入字符串Password
作为输入的情况下打印密码破解
。即使输入的不是密码
,是否存在任何内存泄漏或意外行为可以设置标志。
#include<stdio.h>
#include<string.h>
int main()
{
int flag = 0;
char passwd[10];
char password[10];
memset(passwd,0,sizeof(passwd));
fgets(password, sizeof password, stdin);
strcpy(passwd, password);
if(0 == strcmp("Password", passwd)) {
flag = 1;
}
if(flag) {
printf("\n Password cracked \n");
}
else {
printf("\n Incorrect passwd \n");
}
return 0;
}
最佳答案
OP 第二次进行了重大编辑 - 最好开始一个新问题。 @J.Selva,不要再次更改问题。
在此版本中,以下代码不会检查 fgets()
的返回值(这是一个漏洞利用),但使用password
。这会产生一个可能被用来破解的问题。假设之前运行过一次使用正确密码的代码。现在,通过此运行,恶意用户会导致 IO 错误,fgets()
返回 NULL
。 passwd
的内容不确定,可能是先前 fgets()
调用的值。 memset()
在这里没有帮助,因为它会清除 passwd
而不是 fgets()
使用的内部缓冲区来分配 password
.
memset(passwd,0,sizeof(passwd));
fgets(password, sizeof password, stdin);
strcpy(passwd, password);
正确的代码会使用
// memset not needed
// memset(passwd,0,sizeof(passwd));
if (fgets(password, sizeof password, stdin) == NULL) {
Handle_EOForInputError();
return -1;
}
strcpy(passwd, password);
关于c - 这个c程序有可能破解密码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159269/