字符串函数(C/C++)和安全性潜力的逐个错误

cod*_*ear 2 c c++ security

所以这段代码有一个错误:

void foo (const char * str) {
     char buffer[64];

     strncpy(buffer, str, sizeof(buffer));
     buffer[sizeof(buffer)] = '\0';

     printf("whoa: %s", buffer);
}
Run Code Online (Sandbox Code Playgroud)

如果恶意攻击者弄清楚foo()函数是如何工作的,它会怎么做?基本上,这个代码容易受到什么样的安全潜在问题的影响?

我个人认为攻击者在这种情况下无法做任何事情,但我听说他们可以做很多事情,即使他们只能使用1个字节.

rme*_*dor 6

我在这里看到的唯一一个错误是这一行:

buffer[sizeof(buffer)] = '\0';
Run Code Online (Sandbox Code Playgroud)

这就是你在说什么?我不是这些东西的专家,所以也许我忽略了一些东西,但由于唯一能写入错误字节的东西是零,我认为可能性非常有限.攻击者无法控制那里写的是什么.很可能它只会导致崩溃,但它也可能导致大量其他奇怪的行为,所有这些行为都特定于您的应用程序.我没有看到任何代码注入漏洞,除非此错误导致您的应用程序暴露另一个此类漏洞,该漏洞将用作实际攻击的向量.

再次,带上一粒盐......