c - 这个c程序有可能破解密码吗?

标签 c passwords

是否可以在不输入字符串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() 返回 NULLpasswd 的内容不确定,可能是先前 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/

相关文章:

c - 如何在没有 clang_complete 的情况下在 vim 中获得 C 代码完成?

java - 如何使用java在具有相同密码的目录中解压缩多个受密码保护的zip文件?

cryptography - 使用 BouncyCaSTLe 库的 Argon2 示例

php - 验证用户密码与数据库中的密码匹配

passwords - 如何使用 spring security 在 LdapUserDetailsMapper 中从 LDAP 访问用户密码?

c - 尝试将命令行参数解析为 C 中的两个单独的命令

c - Clock_t 和 time_t 或 time(NULL) 和 Clock() 之间的区别

c - 整数和长整数的大小?

c - 如何使用引用运算符在 C 中获取指向字符串的指针?

sql-server - 在启动脚本/配置文件中存储数据库密码的最佳方法?