作者owasp ()
看板C_and_CPP
标题[问题] struct缓冲区溢位问题
时间Sat Feb 22 11:47:34 2020
开发平台(Platform):Win10
编译器:GCC
额外使用到的函数库(Library Used):无
问题(Question):在「密码」处的缓冲区溢位,为什麽要输入ddaa,而不是aadd
喂入的资料(Input):使用者输入帐号密码。
预期的正确结果(Expected Output):无
错误结果(Wrong Output):无
程式码(Code):
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#define ADMINUID 0x61616464
struct user {
char name[24] ;
char password[8];
unsigned int uid ;
};
struct user cur_user;
long long read_choice(){
char buf[24];
long long choice ;
__read_chk(0,buf,23,24);
choice = atoll(buf);
return choice;
}
void read_input(char *buf,unsigned int size){
int ret ;
ret = __read_chk(0,buf,size,size);
if(ret <= 0){
puts("read error");
_exit(1);
}
if(buf[ret-1] == '\n')
buf[ret-1] = '\x00';
}
void login(){
char name_[24];
char pass_[12];
unsigned int uid_ ;
bool found ;
puts("欢迎使用【上下班打卡系统】\n请输入您的帐号:");
read_input(cur_user.name,23);
//假设这里有「读取档案系统中的帐号、密码、使用者ID对照表」的程式码...
if(!strcmp(cur_user.name, name_)){
found = true ;
printf("请输入您的密码:");
read_input(cur_user.password,8);
if(!strncmp(cur_user.password,pass_,8)){
cur_user.uid = uid_ ;
}else{
puts("认证失败!");
exit(-2);
}
}
if(!found){
cur_user.uid = rand();
printf("\n您是新使用者,对吧?\n 新朋友,欢迎您 :)\n\n我将帮您建立新帐号
,\n请输入您的密码:\n");
gets(cur_user.password);
}
}
//显示功能选单
void menu(){
puts("\n\n【上下班打卡系统】");
puts(" 1. 打上班卡");
puts(" 2. 打下班卡");
puts(" 3. 登出 ");
puts("===============");
if(cur_user.uid == ADMINUID)
puts(" --> 1337. 【管理者功能】查看打卡记录 ");
printf("请输入您的选择(数字):\n");
}
//主函数
void main(){
login();
while(1){
menu();
switch(read_choice()){
case 1:
puts("\n 欢迎来上班,请努力工作!");
break;
case 2:
puts("\n 下班了啊?掰掰!");
break;
case 3:
exit(-1);
break;
case 1337:
if(cur_user.uid != ADMINUID){
puts("\n 您没有权限可以使用这一项只有管理者才能用的「查看打卡记录」功
能喔,\n 我不会告诉你查看打卡记录里面有什麽猫腻的。");
break;
}
puts("\n 《欢迎进入後台管理介面》\n\n\n [请幻想一下这里写满了全公司员
工的打卡记录....]");
break;
default :
puts("\n 可以请您不要乱选吗?");
break;
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.136.165.20 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1582343257.A.E8E.html
※ 编辑: owasp (223.136.165.20 台湾), 02/22/2020 11:48:24
1F:→ Lipraxde: 未看先猜 endian 02/22 14:07
2F:→ Schottky: 你在讲啥...... 02/22 14:26
3F:推 b0920075: little endian 吧 02/22 18:05
4F:→ jaid: 直接猜Little Endian 02/24 08:32