Este é um uso clássico de netcat . Mas isso é unix.SE então minha resposta será completamente em unix.
Nota: netcat tem nomes diferentes em diferentes distros:
-
netcat: alias parancem algumas distros -
nc: GNU netcat no linux ou BSD netcat no * BSD -
ncat: Nmap netcat, consistente na maioria dos sistemas
As opções entre diferentes versões de netcat variam, indicarei onde diferentes versões podem se comportar de maneira diferente. Além disso, eu recomendo strongmente instalar a versão nmap do netcat ( ncat ) já que suas opções de linha de comando são consistentes em sistemas diferentes.
Eu usarei ncat como o nome do netcat por meio da resposta.
TCP
Para usar o TCP para controlar uma máquina através de netcat você tem duas opções: usando um pipe nomeado (que funciona com todas as versões do netcat) e usando -e (que existe somente na versão linux, ou mais exatamente , -e on * BSD faz algo completamente diferente).
No lado do servidor , você precisa executar:
mkfifo pinkie
ncat -kl 0.0.0.0 4096 <pinkie | /bin/sh >pinkie
Onde: 0.0.0.0 é o espaço reservado para "todas as interfaces", use um IP específico para limitá-lo a uma interface específica; -l é escutar e -k manter-se aberto (para não terminar após uma única conexão).
Outra opção (no linux / ncat) é usar:
ncat -kl 0.0.0.0 4096 -e /bin/sh
Para alcançar o mesmo resultado.
No lado do cliente , você pode usar seu aplicativo ou simplesmente executar:
ncat <server ip> 4096
E você está no controle do shell no servidor e pode enviar comandos.
UDP
O UDP é semelhante, mas tem algumas limitações. Você não pode usar -k para o protocolo UDP sem -e , portanto, você precisa usar o linux / ncat para obter um soquete reutilizável.
No lado do servidor você faz:
ncat -ukl 0.0.0.0 4096 -e /bin/sh
E no lado do cliente (ou no seu aplicativo):
ncat -u <server ip> 4096
E mais uma vez você tem um shell funcional.
