gpt4 book ai didi

c - printf 有问题或者什么的

转载 作者:行者123 更新时间:2023-12-04 09:23:22 26 4
gpt4 key购买 nike

我正在阅读一些有关安全编程的 Material ,当我输入:./a.out%.622496x%.622496x%n

./a.out%..622496x%n

./a.out%.633x%.63336x%n

./a.out%.6edd33x%.63336x%n

有些会得到 coredump,有些不会,不明白为什么他们打印所有 0。

这是代码示例.cgcc 示例.c

#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
char buffer[512]="";
strncpy(buffer,argv[1],500);
printf(buffer);

return 0;
}

最佳答案

在显示这样的字符串之前,您必须清理输入。

由于 %xxx 是字符串,printf 将它们解释为潜在的参数,然后尝试获取它们,从而产生核心转储。但这更进一步,因为这可能意味着通过这种机制进行安全攻击。在某种程度上,这相当于 SQL 注入(inject)的 C 语言。

作为@TypeIA,正确的方法是将buffer视为格式化字符串的参数(printf("%s", buffer)),不是格式化字符串本身。这也是为什么如果您创建带有参数 ( char * format, ... ); (不是 const)的函数,一些编译器会发出警告的原因。

关于c - printf 有问题或者什么的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275492/

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