1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <crypt.h>
6 #define SALT "$1$54lt$"
7 #define HASH SALT"4OOZtZMXwyHi.bwq2QS6U0"
8 char *get_line()
9 {
10 char buf[256];
11 gets(buf);
12 return strdup(buf);
13 }
14 int main()
15 {
16 char *name=NULL, *passwd=NULL, *msg=NULL, buf[256];
17 int trial_num, pass = 0;
18 setbuf(stdout, NULL);
19 for(trial_num = 0; trial_num < 10;trial_num++){
20 printf("USER: ");
21 name = get_line();
22 printf("PASS: ");
23 passwd = get_line();
24 if(strcmp(HASH, crypt(passwd, SALT)) == 0){
25 pass = 1;
26 break;
27 }
28 snprintf(buf, sizeof(buf), "NG(%s)\n", name);
29 printf(buf);
30 }
31 if(pass){
32 printf("MSG: "); msg = get_line();
33 snprintf(buf, sizeof(buf), "echo [%s]%s >> /tmp/memo.log", name, msg);
34 system(buf);
35 system("cat /tmp/memo.log");
36 }
37 return 0;
38 }
質問
①上であげた2つの脆弱性はあっているのか?
②また上であげたものがあっているならどのような攻撃方法をされるのか・
③上の2つ以外に脆弱性はありますか?