gpt4 book ai didi

c - 关于 strcpy 中的安全漏洞

转载 作者:行者123 更新时间:2023-12-02 06:35:14 25 4
gpt4 key购买 nike

通过引起缓冲区溢出,我们可以覆盖保存标志值 0 的内存,因此即使是不正确的密码也会破解代码。

这将如何在内部发生?有人可以详细解释一下吗..这在内存中实际上是如何发生的?

#include<stdio.h>

int main(int argc, char *argv[])
{
int flag = 0;
char passwd[10];

memset(passwd,0,sizeof(passwd));

strcpy(passwd, argv[1]);

if(0 == strcmp("LinuxGeek", passwd))
{
flag = 1;
}

if(flag)
{
printf("\n Password cracked \n");
}
else
{
printf("\n Incorrect passwd \n");

}
return 0;

最佳答案

请记住,从理论上讲,如果 passwd 中存储的字符串溢出,它会调用未定义的行为并且结果不可预测。

实际上,在许多局部变量存储在堆栈中的现代平台上,如果您的编译器将 flag 放置在 passwd 缓冲区之上,它可能是被 strcpy 调用溢出。

即您的堆栈可能如下所示:

| ...        |
+------------+
| flag | / \
+------------+ |
| passwd[10] | | increasing addresses
| ... |

如果您向 passwd 写入超过 10 个字节,strcpy 只会覆盖 flag

请注意,行为因编译器与编译器、平台与平台而异。此解释涵盖了常见系统上发生的情况,但要知道理论上可能存在不使用堆栈的平台,因此此解释不适用。

关于c - 关于 strcpy 中的安全漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21154786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com