如何在 shell 脚本 (netcat) 上将文本作为代码从服务器执行到客户端

如何在 shell 脚本 (netcat) 上将文本作为代码从服务器执行到客户端

我有两个文件,client.sh并且server.sh所有必要的数据都在服务器上,使用它发送到客户端网猫,客户端只是获取这些数据并将其显示给最终用户,问题是当服务器发送一些多行代码时,客户端只是将其作为文本接收并显示在屏幕上

客户端.sh

ip=127.0.0.1
client_port=5678
server_port=8765

while :
do
        # Request the menu from the server
        echo menu > /dev/tcp/"$ip"/"$server_port"
        # Waits the server response
        nc -l $porta_cliente
done

服务器.sh

ip=127.0.0.1
porta_cliente=5678
porta_servidor=8765

while :
do
        nc -vv -l $porta_servidor > logservidor
        echo "Texto recebido: "`cat logservidor` # LOG
        case `cat logservidor` in
        "splash")
                echo "dialog --stdout --msgbox 'SPLASH' 0 0" > /dev/tcp/"$ip"/"$porta_c$
        ;;
        "menu_inicial")
                nc $ip $porta_cliente <<-EOF
                        dialog --stdout --backtitle 'Bem vindo ao SEPA 0.1' --title 'Me$
                        Cadastrar 'Criar um novo usuário' \
                        Entrar 'Fazer login com sua conta' \
                        Sair 'Encerrar o SEPA'

                        # Caso o usuário selecione Cancelar, a execução do script será $
                        if [ $? -eq 0 ]; then
                                echo SUCESSO
                        else
                                rm resposta_servidor dados_digitados 2> /dev/null
                                clear
                                exit
                        fi
                EOF
        ;;
        "menu_principal")
                echo "dialog --msgbox 'MENU_PRINCIPAL' 0 0" > /dev/tcp/"$ip"/"$porta_cl$
        ;;
        *)
                dialog --msgbox 'WTF?!' 0 0 > /dev/tcp/"$ip"/"$porta_cliente"
        ;;
        esac
done

答案1

您可以将 netcat 的输出通过管道传输到 shell

nc -l $porta_cliente | sh

但是,在没有任何身份验证的套接字上,要非常小心,因为这可能允许任何人在客户端计算机上执行任意代码

这种方法是非常糟糕的做法,您应该考虑不同的方法。

答案2

您还可以将文本从 netcat 连接重定向到文件,然后使用命令将其作为命令执行source

例子:

nc -l 8765 > command
source command

相关内容