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 paranc
em 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.