Skip to content

Commit 4f3e424

Browse files
committed
login funcs
1 parent 8a96e94 commit 4f3e424

File tree

3 files changed

+65
-17
lines changed

3 files changed

+65
-17
lines changed

account_login.c

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,47 @@
77
#include "account_login.h"
88
#include "helper.h"
99

10+
#define ADMIN_PERMISSION (1)
11+
#define NO_PERMISSION (0)
12+
13+
#define STACK_COOKIE_VALUE (0x012345678)
14+
1015
char created_uname[0x100] = {0};
16+
int default_persmissions = NO_PERMISSION;
1117
char created_pass[0x100] = {0};
1218

19+
int current_logged_in_permissions = 0;
1320
char currently_logged_in_uname[0x100] = {0};
21+
char secret_admin_password[0x10] = {0};
1422

15-
bool check_auth(char* uname, char* passwd, bool* auth_success) {
16-
// stub
17-
return false;
18-
}
1923

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;
2230
}
2331

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));
2735
}
2836

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+
}
2941

30-
// vuln: VERSION1 stackoverflow to overwrite auth_success
3142
bool handle_login(int client_fd, char* client_str) {
3243
bool auth_success = false;
44+
int stack_cookie_1;
45+
int operation = 0;
3346
char uname[0x100];
3447
char passwd[0x100];
3548

49+
stack_cookie_1 = STACK_COOKIE_VALUE;
50+
3651
if (!get_str_from_client(client_fd, uname)) {
3752
printf("handle_login error: get_str_from_client failed\n");
3853
return false;
@@ -43,28 +58,52 @@ bool handle_login(int client_fd, char* client_str) {
4358
return false;
4459
}
4560

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");
4863
return false;
4964
}
5065

5166
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;
5475
}
76+
return true;
77+
}
78+
79+
bool handle_login_admin(int client_fd, char* client_str) {
80+
char passwd[0x100];
5581

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+
}
5786

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;
5894
return true;
5995
}
6096

97+
6198
bool handle_logout(int client_fd, char* client_str) {
6299
currently_logged_in_uname[0] = '\0';
100+
current_logged_in_permissions = 0;
63101
return true;
64102
}
65103

66104
bool handle_create_user(int client_fd, char* client_str) {
67105
// stub
106+
// read corrently (but no null terminator) into created_uname, created_passwd
68107
return false;
69108
}
70109

@@ -75,6 +114,11 @@ bool handle_admin_run_cmd(int client_fd, char* client_str) {
75114
return false;
76115
}
77116

117+
if (current_logged_in_permissions != ADMIN_PERMISSION) {
118+
printf("hacker detected! and hacker averted ;)\n");
119+
return false;
120+
}
121+
78122
char cmd[0x1000];
79123
if (!get_str_from_client(client_fd, cmd)) {
80124
printf("handle_admin_run_cmd error: get_str_from_client failed\n");

account_login.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <stdbool.h>
55

66
bool handle_login(int client_fd, char* client_str);
7+
bool handle_get_currently_logged_in_uname(int client_fd, char* client_str);
78
bool handle_admin_run_cmd(int client_fd, char* client_str);
89
bool handle_create_user(int client_fd, char* client_str);
910
bool handle_logout(int client_fd, char* client_str);

game_dispatcher.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
#include "helper.h"
1212
#include "game_dispatcher.h"
1313

14+
// includes for dispatchers
15+
#include "account_login.h"
16+
1417
typedef bool (*pkt_handler)(int client_fd, char* client_str);
1518

16-
pkt_handler handlers[] = {handle_get_version};
19+
pkt_handler handlers[] = {handle_get_version, handle_get_currently_logged_in_uname};
1720

1821
void handle_client(int client_fd, char* client_str) {
1922
int pkt_type;
@@ -43,7 +46,7 @@ void handle_client(int client_fd, char* client_str) {
4346

4447
// handle packet type
4548
printf("dispatching\n");
46-
bool dispatch_status = handlers[pkt_type](client_fd, client_str); // vuln: oob run any func lol
49+
bool dispatch_status = handlers[pkt_type](client_fd, client_str);
4750
printf("dispatch_status: %d\n", dispatch_status);
4851
}
4952
end:

0 commit comments

Comments
 (0)