我正在分析一个代码,试图确定这个代码产生了什么漏洞。到目前为止,我认为这是堆栈破坏,因为当第一次输入密码时,如果少于12个字符,它会说它是错误的。当尝试另一个密码时,即使它不是正确的。它说它是正确的。这可能是由sizeof(char)函数引起的,对吗?下面是我正在分析的代码:
#include <stdio.h>
void detonate_bomb () {
puts("Approved: bomb detonated!");
//insert code to detonate the detonate_bomb
exit(1);
}
#define MAX_INPUT 12
int main() {
char *key = malloc(MAX_INPUT *sizeof(char));
strcpy(key, "TiTan15m1D\n");
while (!feof(stdin)) {
char *input_pwd = malloc(MAX_INPUT *sizeof(char));
fgets(input_pwd, MAX_INPUT, stdin);
if (strcmp(input_pwd, key) == 0)
detonate_bomb();
free(input_pwd);
free(key);
puts("Wrong password, try again!");
}
}
1条答案
按热度按时间zbdgwd5y1#
由于不存在格式字符串,因此不存在格式字符串漏洞。
由于没有在堆栈上分配缓冲区数据,因此不会发生堆栈粉碎。
至于代码的问题:
malloc
成功,则不进行检查。feof
使用不当-代码应改为检查fgets
的结果。不检查fgets
是否成功也是一个漏洞。free
在while
循环中间的所有缓冲区都有明显的错误。malloc和free调用都应该移出循环。也就是说,这个程序在没有恶意用户帮助的情况下会自己崩溃。