带分号的C参数显示为截断

时间:2016-10-20 04:48:26

标签: c string argv

我正在处理与OWASP命令注入Example 1有些相关的任务。简而言之,我接受一个参数(文件名),然后将其附加到字符串“cat”,因此我的程序会提供所提供的文件。如果我将用户输入直接传递给system()函数,则用户可以潜入另一个以分号;分隔的命令。例如:

./commandinject Story.txt;whoami

cat Story.txt并打印当前用户。

我只是被要求检测分号,如果找到,则错误并请求另一个文件 - 循环直到给出有效输入。

这对于strchr()非常简单,至少应该是这样。 我的问题是,当处理字符串argv[1]时,分号上的任何内容都是不可见的。我有一些调试代码打印出所有argv数组值,然后我逐步完成{{1}据我所知,注入的命令是不可见的。

例如,当给出上面的输入时,代码

gdb

将打印出来

printf ("This is the command->%s\n", argv[1]);

真正奇怪的是

This is the command->Story.txt

仍然执行注入的代码。我确信这是一个简单的c-ism,我很遗憾,但我会很感激这方面的一些帮助。

我应该注意,如果我在参数周围使用引号,我的代码正常工作并捕获分号。

system(argv[1]); 

1 个答案:

答案 0 :(得分:3)

shell正在解释;并运行下一个命令。如果您希望将其发送到您的程序,则需要将其放在引号中。

如果你的程序正常结束,你应该看到;执行后的位。

./commandinject "Story.txt;whoami"