Como posso executar texto como código do servidor para o cliente no shell script (netcat)?

1

Eu tenho dois arquivos, client.sh e server.sh , todos os dados necessários estão no servidor, que são enviados para o cliente usando netcat , o cliente apenas obtém esses dados e os exibe para o usuário final, o problema é quando o servidor envia algum código de múltiplas linhas, o cliente apenas o recebe como texto e exibe na tela

client.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

server.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
    
por HenriqueHBR 13.02.2018 / 13:16

2 respostas

2

Você pode canalizar a saída do netcat para o shell

nc -l $porta_cliente | sh

no entanto, em um soquete sem autenticação alguma, seja extremamente cuidadoso, pois isso pode permitir que qualquer um execute código arbitrário na máquina cliente .

Este método é extremamente ruim e você deve considerar abordagens diferentes.

    
por 13.02.2018 / 13:27
0

Você também pode redirecionar seu texto da conexão netcat para um arquivo e executá-lo como um comando, usando source

Exemplo:

nc -l 8765 > command
source command
    
por 13.02.2018 / 22:43