gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:13:27 25 4
gpt4 key购买 nike

我有这种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/

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