C 函数 read() 导致命令注入(inject)

标签 c shell

我有这种C代码,第一次输入后,如果我输入一个大字符串,最后后面的字符在我的Linux Shell中作为命令执行,它可以用于命令注入(inject),正如我发现的那样() 函数是发生这种情况的主要原因,但不明白为什么,val 只是一个 int:

if (val > 0) {

    struct in_addr *addr;
    int addrMultVal = val*sizeof(*addr);
    char *buf2 = malloc(addrMultVal);
    for (i = 0; i < val; i++) {             
        if (read(0, buf2, sizeof(*addr)) < 0) {
            return 0;
        }
    }
    done = 1;
}

最佳答案

您的addrMultVal变量必须计算addr类型的大小,然后您必须sizeof(*addr)

您的代码 sizeof(addr) 返回指针的大小,可能是 4。

另请注意,read() 不会添加 '\0' 来终止以使其成为字符串(仅提供原始缓冲区)。

关于C 函数 read() 导致命令注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640086/

相关文章:

shell - 为什么 tar 命令标记为 'legacy' ?

c - 为什么在表达式的括号中使用类型声明?

在c中的循环中创建结构体变量

javascript - 如何将 javascript 变量值传递给 bash 脚本

linux - 删除shell脚本中的某些字符

python - Windows 中 .dll 文件的含义是什么......? Linux 中 .so 文件的含义是什么?

c - Mac OS X 上的标准 C 库在哪里?

c - 确保 child 在 parent 结束之前完成

CUDA 程序在 Tesla K20 上运行速度比 GTX 965 慢

java - Shell 行为 : Two (identical? ) 实例的行为与 java 不同