gpt4 book ai didi

scanf 格式字符串中的 "%.70s"会导致意外行为吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:09 24 4
gpt4 key购买 nike

<分区>

我刚刚在一个有漏洞的 C 程序中遇到了这段令人困惑的代码:

sscanf(user_input, "FOO;%.70s", buf);

这个格式字符串有效吗?我尝试用它实际解析一些东西(即将一些东西读入 buf,但它没有用:

#include <string.h>
#include <stdio.h>
int main() {
char buf[100];
memset(buf, 0x41, sizeof buf);

// output: "FOO;asdasd\n"
printf("FOO;%.70s\n", "asdasd");

sscanf("FOO;asdasd", "FOO;%.70s", buf);

// output: 41 41 41 41 41 41 41 41 41 41
for (int i = 0; i< 10; ++i)
printf("%02x ", buf[i]);
puts("");
}

我的主要问题是我是否可以使用它实际将数据读取到 buf 中,甚至可能超过 70 个字节?但是,如果这是未定义的行为,当使用现代 GCC 根据用户输入编译和运行时,它是否会以某种方式直接导致内存损坏?

澄清:我知道 "FOO;%70s" 会起作用。但这根本不是问题。我不能修改这个程序。它是一个 setuid 二进制文件,我想利用它作为兵棋推演的一部分来提升 Linux 机器上的权限。所以我需要完全理解它的作用,尤其是我是否可以通过此 sscanf 语句将某些内容读入 buf

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