7
7
#include "account_login.h"
8
8
#include "helper.h"
9
9
10
+ #define ADMIN_PERMISSION (1)
11
+ #define NO_PERMISSION (0)
12
+
13
+ #define STACK_COOKIE_VALUE (0x012345678)
14
+
10
15
char created_uname [0x100 ] = {0 };
16
+ int default_persmissions = NO_PERMISSION ;
11
17
char created_pass [0x100 ] = {0 };
12
18
19
+ int current_logged_in_permissions = 0 ;
13
20
char currently_logged_in_uname [0x100 ] = {0 };
21
+ char secret_admin_password [0x10 ] = {0 };
14
22
15
- bool check_auth (char * uname , char * passwd , bool * auth_success ) {
16
- // stub
17
- return false;
18
- }
19
23
20
- void get_clientstr_login_details (char * conn_str , char * * uname_out , char * * passwd_out ) {
21
- // stub
24
+ bool check_user_auth (char * uname , char * passwd , bool * auth_success ) {
25
+ if ((0 == strncmp (uname , created_uname , sizeof (created_uname )))
26
+ && (0 == strncmp (passwd , created_pass , sizeof (created_pass )))) {
27
+ * auth_success = true;
28
+ }
29
+ return true;
22
30
}
23
31
24
-
25
- void set_logged_in ( char * conn_str , char * uname , char * passwd ) {
26
- // stub
32
+ void set_login_details ( char * conn_str , char * uname , char * passwd , int permissions ) {
33
+ current_logged_in_permissions = permissions ;
34
+ memcpy ( currently_logged_in_uname , uname , sizeof ( currently_logged_in_uname ));
27
35
}
28
36
37
+ bool handle_get_currently_logged_in_uname (int client_fd , char * client_str ) {
38
+ respond_str_to_client (client_fd , currently_logged_in_uname );
39
+ return true;
40
+ }
29
41
30
- // vuln: VERSION1 stackoverflow to overwrite auth_success
31
42
bool handle_login (int client_fd , char * client_str ) {
32
43
bool auth_success = false;
44
+ int stack_cookie_1 ;
45
+ int operation = 0 ;
33
46
char uname [0x100 ];
34
47
char passwd [0x100 ];
35
48
49
+ stack_cookie_1 = STACK_COOKIE_VALUE ;
50
+
36
51
if (!get_str_from_client (client_fd , uname )) {
37
52
printf ("handle_login error: get_str_from_client failed\n" );
38
53
return false;
@@ -43,28 +58,52 @@ bool handle_login(int client_fd, char* client_str) {
43
58
return false;
44
59
}
45
60
46
- if (!check_auth (uname , passwd , & auth_success )) {
47
- printf ("check_auth error\n" );
61
+ if (!check_user_auth (uname , passwd , & auth_success )) {
62
+ printf ("check_user_auth error\n" );
48
63
return false;
49
64
}
50
65
51
66
if (auth_success ) {
52
- log_verbose ("logging in %s as %s\n" , client_str , uname );
53
- set_logged_in (client_str , uname , passwd );
67
+ log_verbose ("no perm logging in %s as %s\n" , client_str , uname );
68
+ set_login_details (client_str , uname , passwd , default_persmissions );
69
+ }
70
+
71
+ if (STACK_COOKIE_VALUE != stack_cookie_1 ) {
72
+ printf ("hacker tried to buffer overflow! :O exploding!\n" );
73
+ handle_logout (client_fd , client_str );
74
+ return false;
54
75
}
76
+ return true;
77
+ }
78
+
79
+ bool handle_login_admin (int client_fd , char * client_str ) {
80
+ char passwd [0x100 ];
55
81
56
- // mav: if admin, logg out
82
+ if (!get_str_from_client (client_fd , passwd )) {
83
+ printf ("handle_login_admin error: get_str_from_client failed\n" );
84
+ return false;
85
+ }
57
86
87
+ if (0 != strcmp (passwd , secret_admin_password )) {
88
+ log_verbose ("admin login attempted and failed! hacker or typo?!\n" );
89
+ return false;
90
+ }
91
+
92
+ memcpy (currently_logged_in_uname , "admin" , 6 );
93
+ current_logged_in_permissions = ADMIN_PERMISSION ;
58
94
return true;
59
95
}
60
96
97
+
61
98
bool handle_logout (int client_fd , char * client_str ) {
62
99
currently_logged_in_uname [0 ] = '\0' ;
100
+ current_logged_in_permissions = 0 ;
63
101
return true;
64
102
}
65
103
66
104
bool handle_create_user (int client_fd , char * client_str ) {
67
105
// stub
106
+ // read corrently (but no null terminator) into created_uname, created_passwd
68
107
return false;
69
108
}
70
109
@@ -75,6 +114,11 @@ bool handle_admin_run_cmd(int client_fd, char* client_str) {
75
114
return false;
76
115
}
77
116
117
+ if (current_logged_in_permissions != ADMIN_PERMISSION ) {
118
+ printf ("hacker detected! and hacker averted ;)\n" );
119
+ return false;
120
+ }
121
+
78
122
char cmd [0x1000 ];
79
123
if (!get_str_from_client (client_fd , cmd )) {
80
124
printf ("handle_admin_run_cmd error: get_str_from_client failed\n" );
0 commit comments