【问题标题】:Using a Single system() Call to Execute Multiple Commands in C使用单个 system() 调用在 C 中执行多个命令
【发布时间】:2010-09-19 17:22:48
【问题描述】:

在我正在从事的信息安全实验室中,我的任务是通过一次调用“system()”(用 C 语言编写,在 Fedora 上运行)执行多个命令。什么语法可以让我通过 system() 执行更多命令? (如果程序通过 system() 调用与操作系统交互,那么您可以通过远程计算机上运行的程序执行任意命令。)

即:

char command[] = "????? \r\n"; 
system(command);

【问题讨论】:

  • 除非您在 Windows 上运行,否则回车 (\r) 可能会造成麻烦而不是带来好处。您应该能够按照其他人的建议通过换行符或分号来分隔命令。
  • 在安全性方面,允许远程程序执行任意命令通常是一个令人担忧的过程。如果程序以远程用户的权限在本地运行,则最不严重;如果它以任何提升的权限运行,那就太可怕了。

标签: c security system exploit


【解决方案1】:

这取决于调用 shell 来执行命令,但通常大多数 shell 使用; 来分隔命令,所以这样的东西应该可以工作:

command1; command2; command3

[编辑]

正如@dicroce 提到的,您可以使用&& 而不是;,这将在第一个返回非零值的命令处停止执行。这可能需要也可能不需要(并且某些命令可能在成功时返回非零值),但是如果您尝试处理可能失败的命令,您可能不应该在 system() 调用中将多个命令串在一起,因为您没有任何确定故障发生位置的方法。在这种情况下,您最好的选择是一次执行一个命令,或者创建一个 shell 脚本来执行适当的错误处理并调用它。

【讨论】:

    【解决方案2】:

    在你的命令之间使用 &&。它的优点是它只继续执行命令,只要它们返回成功的错误代码。示例:

    "cd /proc && cat cpuinfo"

    【讨论】:

      【解决方案3】:

      一种可能性立即浮现在脑海中。您可以将所有命令写入脚本,然后运行它:

      system ("cmd.exe /c \"x.cmd\"");
      

      或者,现在我注意到您在 Fedora 上运行:

      system ("x.sh");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 2011-10-04
        • 2021-02-27
        • 1970-01-01
        • 2018-03-04
        • 1970-01-01
        相关资源
        最近更新 更多